Salome HOME
Issue #3271: Wire from sketch is built wrong
[modules/shaper.git] / src / BuildPlugin / BuildPlugin_Wire.cpp
index f3d48bd8b4daeaf12131ee702fa40b4256bf9a92..57d001894519c213605cfe433320947e2f12d434 100644 (file)
@@ -320,11 +320,16 @@ bool buildSketchWires(FeaturePtr theSketchFeature, GeomShapePtr theSketchShape,
     const ListOfShape& aFaces = aSketchBuilder->faces();
     for (ListOfShape::const_iterator anIt = aFaces.begin(); anIt != aFaces.end(); ++anIt) {
       for (GeomAPI_ShapeExplorer aWExp(*anIt, GeomAPI_Shape::WIRE); aWExp.more(); aWExp.next()) {
+        // skip the wire if at least one its edge was already processed
         GeomAPI_ShapeExplorer aEExp(aWExp.current(), GeomAPI_Shape::EDGE);
-        if (aProcessedEdges.find(aEExp.current()) != aProcessedEdges.end())
-          continue; // wire is already processed
+        for (; aEExp.more(); aEExp.next()) {
+          if (aProcessedEdges.find(aEExp.current()) != aProcessedEdges.end())
+            break; // wire is already processed
+        }
+        if (aEExp.more())
+          continue;
         // mark edges as processed
-        for (; aEExp.more(); aEExp.next())
+        for (aEExp.init(aWExp.current(), GeomAPI_Shape::EDGE); aEExp.more(); aEExp.next())
           aProcessedEdges.insert(aEExp.current());
         // store the wire
         theWires.push_back(aWExp.current());