IPAL54157: Empty bounding box of a non-empty mesh

This commit is contained in:
eap 2019-09-04 20:50:22 +03:00
parent 3f36e2f8be
commit 54d95073e1
2 changed files with 30 additions and 13 deletions

View File

@ -151,7 +151,8 @@ static SMESHDS_Mesh* getMesh(SMESH::SMESH_IDSource_ptr theSource)
{ {
if (!CORBA::is_nil( theSource )) 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) if (anImplPtr)
return anImplPtr->GetImpl().GetMeshDS(); return anImplPtr->GetImpl().GetMeshDS();
} }
@ -287,6 +288,14 @@ static void enlargeBoundingBox(const SMESH::SMESH_IDSource_ptr theObject,
const SMESHDS_Mesh* aMesh = getMesh( theObject ); const SMESHDS_Mesh* aMesh = getMesh( theObject );
if ( !aMesh ) if ( !aMesh )
return; return;
if ( DownCast<SMESH_Mesh_i*>( theObject )) // theObject is mesh
{
for (SMDS_NodeIteratorPtr aNodeIter = aMesh->nodesIterator(); aNodeIter->more(); )
enlargeBoundingBox( aNodeIter->next(), theMeasure);
}
else
{
SMESH::array_of_ElementType_var types = theObject->GetTypes(); SMESH::array_of_ElementType_var types = theObject->GetTypes();
SMESH::long_array_var aElementsId = theObject->GetIDs(); SMESH::long_array_var aElementsId = theObject->GetIDs();
// here we assume that type of all IDs defined by first type in array // here we assume that type of all IDs defined by first type in array
@ -302,6 +311,7 @@ static void enlargeBoundingBox(const SMESH::SMESH_IDSource_ptr theObject,
enlargeBoundingBox( aNodeIter->next(), theMeasure); enlargeBoundingBox( aNodeIter->next(), theMeasure);
} }
} }
}
} }
//======================================================================= //=======================================================================

View File

@ -2072,7 +2072,14 @@ class Mesh(metaclass = MeshMeta):
def SetMeshOrder(self, submeshes): 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: Parameters:
submeshes: list of lists of :class:`sub-meshes <SMESH.SMESH_subMesh>` submeshes: list of lists of :class:`sub-meshes <SMESH.SMESH_subMesh>`