BUG: Mesh Failed dialog shows negative shape ID if nb shapes > SHORT_MAX

+ minor changes:
1) fix 2 typos
2) improve SMESH_Delaunay::ToPython()
This commit is contained in:
eap 2021-08-05 19:03:34 +03:00
parent 6b5dcfe000
commit cd4aa39efa
3 changed files with 26 additions and 11 deletions

View File

@ -114,7 +114,7 @@ module SMESH
short code; // ComputeErrorName or, if negative, algo specific code short code; // ComputeErrorName or, if negative, algo specific code
string comment; // textual problem description string comment; // textual problem description
string algoName; string algoName;
short subShapeID; // id of sub-shape of a shape to mesh long subShapeID; // id of sub-shape of a shape to mesh
boolean hasBadMesh; // there are elements preventing computation available for visualization boolean hasBadMesh; // there are elements preventing computation available for visualization
}; };
typedef sequence<ComputeError> compute_error_array; typedef sequence<ComputeError> compute_error_array;

View File

@ -273,7 +273,7 @@ const BRepMesh_Triangle* SMESH_Delaunay::GetTriangleNear( int iBndNode )
if ( iBndNode >= _triaDS->NbNodes() ) if ( iBndNode >= _triaDS->NbNodes() )
return 0; return 0;
int nodeIDs[3]; int nodeIDs[3];
int nbNbNodes = _bndNodes.size(); int nbBndNodes = _bndNodes.size();
#if OCC_VERSION_LARGE <= 0x07030000 #if OCC_VERSION_LARGE <= 0x07030000
typedef BRepMesh::ListOfInteger TLinkList; typedef BRepMesh::ListOfInteger TLinkList;
#else #else
@ -289,9 +289,9 @@ const BRepMesh_Triangle* SMESH_Delaunay::GetTriangleNear( int iBndNode )
if ( tria.Movability() != BRepMesh_Deleted ) if ( tria.Movability() != BRepMesh_Deleted )
{ {
_triaDS->ElementNodes( tria, nodeIDs ); _triaDS->ElementNodes( tria, nodeIDs );
if ( nodeIDs[0]-1 < nbNbNodes && if ( nodeIDs[0]-1 < nbBndNodes &&
nodeIDs[1]-1 < nbNbNodes && nodeIDs[1]-1 < nbBndNodes &&
nodeIDs[2]-1 < nbNbNodes ) nodeIDs[2]-1 < nbBndNodes )
return &tria; return &tria;
} }
} }
@ -301,9 +301,9 @@ const BRepMesh_Triangle* SMESH_Delaunay::GetTriangleNear( int iBndNode )
if ( tria.Movability() != BRepMesh_Deleted ) if ( tria.Movability() != BRepMesh_Deleted )
{ {
_triaDS->ElementNodes( tria, nodeIDs ); _triaDS->ElementNodes( tria, nodeIDs );
if ( nodeIDs[0]-1 < nbNbNodes && if ( nodeIDs[0]-1 < nbBndNodes &&
nodeIDs[1]-1 < nbNbNodes && nodeIDs[1]-1 < nbBndNodes &&
nodeIDs[2]-1 < nbNbNodes ) nodeIDs[2]-1 < nbBndNodes )
return &tria; return &tria;
} }
} }
@ -373,14 +373,29 @@ void SMESH_Delaunay::ToPython() const
} }
int nodeIDs[3]; int nodeIDs[3];
const char* dofName[] = { "Free",
"InVolume",
"OnSurface",
"OnCurve",
"Fixed",
"Frontier",
"Deleted" };
text << "# nb elements = " << _triaDS->NbElements() << endl;
std::vector< int > deletedElems;
for ( int i = 0; i < _triaDS->NbElements(); ++i ) for ( int i = 0; i < _triaDS->NbElements(); ++i )
{ {
const BRepMesh_Triangle& t = _triaDS->GetElement( i+1 ); const BRepMesh_Triangle& t = _triaDS->GetElement( i+1 );
if ( t.Movability() == BRepMesh_Deleted ) if ( t.Movability() == BRepMesh_Deleted )
continue; deletedElems.push_back( i+1 );
// continue;
_triaDS->ElementNodes( t, nodeIDs ); _triaDS->ElementNodes( t, nodeIDs );
text << "mesh.AddFace([ " << nodeIDs[0] << ", " << nodeIDs[1] << ", " << nodeIDs[2] << " ])" << endl; text << "mesh.AddFace([ " << nodeIDs[0] << ", " << nodeIDs[1] << ", " << nodeIDs[2] << " ]) # "
<< dofName[ t.Movability() ] << endl;
} }
text << "mesh.MakeGroupByIds( 'deleted elements', SMESH.FACE, [";
for ( int id : deletedElems )
text << id << ",";
text << "])" << endl;
const char* fileName = "/tmp/Delaunay.py"; const char* fileName = "/tmp/Delaunay.py";
SMESH_File file( fileName, false ); SMESH_File file( fileName, false );

View File

@ -66,7 +66,7 @@
//------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------
// A macro makes description of a caught exception and calls onExceptionFun(const char*). // A macro makes description of a caught exception and calls onExceptionFun(const char*).
// Several onExceptionFun() are defined here: throwSalomeEx(), doNothing() and returnError(). // Several onExceptionFun() are defined here: throwSalomeEx(), doNothing() and returnError().
// To add your own catch close, define SMY_OWN_CATCH macro before including this file. // To add your own catch clause, define SMY_OWN_CATCH macro before including this file.
#define SMESH_CATCH( onExceptionFun ) \ #define SMESH_CATCH( onExceptionFun ) \
} \ } \