Salome HOME
21680: EDF 2288 SMESH: creation of 0D elements from other elements
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_Selection.cxx
index b0ec372bf92084d9929510462913fe6116d914a1..efa3c236148fb3fdd621d82b67d9f9039fd4e99b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2011  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -23,8 +23,9 @@
 // SMESH SMESHGUI_Selection
 // File   : SMESHGUI_Selection.cxx
 // Author : Alexander SOLOVYOV, Open CASCADE S.A.S.
-// SMESH includes
 //
+
+// SMESH includes
 #include "SMESHGUI_Selection.h"
 
 #include "SMESHGUI_Utils.h"
@@ -148,7 +149,7 @@ SMESH_Actor* SMESHGUI_Selection::getActor( int ind ) const
 
 //=======================================================================
 //function : elemTypes
-//purpose  : may return {'Elem0d' 'Edge' 'Face' 'Volume'} at most
+//purpose  : may return {'Elem0d' 'Edge' 'Face' 'Volume' 'BallElem'} at most
 //=======================================================================
 
 QList<QVariant> SMESHGUI_Selection::elemTypes( int ind ) const
@@ -159,6 +160,7 @@ QList<QVariant> SMESHGUI_Selection::elemTypes( int ind ) const
     TVisualObjPtr object = actor->GetObject();
     if ( object ) {
       if ( object->GetNbEntities( SMDSAbs_0DElement )) types.append( "Elem0d" );
+      if ( object->GetNbEntities( SMDSAbs_Ball )) types.append( "BallElem" );
       if ( object->GetNbEntities( SMDSAbs_Edge )) types.append( "Edge" );
       if ( object->GetNbEntities( SMDSAbs_Face )) types.append( "Face" );
       if ( object->GetNbEntities( SMDSAbs_Volume )) types.append( "Volume" );
@@ -248,7 +250,7 @@ QString SMESHGUI_Selection::shrinkMode( int ind ) const
 
 //=======================================================================
 //function : entityMode
-//purpose  : may return {'Elem0d' 'Edge' 'Face' 'Volume'} at most
+//purpose  : may return {'Elem0d' 'Edge' 'Face' 'Volume' 'BallElem' } at most
 //=======================================================================
 
 QList<QVariant> SMESHGUI_Selection::entityMode( int ind ) const
@@ -261,6 +263,7 @@ QList<QVariant> SMESHGUI_Selection::entityMode( int ind ) const
     if ( aMode & SMESH_Actor::eFaces      ) types.append( "Face"   );
     if ( aMode & SMESH_Actor::eEdges      ) types.append( "Edge"   );
     if ( aMode & SMESH_Actor::e0DElements ) types.append( "Elem0d" );
+    if ( aMode & SMESH_Actor::eBallElem ) types.append( "BallElem" );
   }
   return types;
 }
@@ -298,6 +301,10 @@ QString SMESHGUI_Selection::controlMode( int ind ) const
     case SMESH_Actor::eBareBorderVolume:      mode = "eBareBorderVolume";      break;
     case SMESH_Actor::eOverConstrainedFace:   mode = "eOverConstrainedFace";   break;
     case SMESH_Actor::eOverConstrainedVolume: mode = "eOverConstrainedVolume"; break;
+    case SMESH_Actor::eCoincidentNodes:       mode = "eCoincidentNodes";       break;
+    case SMESH_Actor::eCoincidentElems1D:     mode = "eCoincidentElems1D";     break;
+    case SMESH_Actor::eCoincidentElems2D:     mode = "eCoincidentElems2D";     break;
+    case SMESH_Actor::eCoincidentElems3D:     mode = "eCoincidentElems3D";     break;
     default:break;
     }
   }
@@ -424,6 +431,7 @@ int SMESHGUI_Selection::dim( int ind ) const
           case SMESH::FACE  : dim = std::max( dim, 2 ); break;
           case SMESH::VOLUME: dim = std::max( dim, 3 ); break;
           case SMESH::ELEM0D: dim = std::max( dim, 0 ); break;
+          case SMESH::BALL  : dim = std::max( dim, 0 ); break;
           default:;
           }
       }
@@ -543,7 +551,7 @@ int SMESHGUI_Selection::type( const QString& entry, _PTR(Study) study )
     return -1;
 
   if( objComponent->GetIOR()==obj->GetIOR() )
-    return COMPONENT;
+    return SMESH::COMPONENT;
 
   int aLevel = obj->Depth() - objComponent->Depth(),
       aFTag = objFather->Tag(),
