X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGeomAlgoAPI%2FGeomAlgoAPI_MakeVolume.cpp;h=c09e24f98020f7f8d6f12aabfabc8ff00c5127d6;hb=5e2855aa69f9a63236c331efcb57ba433f92e901;hp=2b1c8b12498d0384fdd9f8f89fbd708c096e7a4f;hpb=97917d3698f5a2f7fc9596e7c755ff8f6751e373;p=modules%2Fshaper.git diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_MakeVolume.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_MakeVolume.cpp index 2b1c8b124..c09e24f98 100644 --- a/src/GeomAlgoAPI/GeomAlgoAPI_MakeVolume.cpp +++ b/src/GeomAlgoAPI/GeomAlgoAPI_MakeVolume.cpp @@ -19,6 +19,8 @@ #include "GeomAlgoAPI_MakeVolume.h" +#include + #include #include @@ -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); +}