Salome HOME
0020452: EDF 1056 SMESH : 2D Projection Issue
authoreap <eap@opencascade.com>
Thu, 20 Aug 2009 07:35:09 +0000 (07:35 +0000)
committereap <eap@opencascade.com>
Thu, 20 Aug 2009 07:35:09 +0000 (07:35 +0000)
   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);

src/SMESH/SMESH_Block.cxx
src/SMESH/SMESH_Block.hxx

index fd4edab3265c9dbc468fc264a3ebe3a363f6be8b..59971bfee71a05f7816c47d42b260a42bc16c726 100644 (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,
                                   TopoDS_Vertex        theFirstVertex,
                                   list< TopoDS_Edge >& theEdges,
 
 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;
 {
   // 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
   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();
 
   // loop on edges of wires
   theNbVertexInWires.clear();
index 20c18163b9f09e591636b7f16fb8cf405e7f0ced..97caf611610fa923c5fd0d8fdd40d6b92ae12121 100644 (file)
@@ -276,11 +276,14 @@ public:
   static int GetOrderedEdges (const TopoDS_Face&        theFace,
                               TopoDS_Vertex             theFirstVertex,
                               std::list< TopoDS_Edge >& theEdges,
   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
   // 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:
   // -----------------------------------------------------------
 
  public:
   // -----------------------------------------------------------