From d84147b276791589fa99c019a5bc68de4e53b328 Mon Sep 17 00:00:00 2001 From: Artem Zhidkov Date: Wed, 23 Dec 2020 22:27:27 +0300 Subject: [PATCH] Issue #20513: Filling problem Do not convert wire to a single edge if it is already consists of one edge only. --- src/GeomAlgoAPI/GeomAlgoAPI_ShapeTools.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) 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)); } -- 2.39.2