0024023: Revamp the OCCT Handle -- general
[occt.git] / src / BRepFill / BRepFill_Sweep.cxx
index 99e7a04..d35de2d 100644 (file)
@@ -45,7 +45,7 @@
 #include <Geom_BezierCurve.hxx>
 #include <Geom_BSplineCurve.hxx>
 #include <Geom2d_Line.hxx>
-#include <Geom2d_Curve.hxx>
+#include <Geom2d_BSplineCurve.hxx>
 #include <Geom2d_TrimmedCurve.hxx>
 #include <GeomLib.hxx>
 #include <GeomLib_IsPlanarSurface.hxx>
 #include <Draw.hxx>
 #include <DrawTrSurf.hxx>
 #include <DBRep.hxx>
+#include <Geom_BoundedSurface.hxx>
 static Standard_Boolean Affich = 0;
 #endif
 
@@ -2465,9 +2466,18 @@ BRepFill_Sweep::BRepFill_Sweep(const Handle(BRepFill_SectionLaw)& Section,
         }
      
        if (uclose && (isec==NbLaw)) {
-         UpdateEdge(TopoDS::Edge(UEdge(1, ipath)), 
-                    S, !exuv, ULast);
-         UEdge(isec+1, ipath) = UEdge(1, ipath);
+          if (UEdge(1, ipath).IsNull()) //degenerated case
+          {
+            UEdge(isec+1, ipath) = BuildEdge(S, !exuv, ULast, 
+                                             Vertex(isec+1, ipath), 
+                                             Vertex(isec+1, ipath+1),
+                                             myTol3d);
+          }
+          else {
+            UpdateEdge(TopoDS::Edge(UEdge(1, ipath)), 
+                      S, !exuv, ULast);
+            UEdge(isec+1, ipath) = UEdge(1, ipath);
+          }
        }
        else {
           if (UEdge(isec+1, ipath).IsNull())
@@ -2502,9 +2512,18 @@ BRepFill_Sweep::BRepFill_Sweep(const Handle(BRepFill_SectionLaw)& Section,
                        S, exuv, VFirst);
        
        if (vclose && (ipath == NbPath)) {
-         UpdateEdge(TopoDS::Edge(VEdge(isec, 1)), 
-                    S, exuv, VLast);
-         VEdge(isec, ipath+1) = VEdge(isec, 1);
+          if (VEdge(isec, 1).IsNull()) //degenerated case
+          {
+            VEdge(isec, ipath+1) = BuildEdge(S, exuv, VLast, 
+                                            Vertex(isec  , ipath+1), 
+                                             Vertex(isec+1, ipath+1),
+                                             myTol3d);
+          }
+          else {
+            UpdateEdge(TopoDS::Edge(VEdge(isec, 1)), 
+                      S, exuv, VLast);
+            VEdge(isec, ipath+1) = VEdge(isec, 1);
+          }
        }
        else if (VEdge(isec, ipath+1).IsNull())
          VEdge(isec, ipath+1) = BuildEdge(S, exuv, VLast,