Salome HOME
Modify GetTypes() to return an empty array if there are no elements
authoreap <eap@opencascade.com>
Wed, 22 Jun 2011 12:47:01 +0000 (12:47 +0000)
committereap <eap@opencascade.com>
Wed, 22 Jun 2011 12:47:01 +0000 (12:47 +0000)
src/SMESH_I/SMESH_Group_i.cxx
src/SMESH_I/SMESH_MeshEditor_i.cxx
src/SMESH_I/SMESH_subMesh_i.cxx

index 6312b7389cfa1b6882f06e896baf8e00c5cab54c..6d359d8402340157ae93e06a6fceae010dc49e11 100644 (file)
@@ -572,8 +572,12 @@ SMESH::long_array* SMESH_GroupBase_i::GetIDs()
 SMESH::array_of_ElementType* SMESH_GroupBase_i::GetTypes()
 {
   SMESH::array_of_ElementType_var types = new SMESH::array_of_ElementType;
-  types->length( 1 );
-  types[0] = GetType();
+  if ( SMESHDS_GroupBase* ds = GetGroupDS() )
+    if ( !ds->IsEmpty() )
+    {
+      types->length( 1 );
+      types[0] = GetType();
+    }
   return types._retn();
 }
 
index 27a63c744f287913330e33cc46c8422b50e0dfd5..897dd78a4ab522970b73f548696387ad1fedb820 100644 (file)
@@ -428,8 +428,10 @@ struct _IDSource : public POA_SMESH::SMESH_IDSource
   SMESH::array_of_ElementType* GetTypes()
   {
     SMESH::array_of_ElementType_var types = new SMESH::array_of_ElementType;
-    types->length( 1 );
-    types[0] = _type;
+    if ( _ids.length() > 0 ) {
+      types->length( 1 );
+      types[0] = _type;
+    }
     return types._retn();
   }
 };
index 9ccc8bc8ce8ec378e8b4b4eb64fa99a0544372d9..475254f7c43408dc328116cd1120d08185e23b54 100644 (file)
@@ -557,23 +557,27 @@ SMESH::array_of_ElementType* SMESH_subMesh_i::GetTypes()
   SMESH::array_of_ElementType_var types = new SMESH::array_of_ElementType;
 
   ::SMESH_subMesh* aSubMesh = _mesh_i->_mapSubMesh[_localId];
-  TopoDS_Shape shape = aSubMesh->GetSubShape();
-  while ( !shape.IsNull() && shape.ShapeType() == TopAbs_COMPOUND )
+  if ( SMESHDS_SubMesh* smDS = aSubMesh->GetSubMeshDS() )
   {
-    TopoDS_Iterator it( shape );
-    shape = it.More() ? it.Value() : TopoDS_Shape();
-  }
-  if ( !shape.IsNull() )
-  {
-    types->length( 1 );
-    switch ( ::SMESH_Gen::GetShapeDim( shape ))
+    SMDS_ElemIteratorPtr eIt = smDS->GetElements();
+    if ( eIt->more() )
+    {
+      types->length( 1 );
+      types[0] = SMESH::ElementType( eIt->next()->GetType());
+    }
+    else if ( smDS->GetNodes()->more() )
     {
-    case 0: types[0] = SMESH::ELEM0D; break;
-    case 1: types[0] = SMESH::EDGE; break;
-    case 2: types[0] = SMESH::FACE; break;
-    case 3: types[0] = SMESH::VOLUME; break;
-    default:
-      types->length(0);
+      TopoDS_Shape shape = aSubMesh->GetSubShape();
+      while ( !shape.IsNull() && shape.ShapeType() == TopAbs_COMPOUND )
+      {
+        TopoDS_Iterator it( shape );
+        shape = it.More() ? it.Value() : TopoDS_Shape();
+      }
+      if ( !shape.IsNull() && shape.ShapeType() == TopAbs_VERTEX )
+      {
+        types->length( 1 );
+        types[0] = SMESH::NODE;
+      }
     }
   }
   return types._retn();