- std::list<ResultPtr> aResults = aFeature->results();
- std::list<ResultPtr>::const_iterator aIt;
- for (aIt = aResults.cbegin(); aIt != aResults.cend(); ++aIt) {
- if (theObj == (*aIt))
- return true;
+ ResultPtr anObjRes = std::dynamic_pointer_cast<ModelAPI_Result>(theObj);
+ if (anObjRes.get() && aFeature == aFeature->document()->feature(anObjRes)) {
+ return true;
+ }
+#ifdef DEBUG_DO_NOT_ACTIVATE_SUB_FEATURE
+ if (aFeature->isMacro()) {
+ // macro feature may refers to sub-features,
+ // which also should be deactivated when the operation
+ // is active, e.g. rectangle'lines.
+ FeaturePtr anObjectFeature = ModelAPI_Feature::feature(theObj);
+ std::list<AttributePtr> anAttributes = aFeature->data()->attributes(
+ ModelAPI_AttributeRefList::typeId());
+ std::list<AttributePtr>::const_iterator
+ anIt = anAttributes.begin(), aLast = anAttributes.end();
+ bool aFoundObject = false;
+ for (; anIt != aLast && !aFoundObject; anIt++) {
+ std::shared_ptr<ModelAPI_AttributeRefList> aCurSelList =
+ std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(*anIt);
+ for (int i = 0, aNb = aCurSelList->size(); i < aNb && !aFoundObject; i++) {
+ ObjectPtr aCurObj = aCurSelList->object(i);
+ FeaturePtr aCurFeat = std::dynamic_pointer_cast<ModelAPI_Feature>(aCurObj);
+ if (aCurFeat.get()) {
+ aFoundObject = anObjectFeature == aCurFeat;
+ }
+ }
+ }
+ return aFoundObject;