From: Artem Zhidkov Date: Wed, 23 Dec 2020 19:27:27 +0000 (+0300) Subject: Issue #20513: Filling problem X-Git-Tag: V9_7_0a1~59 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=d84147b276791589fa99c019a5bc68de4e53b328;p=modules%2Fshaper.git Issue #20513: Filling problem Do not convert wire to a single edge if it is already consists of one edge only. --- diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_ShapeTools.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_ShapeTools.cpp index e1840bc63..89133a06b 100644 --- a/src/GeomAlgoAPI/GeomAlgoAPI_ShapeTools.cpp +++ b/src/GeomAlgoAPI/GeomAlgoAPI_ShapeTools.cpp @@ -1130,13 +1130,18 @@ std::shared_ptr GeomAlgoAPI_ShapeTools::wireToEdge( GeomEdgePtr anEdge; if (theWire) { TopoDS_Wire aWire = theWire->impl(); - // Workaround: when concatenate a wire consisting of two edges based on the same B-spline curve - // (non-periodic, but having equal start and end points), first of which is placed at the end - // on the curve and second is placed at the start, this workaround copies second curve to avoid - // treating these edges as a single curve by setting trim parameters. - aWire = fixParametricGaps(aWire); - aWire = BRepAlgo::ConcatenateWire(aWire, GeomAbs_G1); // join smooth parts of wire - TopoDS_Edge aNewEdge = BRepAlgo::ConcatenateWireC0(aWire); // join C0 parts of wire + BRepTools_WireExplorer aWExp(aWire); + TopoDS_Edge aNewEdge = aWExp.Current(); + aWExp.Next(); + if (aWExp.More()) { + // Workaround: when concatenate a wire consisting of two edges based on the same B-spline + // curve (non-periodic, but having equal start and end points), first of which is placed + // at the end on the curve and second is placed at the start, this workaround copies + // second curve to avoid treating these edges as a single curve by setting trim parameters. + aWire = fixParametricGaps(aWire); + aWire = BRepAlgo::ConcatenateWire(aWire, GeomAbs_G1); // join smooth parts of wire + aNewEdge = BRepAlgo::ConcatenateWireC0(aWire); // join C0 parts of wire + } anEdge = GeomEdgePtr(new GeomAPI_Edge); anEdge->setImpl(new TopoDS_Edge(aNewEdge)); }