0020452: EDF 1056 SMESH : 2D Projection Issue

static int GetOrderedEdges (const TopoDS_Face&        theFace,
                               TopoDS_Vertex             theFirstVertex,
                               std::list< TopoDS_Edge >& theEdges,
-                              std::list< int >  &       theNbVertexInWires);
+                              std::list< int >  &       theNbVertexInWires,
+                              const bool                theShapeAnalysisAlgo=false);
This commit is contained in:
eap 2009-08-20 07:35:09 +00:00
parent 2e5ccf9f57
commit 57781aac7a
2 changed files with 26 additions and 10 deletions

View File

@ -952,26 +952,39 @@ int SMESH_Block::GetShapeIDByParams ( const gp_XYZ& theCoord )
return id + 1; // shape ids start at 1
}
//=======================================================================
//function : GetOrderedEdges
//purpose : return nb wires and a list of oredered edges
//=======================================================================
//================================================================================
/*!
* \brief Return number of wires and a list of oredered edges.
* \param theFace - the face to process
* \param theFirstVertex - the vertex of the outer wire to set first in the returned
* list ( theFirstVertex may be NULL )
* \param theEdges - all ordered edges of theFace (outer edges goes first).
* \param theNbVertexInWires - nb of vertices (== nb of edges) in each wire
* \param theShapeAnalysisAlgo - if true, ShapeAnalysis::OuterWire() is used to find
* the outer wire else BRepTools::OuterWire() is used.
* \retval int - nb of wires
*
* Always try to set a seam edge first.
* BRepTools::OuterWire() fails e.g. in the case of issue 0020184,
* ShapeAnalysis::OuterWire() fails in the case of issue 0020452
*/
//================================================================================
int SMESH_Block::GetOrderedEdges (const TopoDS_Face& theFace,
TopoDS_Vertex theFirstVertex,
list< TopoDS_Edge >& theEdges,
list< int > & theNbVertexInWires)
list< int > & theNbVertexInWires,
const bool theShapeAnalysisAlgo)
{
// put wires in a list, so that an outer wire comes first
list<TopoDS_Wire> aWireList;
//TopoDS_Wire anOuterWire = BRepTools::OuterWire( theFace ); ### issue 0020184
TopoDS_Wire anOuterWire = ShapeAnalysis::OuterWire( theFace );
//aWireList.push_back( anOuterWire ); ### issue 0020184
TopoDS_Wire anOuterWire =
theShapeAnalysisAlgo ? ShapeAnalysis::OuterWire( theFace ) : BRepTools::OuterWire( theFace );
for ( TopoDS_Iterator wIt (theFace); wIt.More(); wIt.Next() )
if ( !anOuterWire.IsSame( wIt.Value() ))
aWireList.push_back( TopoDS::Wire( wIt.Value() ));
else
aWireList.push_front( TopoDS::Wire( wIt.Value() ));// ### issue 0020184
aWireList.push_front( TopoDS::Wire( wIt.Value() ));
// loop on edges of wires
theNbVertexInWires.clear();

View File

@ -276,11 +276,14 @@ public:
static int GetOrderedEdges (const TopoDS_Face& theFace,
TopoDS_Vertex theFirstVertex,
std::list< TopoDS_Edge >& theEdges,
std::list< int > & theNbVertexInWires);
std::list< int > & theNbVertexInWires,
const bool theShapeAnalysisAlgo=false);
// Return nb wires and a list of oredered edges.
// It is used to assign indices to subshapes.
// theFirstVertex may be NULL.
// Always try to set a seam edge first
// if (theShapeAnalysisAlgo) then ShapeAnalysis::OuterWire() is used to find the outer
// wire else BRepTools::OuterWire() is used
public:
// -----------------------------------------------------------