if (!theSolverConstraints.empty() || aFound == myConstraintMap.end())
myConstraintMap[theConstraint] = theSolverConstraints;
// block events if necessary
- if (myEventsBlocked && theConstraint->data() && theConstraint->data()->isValid())
+ if (myEventsBlocked && theConstraint && theConstraint->data() && theConstraint->data()->isValid())
theConstraint->data()->blockSendAttributeUpdated(myEventsBlocked);
}
// Secondly, convert feature
BuilderPtr aBuilder = SketchSolver_Manager::instance()->builder();
GroupID aGroup = theGroup != GID_UNKNOWN ? theGroup : myGroupID;
+ // Check external feature
+ std::shared_ptr<SketchPlugin_Feature> aSketchFeature =
+ std::dynamic_pointer_cast<SketchPlugin_Feature>(theFeature);
+ if (aSketchFeature && aSketchFeature->isExternal())
+ aGroup = GID_OUTOFGROUP;
aRelated = aBuilder->createFeature(theFeature, aSubs, aGroup);
if (!aRelated)
return false;
}
BuilderPtr aBuilder = SketchSolver_Manager::instance()->builder();
GroupID aGroup = theGroup != GID_UNKNOWN ? theGroup : myGroupID;
+ // Check attribute of external features
+ std::shared_ptr<SketchPlugin_Feature> aSketchFeature =
+ std::dynamic_pointer_cast<SketchPlugin_Feature>(theAttribute->owner());
+ if (aSketchFeature && aSketchFeature->isExternal())
+ aGroup = GID_OUTOFGROUP;
aRelated = aBuilder->createAttribute(anAttribute, aGroup);
if (!aRelated)
return false;
myEventsBlocked = isBlocked;
}
+std::set<ObjectPtr> SketchSolver_Storage::getConflictingConstraints(SolverPtr theSolver) const
+{
+ std::set<ObjectPtr> aConflicting;
+ std::map<ConstraintPtr, std::list<ConstraintWrapperPtr> >::const_iterator
+ aConstrIt = myConstraintMap.begin();
+ for (; aConstrIt != myConstraintMap.end(); ++aConstrIt) {
+ std::list<ConstraintWrapperPtr>::const_iterator anIt = aConstrIt->second.begin();
+ for (; anIt != aConstrIt->second.end(); ++anIt)
+ if (theSolver->isConflicting((*anIt)->id())) {
+ aConflicting.insert(aConstrIt->first);
+ break;
+ }
+ }
+ return aConflicting;
+}