+
+
+//=================================================================================================
+GeomShapePtr findBase(const GeomShapePtr theObjectShape,
+ const GeomShapePtr theResultShape,
+ const GeomAPI_Shape::ShapeType theShapeType,
+ const std::shared_ptr<GeomAlgoAPI_MakeShape> theMakeShape)
+{
+ GeomShapePtr aBaseShape;
+ std::shared_ptr<GeomAPI_DataMapOfShapeShape> aMapOfSubShapes = theMakeShape->mapOfSubShapes();
+ for(GeomAPI_ShapeExplorer anObjectSubShapesExp(theObjectShape, theShapeType);
+ anObjectSubShapesExp.more();
+ anObjectSubShapesExp.next()) {
+ GeomShapePtr anObjectSubShape = anObjectSubShapesExp.current();
+ ListOfShape aModifiedShapes;
+ theMakeShape->modified(anObjectSubShape, aModifiedShapes);
+ for(ListOfShape::const_iterator
+ aModIt = aModifiedShapes.cbegin(); aModIt != aModifiedShapes.cend(); ++aModIt) {
+ GeomShapePtr aModShape = *aModIt;
+ if(aMapOfSubShapes->isBound(aModShape)) {
+ aModShape = aMapOfSubShapes->find(aModShape);
+ }
+ if(theResultShape->isSubShape(aModShape)) {
+ aBaseShape = theObjectShape;
+ break;
+ }
+ }
+ if(aBaseShape.get()) {
+ break;
+ }
+ }
+
+ return aBaseShape;
+}