Salome HOME
Nerge with PAL/SALOME 2.1.0d
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_TranslationDlg.cxx
index 3063accda5b8ec0221a9d7d5b6c6f0fbdb15260e..de761dd5f6d7c4d7b81e99e498d39cba4b3db56c 100644 (file)
 #include "SMESHGUI.h"
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_VTKUtils.h"
+#include "SMESHGUI_MeshUtils.h"
 #include "SMESHGUI_IdValidator.h"
 #include "SMESHGUI_SpinBox.h"
 #include "SMESH_Actor.h"
+#include "SMESH_TypeFilter.hxx"
 #include "SMDS_Mesh.hxx"
 
 #include "QAD_Application.h"
@@ -243,8 +245,17 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( QWidget* parent, const char* n
   mySMESHGUI  = SMESHGUI::GetSMESHGUI() ;
   mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ;
 
-  myMeshOrSubMeshFilter = new SMESH_TypeFilter( MESHorSUBMESH );
-
+  // Costruction of the logical filter
+  SMESH_ListOfFilter aListOfFilters;
+  Handle(SMESH_TypeFilter) aMeshOrSubMeshFilter = new SMESH_TypeFilter( MESHorSUBMESH );
+  if ( !aMeshOrSubMeshFilter.IsNull() )
+    aListOfFilters.Append( aMeshOrSubMeshFilter );
+  Handle(SMESH_TypeFilter) aSmeshGroupFilter = new SMESH_TypeFilter( GROUP );
+  if ( !aSmeshGroupFilter.IsNull() )
+    aListOfFilters.Append( aSmeshGroupFilter );
+  
+  myMeshOrSubMeshOrGroupFilter = new SMESH_LogicalFilter( aListOfFilters, SMESH_LogicalFilter::LO_OR );
+  
   Init();
 
   /* signals and slots connections */
@@ -488,7 +499,6 @@ void SMESHGUI_TranslationDlg::onTextChange(const QString& theNewText)
     aMesh = myActor->GetObject()->GetMesh();
   
   if ( aMesh ) {
-    
     mySelection->ClearIObjects();
     mySelection->AddIObject( myActor->getIO() );
     
@@ -547,9 +557,13 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
     return;
   
   Handle(SALOME_InteractiveObject) IO = mySelection->firstIObject();
-  myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO) ;
-  myActor = SMESH::FindActorByEntry( mySelection->firstIObject()->getEntry() );
-  
+  myMesh = SMESH::GetMeshByIO(IO);
+  if(myMesh->_is_nil())
+    return;
+  myActor = SMESH::FindActorByObject(myMesh);
+  if (!myActor)
+    return;
+    
   int aNbUnits = 0;
   
   if (myEditCurrentArgument == (QWidget*)LineEditElements)
@@ -559,11 +573,9 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
       if (CheckBoxMesh->isChecked())
        {
          SMESH::GetNameOfSelectedIObjects(mySelection, aString);
-         if(!myMesh->_is_nil())
+       
+         if(!SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO)->_is_nil()) //MESH
            {
-             if (!myActor)
-               return;
-             
              // get IDs from mesh
              SMDS_Mesh* aSMDSMesh = myActor->GetObject()->GetMesh();
              if (!aSMDSMesh)
@@ -578,21 +590,11 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
                  }
                }
            }
-         else
+         else if (!SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO)->_is_nil()) //SUBMESH
            {
              // get submesh
              SMESH::SMESH_subMesh_var aSubMesh = SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO) ;
-             if(aSubMesh->_is_nil())
-               return;
-             
-             myMesh = aSubMesh->GetFather();
-             if(myMesh->_is_nil())
-               return;
              
-             myActor = SMESH::FindActorByObject(myMesh);
-             if (!myActor)
-               return;
-
              // get IDs from submesh
              SMESH::long_array_var anElementsIds = new SMESH::long_array;
              anElementsIds = aSubMesh->GetElementsId();
@@ -600,33 +602,24 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
                myElementsId += QString(" %1").arg(anElementsIds[i]);
              aNbUnits = anElementsIds->length();
            }
-       }
-      else
-       {
-         if(myMesh->_is_nil())
+         else // GROUP
            {
-             // get submesh
-             SMESH::SMESH_subMesh_var aSubMesh = SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO) ;
-             if(!aSubMesh->_is_nil())
-               myMesh = aSubMesh->GetFather();  // get mesh from submesh
-             else
-               {
-                 // get group
-                 SMESH::SMESH_Group_var aGroup = SMESH::IObjectToInterface<SMESH::SMESH_Group>(IO);
-                 if ( !aGroup->_is_nil() )
-                   myMesh = aGroup->GetMesh(); // get mesh from group
-               }
-             
-             if(myMesh->_is_nil())
+             // get smesh group
+             SMESH::SMESH_GroupBase_var aGroup =
+                SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IO);
+             if (aGroup->_is_nil())
                return;
              
-             // get mesh actor
-             myActor = SMESH::FindActorByObject(myMesh);
+             // get IDs from smesh group
+             SMESH::long_array_var anElementsIds = new SMESH::long_array;
+             anElementsIds = aGroup->GetListOfID();
+             for ( int i = 0; i < anElementsIds->length(); i++ )
+               myElementsId += QString(" %1").arg(anElementsIds[i]);
+             aNbUnits = anElementsIds->length();
            }
-         
-         if (!myActor)
-           return;
-         
+       }
+      else
+       {
          aNbUnits = SMESH::GetNameOfSelectedElements(mySelection, aString) ;
          myElementsId = aString;
        }
@@ -652,7 +645,7 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
     double x = n->X();
     double y = n->Y();
     double z = n->Z();
-
+    
     if (myEditCurrentArgument == (QWidget*)SpinBox1_1)
       {
        SpinBox1_1->SetValue(x);
@@ -673,7 +666,6 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
   myBusy = false;
   
   // OK
-  
   if(myNbOkElements)
     {
       buttonOk->setEnabled( true );
@@ -700,7 +692,7 @@ void SMESHGUI_TranslationDlg::SetEditCurrentArgument()
     if (CheckBoxMesh->isChecked())
       {
        QAD_Application::getDesktop()->SetSelectionMode( ActorSelection );
-       mySelection->AddFilter(myMeshOrSubMeshFilter) ;
+       mySelection->AddFilter(myMeshOrSubMeshOrGroupFilter);
       }
     else
       QAD_Application::getDesktop()->SetSelectionMode( CellSelection, true );
@@ -816,7 +808,7 @@ void SMESHGUI_TranslationDlg::onSelectMesh ( bool toSelectMesh )
   if (toSelectMesh)
     {
       QAD_Application::getDesktop()->SetSelectionMode( ActorSelection );
-      mySelection->AddFilter(myMeshOrSubMeshFilter);
+      mySelection->AddFilter(myMeshOrSubMeshOrGroupFilter);
       LineEditElements->setReadOnly(true);
     }
   else