0030092: Modeling Algorithms - Invalid result of Section operation
[occt.git] / src / BOPAlgo / BOPAlgo_PaveFiller_2.cxx
index 115667a..331c97e 100644 (file)
@@ -368,6 +368,9 @@ void BOPAlgo_PaveFiller::SplitPaveBlocks(const TColStd_MapOfInteger& theMEdges,
                              BOPDS_ListOfPaveBlock,
                              TColStd_MapTransientHasher> aMCBNewPB;
   //
+  // Map of vertices to init the pave blocks for them
+  TColStd_MapOfInteger aMVerticesToInitPB;
+
   TColStd_MapIteratorOfMapOfInteger aItM(theMEdges);
   for (; aItM.More(); aItM.Next()) {
     Standard_Integer nE = aItM.Value();
@@ -429,6 +432,10 @@ void BOPAlgo_PaveFiller::SplitPaveBlocks(const TColStd_MapOfInteger& theMEdges,
               aLV.Append(nV1);
               aLV.Append(nV2);
               MakeSDVertices(aLV, theAddInterfs);
+
+              // Save vertices to init pave blocks
+              aMVerticesToInitPB.Add(nV1);
+              aMVerticesToInitPB.Add(nV2);
             }
             continue;
           }
@@ -531,6 +538,11 @@ void BOPAlgo_PaveFiller::SplitPaveBlocks(const TColStd_MapOfInteger& theMEdges,
       }
     }
   }
+
+  // Init pave blocks for vertices which have acquired SD vertex
+  aItM.Initialize(aMVerticesToInitPB);
+  for (; aItM.More(); aItM.Next())
+    myDS->InitPaveBlocksForVertex(aItM.Value());
 }
 
 //=======================================================================
@@ -547,4 +559,4 @@ void BOPAlgo_PaveFiller::AddIntersectionFailedWarning(const TopoDS_Shape& theS1,
   BRep_Builder().Add(aWC, theS2);
   // Add the warning
   AddWarning(new BOPAlgo_AlertIntersectionOfPairOfShapesFailed(aWC));
-}
\ No newline at end of file
+}