- case TopAbs_SOLID: {
- // add submesh of solid itself
- aSubMeshDS = aMeshDS->MeshElements( aShape );
- if ( aSubMeshDS )
- theSubMeshList.push_back( aSubMeshDS );
- // and of the first shell
- TopExp_Explorer exp( aShape, TopAbs_SHELL );
- if ( exp.More() ) {
- aSubMeshDS = aMeshDS->MeshElements( exp.Current() );
- if ( aSubMeshDS )
- theSubMeshList.push_back( aSubMeshDS );
- }
- break;
- }
- case TopAbs_WIRE:
- case TopAbs_COMPOUND:
- case TopAbs_COMPSOLID: {
- // call getSubMeshes() for sub-shapes
- list<TopoDS_Shape> shapeList;
- shapeList.push_back( aShape );
- list<TopoDS_Shape>::iterator sh = shapeList.begin();
- for ( ; sh != shapeList.end(); ++sh ) {
- for ( TopoDS_Iterator it( *sh ); it.More(); it.Next() ) {
- if ( ::SMESH_subMesh* aSubMesh = aMesh->GetSubMeshContaining( it.Value() ))
- getSubMeshes( aSubMesh, theSubMeshList ); // add found submesh or explore deeper
- else
- // no submesh for a compound inside compound
- shapeList.push_back( it.Value() );
- }
+ ::SMESH_subMesh* sm = smIt->next();
+ if ( sm->GetSubShape().ShapeType() != shapeType )
+ {
+ if ( elementsFound || algoFound )
+ break;
+ if ( sm->GetSubShape().ShapeType() == TopAbs_VERTEX &&
+ mainType != TopAbs_VERTEX )
+ break;