Salome HOME
Issue #2490: Place toolbars into 3 rows by default
[modules/shaper.git] / src / FeaturesPlugin / FeaturesPlugin_CompositeSketch.cpp
index a3018be53df4c5a9a3d8ed67cf708ad68f538408..77766fcb58be2cd4dacf071a65bca81d18ae6104 100644 (file)
@@ -358,7 +358,7 @@ void FeaturesPlugin_CompositeSketch::storeGenerationHistory(ResultBodyPtr theRes
       bool isClosed = false; // lateral edges are closed (in full revolution)
       GeomAPI_DataMapOfShapeShape anEdgesFromVertices;
       GeomAPI_ShapeExplorer aVertExp(theBaseShape, GeomAPI_Shape::VERTEX);
-      for(int anIndex = 1; aVertExp.more(); aVertExp.next()) {
+      for(; aVertExp.more(); aVertExp.next()) {
         ListOfShape aGenerated;
         theMakeShape->generated(aVertExp.current(), aGenerated);
         ListOfShape::iterator aGenIter = aGenerated.begin();
@@ -367,7 +367,7 @@ void FeaturesPlugin_CompositeSketch::storeGenerationHistory(ResultBodyPtr theRes
           if (anEdgesFromVertices.isBound(aGenerated)) // already here
             continue;
           std::ostringstream aStream;
-          aStream<<"Lateral_Edge_"<<anIndex++;
+          aStream<<"Lateral_"<<theTag++;
           theResultBody->generated(aGenerated, aStream.str(), theTag++);
 
           anEdgesFromVertices.bind(aGenerated, aVertExp.current());
@@ -377,11 +377,11 @@ void FeaturesPlugin_CompositeSketch::storeGenerationHistory(ResultBodyPtr theRes
       }
       if (isClosed) {
         GeomAPI_ShapeExplorer anEdgesExp(theMakeShape->shape(), GeomAPI_Shape::EDGE);
-        for(int anIndex = 1; anEdgesExp.more(); anEdgesExp.next()) {
+        for(; anEdgesExp.more(); anEdgesExp.next()) {
           if (!anEdgesFromVertices.isBound(anEdgesExp.current())) {
             // found a base edge
             std::ostringstream aStream;
-            aStream<<"Base_Edge_"<<anIndex++;
+            aStream<<"Base_Edge_"<<theTag++;
             theResultBody->generated(anEdgesExp.current(), aStream.str(), theTag++);
             // only one orientation is needed
             anEdgesFromVertices.bind(anEdgesExp.current(), anEdgesExp.current());
@@ -395,7 +395,7 @@ void FeaturesPlugin_CompositeSketch::storeGenerationHistory(ResultBodyPtr theRes
           if (!aVertices.isBound(aVertExp.current())) {
             // found a base edge
             std::ostringstream aStream;
-            aStream<<"Vertex_"<<anIndex++;
+            aStream<<"Vertex_"<<theTag++;
             theResultBody->generated(aVertExp.current(), aStream.str(), theTag++);
             // only one orientation is needed
             aVertices.bind(aVertExp.current(), aVertExp.current());
@@ -405,7 +405,7 @@ void FeaturesPlugin_CompositeSketch::storeGenerationHistory(ResultBodyPtr theRes
     } else { // issue #2197, test case 4 : edges that produce fully-revolved face,
       // but contain only 2 edges (on apex of revolution)
       GeomAPI_ShapeExplorer anEdgeExp(theBaseShape, GeomAPI_Shape::EDGE);
-      for(int anIndex = 1; anEdgeExp.more(); anEdgeExp.next()) {
+      for(; anEdgeExp.more(); anEdgeExp.next()) {
         ListOfShape aGenerated;
         theMakeShape->generated(anEdgeExp.current(), aGenerated);
         ListOfShape::iterator aGenIter = aGenerated.begin();
@@ -416,10 +416,15 @@ void FeaturesPlugin_CompositeSketch::storeGenerationHistory(ResultBodyPtr theRes
             int aNumEdges = 0;
             int aNumClosed = 0;
             GeomShapePtr aNotClosedEdge;
+            GeomEdgePtr aDegenerateEdge;
             GeomAPI_DataMapOfShapeShape alreadyIterated;
             for(; aFaceEdgeExp.more(); aFaceEdgeExp.next()) {
               std::shared_ptr<GeomAPI_Edge> anEdge(new GeomAPI_Edge(aFaceEdgeExp.current()));
-              if (anEdge->isDegenerated() || alreadyIterated.isBound(anEdge))
+              if (anEdge->isDegenerated()) {
+                aDegenerateEdge = anEdge;
+                continue;
+              }
+              if (alreadyIterated.isBound(anEdge))
                 continue;
               alreadyIterated.bind(anEdge, anEdge);
               aNumEdges++;
@@ -431,8 +436,16 @@ void FeaturesPlugin_CompositeSketch::storeGenerationHistory(ResultBodyPtr theRes
             }
             if (aNumEdges == 2 && aNumClosed == 1) {
               std::ostringstream aStream;
-              aStream<<"Base_Edge_"<<anIndex++;
+              aStream<<"Base_Edge_"<<theTag++;
               theResultBody->generated(aNotClosedEdge, aStream.str(), theTag++);
+              if (aDegenerateEdge.get()) { // export vertex of the degenerated edge (apex) #2520
+                GeomAPI_ShapeExplorer anEdgeExp(aDegenerateEdge, GeomAPI_Shape::VERTEX);
+                if (anEdgeExp.more()) {
+                  std::ostringstream aStream;
+                  aStream << "Base_Vertex_" << theTag++;
+                  theResultBody->generated(anEdgeExp.current(), aStream.str(), theTag++);
+                }
+              }
             }
           }
         }