#include "SALOME_ListIteratorOfListIO.hxx"
#include "VTKViewer_InteractorStyleSALOME.h"
-#include <vtkCell.h>
+#include <vtkCell3D.h>
+#include <vtkQuad.h>
+#include <vtkTriangle.h>
#include <vtkIdList.h>
#include <vtkIntArray.h>
#include <vtkCellArray.h>
#include <qlistbox.h>
#include <qpushbutton.h>
#include <qapplication.h>
+#include <qhbuttongroup.h>
+#include <qradiobutton.h>
// IDL Headers
#include "SALOMEconfig.h"
SMESHGUI_MultiEditDlg::SMESHGUI_MultiEditDlg( QWidget* theParent,
SALOME_Selection* theSelection,
const int theMode,
+ const bool the3d2d,
const char* theName )
: QDialog( theParent, theName, false,
- WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu )
+ WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose )
{
myFilterDlg = 0;
mySubmeshFilter = new SMESH_TypeFilter( SUBMESH );
myGroupFilter = new SMESH_TypeFilter( GROUP );
+ myEntityType = 0;
+
myFilterType = theMode;
QVBoxLayout* aDlgLay = new QVBoxLayout( this, MARGIN, SPACING );
- QFrame* aMainFrame = createMainFrame ( this );
+ QFrame* aMainFrame = createMainFrame ( this, the3d2d );
QFrame* aBtnFrame = createButtonFrame( this );
aDlgLay->addWidget( aMainFrame );
// name : SMESHGUI_MultiEditDlg::createMainFrame
// Purpose : Create frame containing dialog's input fields
//=======================================================================
-QFrame* SMESHGUI_MultiEditDlg::createMainFrame( QWidget* theParent )
+QFrame* SMESHGUI_MultiEditDlg::createMainFrame( QWidget* theParent, const bool the3d2d )
{
QGroupBox* aMainGrp = new QGroupBox( 1, Qt::Horizontal, theParent );
aMainGrp->setFrameStyle( QFrame::NoFrame );
// "Selected cells" group
mySelGrp = new QGroupBox( 1, Qt::Horizontal, aMainGrp );
+
+ myEntityTypeGrp = 0;
+ if ( the3d2d ) {
+ myEntityTypeGrp = new QHButtonGroup( tr("SMESH_ELEMENTS_TYPE"), mySelGrp );
+ (new QRadioButton( tr("SMESH_FACE"), myEntityTypeGrp ))->setChecked( true );
+ (new QRadioButton( tr("SMESH_VOLUME"), myEntityTypeGrp ));
+ myEntityType = myEntityTypeGrp->id( myEntityTypeGrp->selected() );
+ }
+
QFrame* aFrame = new QFrame( mySelGrp );
myListBox = new QListBox( aFrame );
myListBox->setSelectionMode( QListBox::Extended );
myListBox->setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding) );
// myListBox->setColumnMode( QListBox::FitToHeight );
+ myListBox->installEventFilter( this );
myFilterBtn = new QPushButton( tr( "FILTER" ) , aFrame );
myAddBtn = new QPushButton( tr( "ADD" ) , aFrame );
}
}
+//=======================================================================
+// name : SMESHGUI_MultiEditDlg::eventFilter
+// Purpose : event filter
+//=======================================================================
+bool SMESHGUI_MultiEditDlg::eventFilter( QObject* object, QEvent* event )
+{
+ if ( object == myListBox && event->type() == QEvent::KeyPress ) {
+ QKeyEvent* ke = (QKeyEvent*)event;
+ if ( ke->key() == Key_Delete )
+ onRemoveBtn();
+ }
+ return QDialog::eventFilter( object, event );
+}
+
//=======================================================================
// name : SMESHGUI_MultiEditDlg::Init
// Purpose : Init dialog fields, connect signals and slots, show dialog
connect( myGroupChk , SIGNAL( stateChanged( int ) ), SLOT( onGroupChk() ) );
connect( myToAllChk , SIGNAL( stateChanged( int ) ), SLOT( onToAllChk() ) );
+ if ( myEntityTypeGrp )
+ connect( myEntityTypeGrp, SIGNAL( clicked(int) ), SLOT( on3d2dChanged(int) ) );
+
connect( myListBox, SIGNAL( selectionChanged() ), SLOT( onListSelectionChanged() ) );
onSelectionDone();
if ( myToAllChk->isChecked() )
{
myIds.Clear();
- if ( myActor != 0 )
+ SMESH_Actor * anActor = SMESH::FindActorByObject( myMesh );
+ if ( !anActor )
+ anActor = myActor;
+ if ( anActor != 0 )
{
- TVisualObjPtr aVisualObj = myActor->GetObject();
+ TVisualObjPtr aVisualObj = anActor->GetObject();
vtkUnstructuredGrid* aGrid = aVisualObj->GetUnstructuredGrid();
if ( aGrid != 0 )
{
vtkCell* aCell = aGrid->GetCell( i );
if ( aCell != 0 )
{
- int nbNodes = aCell->GetNumberOfPoints();
- if ( nbNodes == 3 && myFilterType == SMESHGUI_TriaFilter ||
- nbNodes == 4 && myFilterType == SMESHGUI_QuadFilter ||
- ( nbNodes == 4 || nbNodes == 3 ) && myFilterType == SMESHGUI_UnknownFilter )
+ vtkTriangle* aTri = vtkTriangle::SafeDownCast(aCell);
+ vtkQuad* aQua = vtkQuad::SafeDownCast(aCell);
+ vtkCell3D* a3d = vtkCell3D::SafeDownCast(aCell);
+
+ if ( aTri && myFilterType == SMESHGUI_TriaFilter ||
+ aQua && myFilterType == SMESHGUI_QuadFilter ||
+ ( aTri || aQua ) && myFilterType == SMESHGUI_FaceFilter ||
+ a3d && myFilterType == SMESHGUI_VolumeFilter )
{
int anObjId = aVisualObj->GetElemObjId( i );
myIds.Add( anObjId );
disconnect( SMESHGUI::GetSMESHGUI(), 0, this, 0 );
SMESHGUI::GetSMESHGUI()->ResetState();
- SMESH::RemoveFilter(SMESHGUI_EdgeFilter);
- SMESH::RemoveFilter(SMESHGUI_FaceFilter);
- SMESH::RemoveFilter(SMESHGUI_QuadFilter);
- SMESH::RemoveFilter(SMESHGUI_TriaFilter);
+ SMESH::RemoveFilters();
SMESH::SetPickable();
mySelection->ClearIObjects();
if (!myActor)
myActor = SMESH::FindActorByObject( myMesh );
VTKViewer_InteractorStyleSALOME* aStyle = SMESH::GetInteractorStyle();
- Handle(VTKViewer_Filter) aFilter1 = aStyle->GetFilter( myFilterType );
- Handle(VTKViewer_Filter) aFilter2 = aStyle->GetFilter( SMESHGUI_FaceFilter );
- if ( !aFilter1.IsNull() )
- aFilter1->SetActor( myActor );
- if ( !aFilter2.IsNull() )
- aFilter2->SetActor( myActor );
- if ( myActor )
- SMESH::SetPickable(myActor);
+ Handle(VTKViewer_Filter) aFilter = aStyle->GetFilter( myFilterType );
+ if ( !aFilter.IsNull() )
+ aFilter->SetActor( myActor );
+//if ( myActor )
+// SMESH::SetPickable(myActor);
}
myBusy = false;
{
if ( myFilterDlg == 0 )
{
- myFilterDlg = new SMESHGUI_FilterDlg( (QWidget*)parent(), SMESH::FACE );
+ myFilterDlg = new SMESHGUI_FilterDlg( (QWidget*)parent(), entityType() ? SMESH::VOLUME : SMESH::FACE );
connect( myFilterDlg, SIGNAL( Accepted() ), SLOT( onFilterAccepted() ) );
}
else
- myFilterDlg->Init( SMESH::FACE );
+ myFilterDlg->Init( entityType() ? SMESH::VOLUME : SMESH::FACE );
myFilterDlg->SetSelection( mySelection );
myFilterDlg->SetMesh( myMesh );
}
//=======================================================================
-// name : SMESHGUI_MultiEditDlg::onAddBtn
+// name : SMESHGUI_MultiEditDlg::isIdValid
// Purpose : Verify whether Id of element satisfies to filters from viewer
//=======================================================================
bool SMESHGUI_MultiEditDlg::isIdValid( const int theId ) const
{
VTKViewer_InteractorStyleSALOME* aStyle = SMESH::GetInteractorStyle();
- Handle(SMESHGUI_Filter) aFilter1 =
+ Handle(SMESHGUI_Filter) aFilter =
Handle(SMESHGUI_Filter)::DownCast( aStyle->GetFilter( myFilterType ) );
- Handle(SMESHGUI_Filter) aFilter2 =
- Handle(SMESHGUI_Filter)::DownCast( aStyle->GetFilter( SMESHGUI_FaceFilter ) );
- return ( aFilter1.IsNull() || aFilter1->IsObjValid( theId ) ) &&
- ( aFilter2.IsNull() || aFilter2->IsObjValid( theId ) );
+
+ return ( !aFilter.IsNull() && aFilter->IsObjValid( theId ) );
}
//=======================================================================
{
SMESH::SMESH_GroupBase_var aGroup =
SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>( anIter.Value() );
- if ( !aGroup->_is_nil() && aGroup->GetType() == SMESH::FACE )
+ if ( !aGroup->_is_nil() && ( aGroup->GetType() == SMESH::FACE && entityType() == 0 || aGroup->GetType() == SMESH::VOLUME && entityType() == 1 ) )
{
if ( aGroup->GetMesh()->GetId() == myMesh->GetId() )
{
//=======================================================================
void SMESHGUI_MultiEditDlg::setSelectionMode()
{
+ SMESH::RemoveFilters();
+
mySelection->ClearIObjects();
mySelection->ClearFilters();
- if ( mySubmeshChk->isChecked() )
- {
+ if ( mySubmeshChk->isChecked() ) {
QAD_Application::getDesktop()->SetSelectionMode( ActorSelection, true );
mySelection->AddFilter( mySubmeshFilter );
}
- else if ( myGroupChk->isChecked() )
- {
+ else if ( myGroupChk->isChecked() ) {
QAD_Application::getDesktop()->SetSelectionMode( ActorSelection, true );
mySelection->AddFilter( myGroupFilter );
}
- else
- {
+ if ( entityType() ) {
+ QAD_Application::getDesktop()->SetSelectionMode( VolumeSelection, true );
+ SMESH::SetFilter( new SMESHGUI_VolumesFilter() );
+ }
+ else {
QAD_Application::getDesktop()->SetSelectionMode( FaceSelection, true );
if ( myFilterType == SMESHGUI_TriaFilter )
SMESH::SetFilter( new SMESHGUI_TriangleFilter() );
else if ( myFilterType == SMESHGUI_QuadFilter )
SMESH::SetFilter( new SMESHGUI_QuadrangleFilter() );
+ else
+ SMESH::SetFilter( new SMESHGUI_FacesFilter() );
}
}
if ( aMeshEditor->_is_nil() )
return false;
+ myBusy = true;
+
SMESH::long_array_var anIds = getIds();
bool aResult = process( aMeshEditor, anIds.inout() );
updateButtons();
}
+ myBusy = false;
return aResult;
}
+//=======================================================================
+// name : SMESHGUI_MultiEditDlg::on3d2dChanged
+// Purpose :
+//=======================================================================
+void SMESHGUI_MultiEditDlg::on3d2dChanged(int type)
+{
+ if ( myEntityType != type ) {
+ myEntityType = type;
+
+ myListBox->clear();
+ myIds.Clear();
+
+ emit ListContensChanged();
+
+ if ( type )
+ myFilterType = SMESHGUI_VolumeFilter;
+ else
+ myFilterType = SMESHGUI_FaceFilter;
+
+ updateButtons();
+ setSelectionMode();
+ }
+}
+
+//=======================================================================
+// name : SMESHGUI_MultiEditDlg::entityType
+// Purpose :
+//=======================================================================
+
+int SMESHGUI_MultiEditDlg::entityType()
+{
+ return myEntityType;
+}
+
/*
Class : SMESHGUI_ChangeOrientationDlg
Description : Modification of orientation of faces
SMESHGUI_ChangeOrientationDlg::SMESHGUI_ChangeOrientationDlg( QWidget* theParent,
SALOME_Selection* theSelection,
const char* theName )
-: SMESHGUI_MultiEditDlg( theParent, theSelection, SMESHGUI_UnknownFilter, theName )
+: SMESHGUI_MultiEditDlg( theParent, theSelection, SMESHGUI_FaceFilter, true, theName )
{
setCaption( tr( "CAPTION" ) );
}
SMESHGUI_UnionOfTrianglesDlg::SMESHGUI_UnionOfTrianglesDlg( QWidget* theParent,
SALOME_Selection* theSelection,
const char* theName )
-: SMESHGUI_MultiEditDlg( theParent, theSelection, SMESHGUI_TriaFilter, theName )
+: SMESHGUI_MultiEditDlg( theParent, theSelection, SMESHGUI_TriaFilter, false, theName )
{
setCaption( tr( "CAPTION" ) );
}
SMESHGUI_CuttingOfQuadsDlg::SMESHGUI_CuttingOfQuadsDlg( QWidget* theParent,
SALOME_Selection* theSelection,
const char* theName )
-: SMESHGUI_MultiEditDlg( theParent, theSelection, SMESHGUI_QuadFilter, theName )
+: SMESHGUI_MultiEditDlg( theParent, theSelection, SMESHGUI_QuadFilter, false, theName )
{
setCaption( tr( "CAPTION" ) );