X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MergeNodesDlg.cxx;h=45f754f522a501d657d6e6baf9942be0f27fdc60;hb=d2bb955929b996248443cf0afb9b89f5ffa6a94f;hp=475f2161cf58776c9d4543ab1702d87fff9244d9;hpb=9d11375af40826e967ab2c3bcb77d1f9d439c90c;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx b/src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx index 475f2161c..45f754f52 100644 --- a/src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx @@ -36,6 +36,8 @@ #include "SMESH_Actor.h" #include "SMESH_TypeFilter.hxx" +#include "SMESH_LogicalFilter.hxx" +#include "SMESHGUI_MeshUtils.h" #include "SMDS_Mesh.hxx" #include "GEOMBase.h" @@ -72,6 +74,9 @@ #include #include +//IDL Headers +#include CORBA_SERVER_HEADER(SMESH_Group) + using namespace std; //================================================================================= @@ -158,7 +163,7 @@ SMESHGUI_MergeNodesDlg::SMESHGUI_MergeNodesDlg( SMESHGUI* theModule, const char* // Controls for mesh defining GroupMesh = new QGroupBox(this, "GroupMesh"); - GroupMesh->setTitle(tr("SMESH_MESH")); + GroupMesh->setTitle(tr("SMESH_SELECT_WHOLE_MESH")); GroupMesh->setColumnLayout(0, Qt::Vertical); GroupMesh->layout()->setSpacing(0); GroupMesh->layout()->setMargin(0); @@ -254,12 +259,24 @@ SMESHGUI_MergeNodesDlg::SMESHGUI_MergeNodesDlg( SMESHGUI* theModule, const char* myEditCurrentArgument = (QWidget*)LineEditMesh; myActor = 0; + mySubMeshOrGroup = SMESH::SMESH_subMesh::_nil(); mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - myMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH); + + // Costruction of the logical filter + SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH); + SMESH_TypeFilter* aSmeshGroupFilter = new SMESH_TypeFilter (GROUP); + + QPtrList aListOfFilters; + if (aMeshOrSubMeshFilter) aListOfFilters.append(aMeshOrSubMeshFilter); + if (aSmeshGroupFilter) aListOfFilters.append(aSmeshGroupFilter); + + myMeshOrSubMeshOrGroupFilter = + new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR); + + //myMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH); /* signals and slots connections */ connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); @@ -291,7 +308,7 @@ SMESHGUI_MergeNodesDlg::SMESHGUI_MergeNodesDlg( SMESHGUI* theModule, const char* // Init Mesh field from selection SelectionIntoArgument(); - myHelpFileName = "/files/merging_nodes.htm"; + myHelpFileName = "merging_nodes_page.html"; } //================================================================================= @@ -468,7 +485,10 @@ void SMESHGUI_MergeNodesDlg::onDetect() ListEdit->clear(); SMESH::array_of_long_array_var aNodeGroups; - aMeshEditor->FindCoincidentNodes(SpinBoxTolerance->GetValue(), aNodeGroups); + if(!mySubMeshOrGroup->_is_nil()) + aMeshEditor->FindCoincidentNodesOnPart(mySubMeshOrGroup, SpinBoxTolerance->GetValue(), aNodeGroups); + else + aMeshEditor->FindCoincidentNodes(SpinBoxTolerance->GetValue(), aNodeGroups); for (int i = 0; i < aNodeGroups->length(); i++) { SMESH::long_array& aGroup = aNodeGroups[i]; @@ -630,7 +650,7 @@ void SMESHGUI_MergeNodesDlg::SetEditCurrentArgument() SMESH::SetPointRepresentation(false); if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(myMeshOrSubMeshFilter); + mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); } myEditCurrentArgument->setFocus(); @@ -647,23 +667,37 @@ void SMESHGUI_MergeNodesDlg::SelectionIntoArgument() if (myEditCurrentArgument == (QWidget*)LineEditMesh) { QString aString = ""; LineEditMesh->setText(aString); - + ListCoincident->clear(); ListEdit->clear(); - + myActor = 0; + int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); if (nbSel != 1) return; SALOME_ListIO aList; mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type()); - + Handle(SALOME_InteractiveObject) IO = aList.First(); - myMesh = SMESH::IObjectToInterface(IO); - myActor = SMESH::FindActorByEntry(aList.First()->getEntry()); - if (myMesh->_is_nil() || !myActor) + myMesh = SMESH::GetMeshByIO(IO); + + if (myMesh->_is_nil()) return; - + + myActor = SMESH::FindActorByEntry(IO->getEntry()); + if (!myActor) + myActor = SMESH::FindActorByObject(myMesh); + if(!myActor) + return; + + mySubMeshOrGroup = SMESH::SMESH_IDSource::_nil(); + + if ((!SMESH::IObjectToInterface(IO)->_is_nil() || //SUBMESH OR GROUP + !SMESH::IObjectToInterface(IO)->_is_nil()) && + !SMESH::IObjectToInterface(IO)->_is_nil()) + mySubMeshOrGroup = SMESH::IObjectToInterface(IO); + LineEditMesh->setText(aString); } }