{
if (!CORBA::is_nil( theSource ))
{
- SMESH_Mesh_i* anImplPtr = DownCast<SMESH_Mesh_i*>(theSource->GetMesh());
+ SMESH::SMESH_Mesh_var mesh = theSource->GetMesh();
+ SMESH_Mesh_i* anImplPtr = DownCast<SMESH_Mesh_i*>( mesh );
if (anImplPtr)
return anImplPtr->GetImpl().GetMeshDS();
}
const SMESHDS_Mesh* aMesh = getMesh( theObject );
if ( !aMesh )
return;
- SMESH::array_of_ElementType_var types = theObject->GetTypes();
- SMESH::long_array_var aElementsId = theObject->GetIDs();
- // here we assume that type of all IDs defined by first type in array
- const bool isNode = isNodeType( types );
- for(int i = 0, n = aElementsId->length(); i < n; i++)
+
+ if ( DownCast<SMESH_Mesh_i*>( theObject )) // theObject is mesh
{
- if (isNode)
- enlargeBoundingBox( aMesh->FindNode( aElementsId[i] ), theMeasure);
- else
+ for (SMDS_NodeIteratorPtr aNodeIter = aMesh->nodesIterator(); aNodeIter->more(); )
+ enlargeBoundingBox( aNodeIter->next(), theMeasure);
+ }
+ else
+ {
+ SMESH::array_of_ElementType_var types = theObject->GetTypes();
+ SMESH::long_array_var aElementsId = theObject->GetIDs();
+ // here we assume that type of all IDs defined by first type in array
+ const bool isNode = isNodeType( types );
+ for(int i = 0, n = aElementsId->length(); i < n; i++)
{
- if ( const SMDS_MeshElement* elem = aMesh->FindElement( aElementsId[i] ))
- for (SMDS_NodeIteratorPtr aNodeIter = elem->nodeIterator(); aNodeIter->more(); )
- enlargeBoundingBox( aNodeIter->next(), theMeasure);
+ if (isNode)
+ enlargeBoundingBox( aMesh->FindNode( aElementsId[i] ), theMeasure);
+ else
+ {
+ if ( const SMDS_MeshElement* elem = aMesh->FindElement( aElementsId[i] ))
+ for (SMDS_NodeIteratorPtr aNodeIter = elem->nodeIterator(); aNodeIter->more(); )
+ enlargeBoundingBox( aNodeIter->next(), theMeasure);
+ }
}
}
}
def SetMeshOrder(self, submeshes):
"""
- Set order in which concurrent sub-meshes should be meshed
+ Set priority of sub-meshes. It works in two ways:
+
+ * For sub-meshes with assigned algorithms of same dimension generating mesh of
+ *several dimensions*, it sets the order in which the sub-meshes are computed.
+ * For the rest sub-meshes, it sets the order in which the sub-meshes are checked
+ when looking for meshing parameters to apply to a sub-shape. To impose the
+ order in which sub-meshes with uni-dimensional algorithms are computed,
+ call **submesh.Compute()** in a desired order.
Parameters:
submeshes: list of lists of :class:`sub-meshes <SMESH.SMESH_subMesh>`