- }
-
- switch ( aShapeType )
- {
- case TopAbs_SOLID:
- {
- // add sub-mesh of solid itself
- if (( aSubMeshDS = aMeshDS->MeshElements( aShape )))
- theSubMeshList.push_back( aSubMeshDS );
-
- // and of the first shell
- TopExp_Explorer exp( aShape, TopAbs_SHELL );
- if ( exp.More() )
- if (( aSubMeshDS = aMeshDS->MeshElements( exp.Current() )))
- 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 (( sm = aMesh->GetSubMeshContaining( it.Value() )))
- getSubMeshes( sm, theSubMeshList ); // add found sub-mesh or explore deeper
- else
- // no submesh for a compound inside compound
- shapeList.push_back( it.Value() );
- }