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 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, int SMESH_Block::GetOrderedEdges (const TopoDS_Face& theFace,
TopoDS_Vertex theFirstVertex, TopoDS_Vertex theFirstVertex,
list< TopoDS_Edge >& theEdges, 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 // put wires in a list, so that an outer wire comes first
list<TopoDS_Wire> aWireList; list<TopoDS_Wire> aWireList;
//TopoDS_Wire anOuterWire = BRepTools::OuterWire( theFace ); ### issue 0020184 TopoDS_Wire anOuterWire =
TopoDS_Wire anOuterWire = ShapeAnalysis::OuterWire( theFace ); theShapeAnalysisAlgo ? ShapeAnalysis::OuterWire( theFace ) : BRepTools::OuterWire( theFace );
//aWireList.push_back( anOuterWire ); ### issue 0020184
for ( TopoDS_Iterator wIt (theFace); wIt.More(); wIt.Next() ) for ( TopoDS_Iterator wIt (theFace); wIt.More(); wIt.Next() )
if ( !anOuterWire.IsSame( wIt.Value() )) if ( !anOuterWire.IsSame( wIt.Value() ))
aWireList.push_back( TopoDS::Wire( wIt.Value() )); aWireList.push_back( TopoDS::Wire( wIt.Value() ));
else else
aWireList.push_front( TopoDS::Wire( wIt.Value() ));// ### issue 0020184 aWireList.push_front( TopoDS::Wire( wIt.Value() ));
// loop on edges of wires // loop on edges of wires
theNbVertexInWires.clear(); theNbVertexInWires.clear();

View File

@ -276,11 +276,14 @@ public:
static int GetOrderedEdges (const TopoDS_Face& theFace, static int GetOrderedEdges (const TopoDS_Face& theFace,
TopoDS_Vertex theFirstVertex, TopoDS_Vertex theFirstVertex,
std::list< TopoDS_Edge >& theEdges, 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. // Return nb wires and a list of oredered edges.
// It is used to assign indices to subshapes. // It is used to assign indices to subshapes.
// theFirstVertex may be NULL. // theFirstVertex may be NULL.
// Always try to set a seam edge first // 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: public:
// ----------------------------------------------------------- // -----------------------------------------------------------