- boost::shared_ptr<ModelAPI_Session> aPManager = ModelAPI_Session::get();
- boost::shared_ptr<ModelAPI_Document> aRoot = aPManager->moduleDocument();
- boost::shared_ptr<ModelAPI_Document> aCurrent;
- boost::shared_ptr<PartSetPlugin_Part> a;
- for (int a = aRoot->size(ModelAPI_ResultPart::group()) - 1; a >= 0; a--) {
- ResultPartPtr aPart = boost::dynamic_pointer_cast<ModelAPI_ResultPart>(
- aRoot->object(ModelAPI_ResultPart::group(), a));
- if (aPart
- && aPart->data()->docRef(ModelAPI_ResultPart::DOC_REF())->value()
- == aPManager->activeDocument()) {
- FeaturePtr aFeature = aRoot->feature(aPart);
- if (aFeature) {
- // do remove
- aPart->data()->docRef(ModelAPI_ResultPart::DOC_REF())->value()->close();
+ std::shared_ptr<ModelAPI_Session> aPManager = ModelAPI_Session::get();
+ std::shared_ptr<ModelAPI_Document> aRoot = aPManager->moduleDocument();
+ DocumentPtr aThisDoc = document();
+ ResultPtr aPart = ModelAPI_Tools::findPartResult(aRoot, aThisDoc);
+ if (aPart.get()) {
+ FeaturePtr aFeature = aRoot->feature(aPart);
+ if (aFeature) {
+ // do remove
+ aPart->data()->document(ModelAPI_ResultPart::DOC_REF())->value()->close();
+ std::set<std::shared_ptr<ModelAPI_Feature> > aRefFeatures;
+ aRoot->refsToFeature(aFeature, aRefFeatures);
+ if (aRefFeatures.empty())