mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-27 09:50:34 +05:00
23076: [CEA 1499] Get in python all sub-shapes in error after Compute
This commit is contained in:
parent
de00066f64
commit
ad4fc4d4c9
@ -1425,37 +1425,7 @@ class Mesh:
|
|||||||
# Treat compute errors
|
# Treat compute errors
|
||||||
computeErrors = self.smeshpyD.GetComputeErrors( self.mesh, geom )
|
computeErrors = self.smeshpyD.GetComputeErrors( self.mesh, geom )
|
||||||
for err in computeErrors:
|
for err in computeErrors:
|
||||||
shapeText = ""
|
shapeText = " on %s" % self.GetSubShapeName( err.subShapeID )
|
||||||
if self.mesh.HasShapeToMesh():
|
|
||||||
try:
|
|
||||||
mainIOR = salome.orb.object_to_string(geom)
|
|
||||||
for sname in salome.myStudyManager.GetOpenStudies():
|
|
||||||
s = salome.myStudyManager.GetStudyByName(sname)
|
|
||||||
if not s: continue
|
|
||||||
mainSO = s.FindObjectIOR(mainIOR)
|
|
||||||
if not mainSO: continue
|
|
||||||
if err.subShapeID == 1:
|
|
||||||
shapeText = ' on "%s"' % mainSO.GetName()
|
|
||||||
subIt = s.NewChildIterator(mainSO)
|
|
||||||
while subIt.More():
|
|
||||||
subSO = subIt.Value()
|
|
||||||
subIt.Next()
|
|
||||||
obj = subSO.GetObject()
|
|
||||||
if not obj: continue
|
|
||||||
go = obj._narrow( geomBuilder.GEOM._objref_GEOM_Object )
|
|
||||||
if not go: continue
|
|
||||||
ids = go.GetSubShapeIndices()
|
|
||||||
if len(ids) == 1 and ids[0] == err.subShapeID:
|
|
||||||
shapeText = ' on "%s"' % subSO.GetName()
|
|
||||||
break
|
|
||||||
if not shapeText:
|
|
||||||
shape = self.geompyD.GetSubShape( geom, [err.subShapeID])
|
|
||||||
if shape:
|
|
||||||
shapeText = " on %s #%s" % (shape.GetShapeType(), err.subShapeID)
|
|
||||||
else:
|
|
||||||
shapeText = " on subshape #%s" % (err.subShapeID)
|
|
||||||
except:
|
|
||||||
shapeText = " on subshape #%s" % (err.subShapeID)
|
|
||||||
errText = ""
|
errText = ""
|
||||||
stdErrors = ["OK", #COMPERR_OK
|
stdErrors = ["OK", #COMPERR_OK
|
||||||
"Invalid input mesh", #COMPERR_BAD_INPUT_MESH
|
"Invalid input mesh", #COMPERR_BAD_INPUT_MESH
|
||||||
@ -1533,14 +1503,101 @@ class Mesh:
|
|||||||
pass
|
pass
|
||||||
return ok
|
return ok
|
||||||
|
|
||||||
## Return submesh objects list in meshing order
|
## Return a name of a sub-shape by its ID
|
||||||
|
# @param subShapeID a unique ID of a sub-shape
|
||||||
|
# @return a string describing the sub-shape; possible variants:
|
||||||
|
# - "Face_12" (published sub-shape)
|
||||||
|
# - FACE #3 (not published sub-shape)
|
||||||
|
# - sub-shape #3 (invalid sub-shape ID)
|
||||||
|
# - #3 (error in this function)
|
||||||
|
def GetSubShapeName(self, subShapeID ):
|
||||||
|
if not self.mesh.HasShapeToMesh():
|
||||||
|
return ""
|
||||||
|
try:
|
||||||
|
shapeText = ""
|
||||||
|
mainIOR = salome.orb.object_to_string( self.GetShape() )
|
||||||
|
for sname in salome.myStudyManager.GetOpenStudies():
|
||||||
|
s = salome.myStudyManager.GetStudyByName(sname)
|
||||||
|
if not s: continue
|
||||||
|
mainSO = s.FindObjectIOR(mainIOR)
|
||||||
|
if not mainSO: continue
|
||||||
|
if subShapeID == 1:
|
||||||
|
shapeText = '"%s"' % mainSO.GetName()
|
||||||
|
subIt = s.NewChildIterator(mainSO)
|
||||||
|
while subIt.More():
|
||||||
|
subSO = subIt.Value()
|
||||||
|
subIt.Next()
|
||||||
|
obj = subSO.GetObject()
|
||||||
|
if not obj: continue
|
||||||
|
go = obj._narrow( geomBuilder.GEOM._objref_GEOM_Object )
|
||||||
|
if not go: continue
|
||||||
|
try:
|
||||||
|
ids = self.geompyD.GetSubShapeID( self.GetShape(), go )
|
||||||
|
except:
|
||||||
|
continue
|
||||||
|
if ids == subShapeID:
|
||||||
|
shapeText = '"%s"' % subSO.GetName()
|
||||||
|
break
|
||||||
|
if not shapeText:
|
||||||
|
shape = self.geompyD.GetSubShape( self.GetShape(), [subShapeID])
|
||||||
|
if shape:
|
||||||
|
shapeText = '%s #%s' % (shape.GetShapeType(), subShapeID)
|
||||||
|
else:
|
||||||
|
shapeText = 'sub-shape #%s' % (subShapeID)
|
||||||
|
except:
|
||||||
|
shapeText = "#%s" % (subShapeID)
|
||||||
|
return shapeText
|
||||||
|
|
||||||
|
## Return a list of sub-shapes meshing of which failed, grouped into GEOM groups by
|
||||||
|
# error of an algorithm
|
||||||
|
# @param publish if @c True, the returned groups will be published in the study
|
||||||
|
# @return a list of GEOM groups each named after a failed algorithm
|
||||||
|
def GetFailedShapes(self, publish=False):
|
||||||
|
|
||||||
|
algo2shapes = {}
|
||||||
|
computeErrors = self.smeshpyD.GetComputeErrors( self.mesh, self.GetShape() )
|
||||||
|
for err in computeErrors:
|
||||||
|
shape = self.geompyD.GetSubShape( self.GetShape(), [err.subShapeID])
|
||||||
|
if not shape: continue
|
||||||
|
if err.algoName in algo2shapes:
|
||||||
|
algo2shapes[ err.algoName ].append( shape )
|
||||||
|
else:
|
||||||
|
algo2shapes[ err.algoName ] = [ shape ]
|
||||||
|
pass
|
||||||
|
|
||||||
|
groups = []
|
||||||
|
for algoName, shapes in algo2shapes.items():
|
||||||
|
while shapes:
|
||||||
|
groupType = self.smeshpyD.EnumToLong( shapes[0].GetShapeType() )
|
||||||
|
otherTypeShapes = []
|
||||||
|
sameTypeShapes = []
|
||||||
|
group = self.geompyD.CreateGroup( self.geom, groupType )
|
||||||
|
for shape in shapes:
|
||||||
|
if shape.GetShapeType() == shapes[0].GetShapeType():
|
||||||
|
sameTypeShapes.append( shape )
|
||||||
|
else:
|
||||||
|
otherTypeShapes.append( shape )
|
||||||
|
self.geompyD.UnionList( group, sameTypeShapes )
|
||||||
|
if otherTypeShapes:
|
||||||
|
group.SetName( "%s %s" % ( algoName, shapes[0].GetShapeType() ))
|
||||||
|
else:
|
||||||
|
group.SetName( algoName )
|
||||||
|
groups.append( group )
|
||||||
|
shapes = otherTypeShapes
|
||||||
|
pass
|
||||||
|
if publish:
|
||||||
|
for group in groups:
|
||||||
|
self.geompyD.addToStudyInFather( self.geom, group, group.GetName() )
|
||||||
|
return groups
|
||||||
|
|
||||||
|
## Return sub-mesh objects list in meshing order
|
||||||
# @return list of list of submesh objects
|
# @return list of list of submesh objects
|
||||||
# @ingroup l2_construct
|
# @ingroup l2_construct
|
||||||
def GetMeshOrder(self):
|
def GetMeshOrder(self):
|
||||||
return self.mesh.GetMeshOrder()
|
return self.mesh.GetMeshOrder()
|
||||||
|
|
||||||
## Return submesh objects list in meshing order
|
## Set order in which concurrent sub-meshes sould be meshed
|
||||||
# @return list of list of submesh objects
|
# @param list of sub-meshes
|
||||||
# @ingroup l2_construct
|
# @ingroup l2_construct
|
||||||
def SetMeshOrder(self, submeshes):
|
def SetMeshOrder(self, submeshes):
|
||||||
return self.mesh.SetMeshOrder(submeshes)
|
return self.mesh.SetMeshOrder(submeshes)
|
||||||
|
@ -717,7 +717,7 @@ bool StdMeshers_FaceSide::GetEdgeNodes(size_t i,
|
|||||||
{
|
{
|
||||||
if ( mesh->HasModificationsToDiscard() ) // check nb of nodes on the EDGE sub-mesh
|
if ( mesh->HasModificationsToDiscard() ) // check nb of nodes on the EDGE sub-mesh
|
||||||
{
|
{
|
||||||
int iQuad = sm->GetElements()->next()->IsQuadratic();
|
int iQuad = sm->NbElements() ? sm->GetElements()->next()->IsQuadratic() : 0;
|
||||||
int nbExpect = sm->NbElements() - 1 + iQuad * sm->NbElements();
|
int nbExpect = sm->NbElements() - 1 + iQuad * sm->NbElements();
|
||||||
if ( nbExpect != sm->NbNodes() ) // some nodes are moved from the EDGE by MergeNodes()
|
if ( nbExpect != sm->NbNodes() ) // some nodes are moved from the EDGE by MergeNodes()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user