Salome HOME
Merge remote-tracking branch 'remotes/origin/HigherLevelObjectsHistory'
[modules/shaper.git] / src / GeomAlgoAPI / GeomAlgoAPI_MakeVolume.cpp
index 2b1c8b12498d0384fdd9f8f89fbd708c096e7a4f..c09e24f98020f7f8d6f12aabfabc8ff00c5127d6 100644 (file)
@@ -19,6 +19,8 @@
 
 #include "GeomAlgoAPI_MakeVolume.h"
 
+#include <GeomAPI_ShapeExplorer.h>
+
 #include <GeomAlgoAPI_ShapeTools.h>
 
 #include <BOPAlgo_MakerVolume.hxx>
@@ -90,3 +92,32 @@ void GeomAlgoAPI_MakeVolume::build(const ListOfShape& theFaces)
   this->setShape(aShape);
   this->setDone(true);
 }
+
+//=================================================================================================
+void GeomAlgoAPI_MakeVolume::modified(const GeomShapePtr theOldShape,
+                                      ListOfShape& theNewShapes)
+{
+  if (theOldShape->shapeType() == GeomAPI_Shape::SOLID) {
+    ListOfShape aNewShapes;
+    // collect faces and parent shapes, if it is not done yet
+    if (!isNewShapesCollected(theOldShape, GeomAPI_Shape::FACE))
+      collectNewShapes(theOldShape, GeomAPI_Shape::FACE);
+
+    for (GeomAPI_ShapeExplorer anIt(shape(), GeomAPI_Shape::SOLID); anIt.more(); anIt.next()) {
+      for (GeomAPI_ShapeExplorer anExp(anIt.current(), GeomAPI_Shape::FACE);
+           anExp.more(); anExp.next()) {
+        GeomShapePtr anOldShapesCompound =
+            oldShapesForNew(theOldShape, anExp.current(), GeomAPI_Shape::FACE);
+        if (!anOldShapesCompound->isNull()) {
+          aNewShapes.push_back(anIt.current());
+          break;
+        }
+      }
+    }
+
+    if (!aNewShapes.empty())
+      theNewShapes = aNewShapes;
+  }
+  else
+    GeomAlgoAPI_MakeShape::modified(theOldShape, theNewShapes);
+}