+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+
// File: SketchSolver_ConstraintGroup.cpp
// Created: 27 May 2014
// Author: Artem ZHIDKOV
/// Tolerance for value of parameters
const double tolerance = 1.e-10;
-/*
+/**
* Collects all sketch solver error' codes
* as inline static functions
- * TODO: Move this class into a separate file
*/
+ // TODO: Move this class into a separate file
class SketchSolver_Error
{
public:
// For the length constraint the start and end points of the line should be added to the entities list instead of line
if (aConstrType == SLVS_C_PT_PT_DISTANCE
&& theConstraint->getKind().compare(SketchPlugin_ConstraintLength::ID()) == 0) {
- Slvs_hEntity aLineEnt = changeEntity(aFeature);
+ Slvs_hEntity aLineEnt = changeEntityFeature(aFeature);
int aEntPos = Search(aLineEnt, myEntities);
aConstrEnt[indAttr++] = myEntities[aEntPos].point[0];
aConstrEnt[indAttr++] = myEntities[aEntPos].point[1];
aConstrEnt[indAttr++] = 0;
break; // there should be no other entities
} else if (aConstrAttr->isObject())
- aConstrEnt[indAttr] = changeEntity(aFeature);
+ aConstrEnt[indAttr] = changeEntityFeature(aFeature);
else
aConstrEnt[indAttr] = changeEntity(aConstrAttr->attr());
}
aFeature = aDoc->feature(aRC);
}
- aConstrEnt = aConstrAttr->isObject() ? changeEntity(aFeature) : changeEntity(aConstrAttr->attr());
+ aConstrEnt = aConstrAttr->isObject() ? changeEntityFeature(aFeature) : changeEntity(aConstrAttr->attr());
if (aConstrMapIter == myConstraintMap.end()) { // Add new constraint
// Check the fixed entity is not a point.
// Class: SketchSolver_ConstraintGroup
// Purpose: create/update the element defined by the feature affected by any constraint
// ============================================================================
-Slvs_hEntity SketchSolver_ConstraintGroup::changeEntity(FeaturePtr theEntity)
+Slvs_hEntity SketchSolver_ConstraintGroup::changeEntityFeature(FeaturePtr theEntity)
{
if (!theEntity->data()->isValid())
return SLVS_E_UNKNOWN;
// We should go through the attributes map, because only attributes have valued parameters
std::map<std::shared_ptr<ModelAPI_Attribute>, Slvs_hEntity>::iterator anEntIter =
myEntityAttrMap.begin();
- for (; anEntIter != myEntityAttrMap.end(); anEntIter++)
+ for (; anEntIter != myEntityAttrMap.end(); anEntIter++) {
+ if (anEntIter->first->owner().get() && anEntIter->first->owner()->data().get())
+ anEntIter->first->owner()->data()->blockSendAttributeUpdated(true);
if (updateAttribute(anEntIter->first, anEntIter->second))
updateRelatedConstraints(anEntIter->first);
+ }
+ // unblock all features then
+ for (anEntIter = myEntityAttrMap.begin(); anEntIter != myEntityAttrMap.end(); anEntIter++) {
+ if (anEntIter->first->owner().get() && anEntIter->first->owner()->data().get())
+ anEntIter->first->owner()->data()->blockSendAttributeUpdated(false);
+ }
} else if (!myConstraints.empty())
Events_Error::send(SketchSolver_Error::CONSTRAINTS(), this);
}
}
-void SketchSolver_ConstraintGroup::updateRelatedConstraints(
+void SketchSolver_ConstraintGroup::updateRelatedConstraintsFeature(
std::shared_ptr<ModelAPI_Feature> theFeature) const
{
ConstraintMap::const_iterator aConstrIter = myConstraintMap.begin();