Modify GetTypes() to return an empty array if there are no elements

This commit is contained in:
eap 2011-06-22 12:47:01 +00:00
parent 4d58862b1b
commit 5df2a8d168
3 changed files with 29 additions and 19 deletions

View File

@ -572,8 +572,12 @@ SMESH::long_array* SMESH_GroupBase_i::GetIDs()
SMESH::array_of_ElementType* SMESH_GroupBase_i::GetTypes() SMESH::array_of_ElementType* SMESH_GroupBase_i::GetTypes()
{ {
SMESH::array_of_ElementType_var types = new SMESH::array_of_ElementType; SMESH::array_of_ElementType_var types = new SMESH::array_of_ElementType;
if ( SMESHDS_GroupBase* ds = GetGroupDS() )
if ( !ds->IsEmpty() )
{
types->length( 1 ); types->length( 1 );
types[0] = GetType(); types[0] = GetType();
}
return types._retn(); return types._retn();
} }

View File

@ -428,8 +428,10 @@ struct _IDSource : public POA_SMESH::SMESH_IDSource
SMESH::array_of_ElementType* GetTypes() SMESH::array_of_ElementType* GetTypes()
{ {
SMESH::array_of_ElementType_var types = new SMESH::array_of_ElementType; SMESH::array_of_ElementType_var types = new SMESH::array_of_ElementType;
if ( _ids.length() > 0 ) {
types->length( 1 ); types->length( 1 );
types[0] = _type; types[0] = _type;
}
return types._retn(); return types._retn();
} }
}; };

View 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::array_of_ElementType_var types = new SMESH::array_of_ElementType;
::SMESH_subMesh* aSubMesh = _mesh_i->_mapSubMesh[_localId]; ::SMESH_subMesh* aSubMesh = _mesh_i->_mapSubMesh[_localId];
if ( SMESHDS_SubMesh* smDS = aSubMesh->GetSubMeshDS() )
{
SMDS_ElemIteratorPtr eIt = smDS->GetElements();
if ( eIt->more() )
{
types->length( 1 );
types[0] = SMESH::ElementType( eIt->next()->GetType());
}
else if ( smDS->GetNodes()->more() )
{
TopoDS_Shape shape = aSubMesh->GetSubShape(); TopoDS_Shape shape = aSubMesh->GetSubShape();
while ( !shape.IsNull() && shape.ShapeType() == TopAbs_COMPOUND ) while ( !shape.IsNull() && shape.ShapeType() == TopAbs_COMPOUND )
{ {
TopoDS_Iterator it( shape ); TopoDS_Iterator it( shape );
shape = it.More() ? it.Value() : TopoDS_Shape(); shape = it.More() ? it.Value() : TopoDS_Shape();
} }
if ( !shape.IsNull() ) if ( !shape.IsNull() && shape.ShapeType() == TopAbs_VERTEX )
{ {
types->length( 1 ); types->length( 1 );
switch ( ::SMESH_Gen::GetShapeDim( shape )) types[0] = SMESH::NODE;
{ }
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);
} }
} }
return types._retn(); return types._retn();