@@ -554,16 +562,16 @@ int SMESHGUI_Selection::type( const QString& entry, _PTR(Study) study )
   {
   case 1:
     if (anOTag >= SMESH::Tag_FirstMeshRoot)
-      res = MESH;
+      res = SMESH::MESH;
     break;
   case 2:
     switch (aFTag)
     {
     case SMESH::Tag_HypothesisRoot:
-      res = HYPOTHESIS;
+      res = SMESH::HYPOTHESIS;
       break;
     case SMESH::Tag_AlgorithmsRoot:
-      res = ALGORITHM;
+      res = SMESH::ALGORITHM;
       break;
     }
     break;
@@ -571,25 +579,25 @@ int SMESHGUI_Selection::type( const QString& entry, _PTR(Study) study )
     switch (aFTag)
     {
     case SMESH::Tag_SubMeshOnVertex:
-      res = SUBMESH_VERTEX;
+      res = SMESH::SUBMESH_VERTEX;
       break;
     case SMESH::Tag_SubMeshOnEdge:
-      res = SUBMESH_EDGE;
+      res = SMESH::SUBMESH_EDGE;
       break;
     case SMESH::Tag_SubMeshOnFace:
-      res = SUBMESH_FACE;
+      res = SMESH::SUBMESH_FACE;
       break;
     case SMESH::Tag_SubMeshOnSolid:
-      res = SUBMESH_SOLID;
+      res = SMESH::SUBMESH_SOLID;
       break;
     case SMESH::Tag_SubMeshOnCompound:
-      res = SUBMESH_COMPOUND;
+      res = SMESH::SUBMESH_COMPOUND;
       break;
     default:
       if (aFTag >= SMESH::Tag_FirstGroup)
-        res = GROUP;
+        res = SMESH::GROUP;
       else
-        res = SUBMESH;
+        res = SMESH::SUBMESH;
     }
     break;
   }
@@ -606,29 +614,29 @@ QString SMESHGUI_Selection::typeName( const int t )
 {
   switch( t )
   {
-  case HYPOTHESIS:
+  case SMESH::HYPOTHESIS:
     return "Hypothesis";
-  case ALGORITHM:
+  case SMESH::ALGORITHM:
     return "Algorithm";
-  case MESH:
+  case SMESH::MESH:
     return "Mesh";
-  case SUBMESH:
+  case SMESH::SUBMESH:
     return "SubMesh";
-  case MESHorSUBMESH:
+  case SMESH::MESHorSUBMESH:
     return "Mesh or submesh";
-  case SUBMESH_VERTEX:
+  case SMESH::SUBMESH_VERTEX:
     return "Mesh vertex";
-  case SUBMESH_EDGE:
+  case SMESH::SUBMESH_EDGE:
     return "Mesh edge";
-  case SUBMESH_FACE:
+  case SMESH::SUBMESH_FACE:
     return "Mesh face";
-  case SUBMESH_SOLID:
+  case SMESH::SUBMESH_SOLID:
     return "Mesh solid";
-  case SUBMESH_COMPOUND:
+  case SMESH::SUBMESH_COMPOUND:
     return "Mesh compound";
-  case GROUP:
+  case SMESH::GROUP:
     return "Group";
-  case COMPONENT:
+  case SMESH::COMPONENT:
     return "Component";
   default:
     return "Unknown";
@@ -661,17 +669,19 @@ QString SMESHGUI_Selection::groupType( int ind ) const
 {
   QString e = entry( ind );
   _PTR(SObject) SO = SMESH::GetActiveStudyDocument()->FindObjectID( e.toLatin1().constData() );
-  QString type;
   if( SO )
   {
-    CORBA::Object_var obj = SMESH::SObjectToObject( SO );
-  
-    SMESH::SMESH_Group_var aGroup = SMESH::SMESH_Group::_narrow( obj );
-    SMESH::SMESH_GroupOnGeom_var aGroupOnGeom = SMESH::SMESH_GroupOnGeom::_narrow( obj );
-    if( !aGroup->_is_nil() )
-      type = QString( "Group" );
-    else if ( !aGroupOnGeom->_is_nil() )
-      type = QString( "GroupOnGeom" );
+    SMESH::SMESH_Group_var g = SMESH::SObjectToInterface<SMESH::SMESH_Group>( SO );
+    if( !g->_is_nil() )
+      return "Group";
+
+    SMESH::SMESH_GroupOnGeom_var gog = SMESH::SObjectToInterface<SMESH::SMESH_GroupOnGeom>( SO );
+    if( !gog->_is_nil() )
+      return "GroupOnGeom";
+
+    SMESH::SMESH_GroupOnFilter_var gof = SMESH::SObjectToInterface<SMESH::SMESH_GroupOnFilter>(SO);
+    if ( !gof->_is_nil() )
+      return "GroupOnFilter";
   }
-  return type;
+  return "";
 }