Salome HOME
bos #20546: EDF 22644 - Offset not closed.
authorjfa <jfa@opencascade.com>
Mon, 1 Feb 2021 10:54:18 +0000 (13:54 +0300)
committerjfa <jfa@opencascade.com>
Mon, 1 Feb 2021 10:54:18 +0000 (13:54 +0300)
src/GeomAlgoAPI/GeomAlgoAPI_WireBuilder.cpp

index 2a6c42497fcdc364666f3b24fec93a51477667ea..a7b31394536b0c2bd46787c69c2278ba1240ab7f 100644 (file)
@@ -34,6 +34,7 @@
 #include <TopoDS_Wire.hxx>
 #include <TopExp.hxx>
 #include <TopExp_Explorer.hxx>
+#include <ShapeFix_Wire.hxx>
 
 #include <cmath>
 #include <map>
@@ -164,8 +165,15 @@ GeomAlgoAPI_WireBuilder::GeomAlgoAPI_WireBuilder(const ListOfShape& theShapes,
     setImpl(aWireBuilder);
     setBuilderType(OCCT_BRepBuilderAPI_MakeShape);
 
-    // split the result wire
+    // fix edges order (bos #20546)
     TopoDS_Wire aWire = aWireBuilder->Wire();
+    Handle(ShapeFix_Wire) aFW = new ShapeFix_Wire;
+    aFW->Load(aWire);
+    aFW->FixReorder();
+    if (aFW->StatusReorder(ShapeExtend_DONE))
+      aWire = aFW->WireAPIMake();
+
+    // split the result wire
     if (isSplitWire && BRep_Tool::IsClosed(aWire)) {
       TopoDS_Wire aNewWire;
       BRep_Builder aBuilder;
@@ -285,4 +293,4 @@ bool GeomAlgoAPI_WireBuilder::isSelfIntersected(const GeomShapePtr& theWire)
   }
 
   return false;
-}
\ No newline at end of file
+}