Salome HOME
Issue #1664 In the Sketcher, add the function Split a segment - correction for arc...
[modules/shaper.git] / src / GeomAlgoAPI / GeomAlgoAPI_SketchBuilder.cpp
index 8096443c1b2b2f6ff7bf613b3a336cfa0b612f2c..880273df25fe4665fa09d37cd3649dfca5df5be9 100644 (file)
 #include <TopTools_ListIteratorOfListOfShape.hxx>
 
 #include <list>
+#include <cmath>
 
 
 static TopoDS_Vertex findStartVertex(const TopoDS_Shape& theShape)
 {
+  static const double aTol = Precision::PConfusion();
+
   TopExp_Explorer anExp(theShape, TopAbs_VERTEX);
   TopoDS_Vertex aStart = TopoDS::Vertex(anExp.Current());
   gp_Pnt aStartPnt(BRep_Tool::Pnt(aStart));
@@ -32,10 +35,10 @@ static TopoDS_Vertex findStartVertex(const TopoDS_Shape& theShape)
   for (anExp.Next(); anExp.More(); anExp.Next()) {
     aCurrent = TopoDS::Vertex(anExp.Current());
     aCurrentPnt = BRep_Tool::Pnt(aCurrent);
-    if ((aCurrentPnt.X() > aStartPnt.X()) ||
-        (aCurrentPnt.X() == aStartPnt.X() && aCurrentPnt.Y() > aStartPnt.Y()) ||
-        (aCurrentPnt.X() == aStartPnt.X() && aCurrentPnt.Y() == aStartPnt.Y() &&
-            aCurrentPnt.Z() > aStartPnt.Z())) {
+    if ((aCurrentPnt.X() > aStartPnt.X() + aTol) ||
+        (aCurrentPnt.X() > aStartPnt.X() - aTol && aCurrentPnt.Y() > aStartPnt.Y() + aTol) ||
+        (aCurrentPnt.X() > aStartPnt.X() - aTol && aCurrentPnt.Y() > aStartPnt.Y() - aTol &&
+            aCurrentPnt.Z() > aStartPnt.Z() + aTol)) {
       aStart = aCurrent;
       aStartPnt = aCurrentPnt;
     }
@@ -112,7 +115,7 @@ void GeomAlgoAPI_SketchBuilder::createFaces(
         if (!aStartFound) {
           const TopoDS_Edge& anEdge = TopoDS::Edge(anExp.Current());
           TopoDS_Vertex aV1, aV2;
-          TopExp::Vertices(anEdge, aV1, aV2);
+          TopExp::Vertices(anEdge, aV1, aV2, Standard_True);
           if (aV1.IsSame(aStartVertex) == Standard_True)
             aStartFound = true;
           else