1 #include <SketchSolver_ConstraintEqual.h>
2 #include <SketchSolver_Group.h>
3 #include <SketchSolver_Error.h>
6 void SketchSolver_ConstraintEqual::process()
9 if (!myBaseConstraint || !myStorage || myGroup == 0) {
10 /// TODO: Put error message here
13 if (!mySlvsConstraints.empty()) // some data is changed, update constraint
14 update(myBaseConstraint);
17 std::vector<Slvs_hEntity> anEntities;
18 getAttributes(aValue, anEntities);
19 if (!myErrorMsg.empty())
22 // Check the quantity of entities of each type
26 std::vector<Slvs_hEntity>::iterator anEntIter = anEntities.begin();
27 for (; anEntIter != anEntities.end(); anEntIter++) {
28 Slvs_Entity anEnt = myStorage->getEntity(*anEntIter);
29 if (anEnt.type == SLVS_E_LINE_SEGMENT)
31 else if (anEnt.type == SLVS_E_CIRCLE)
33 else if (anEnt.type == SLVS_E_ARC_OF_CIRCLE)
37 if (aNbLines + aNbArcs + aNbCircs != 2 ||
38 (aNbLines == aNbCircs && aNbArcs == 0)) {
39 myErrorMsg = SketchSolver_Error::INCORRECT_ATTRIBUTE();
45 myType = SLVS_C_EQUAL_RADIUS;
48 myType = SLVS_C_EQUAL_LINE_ARC_LEN;
51 myType = SLVS_C_EQUAL_LENGTH_LINES;
55 Slvs_Constraint aConstraint = Slvs_MakeConstraint(SLVS_C_UNKNOWN, myGroup->getId(),
56 getType(), myGroup->getWorkplaneId(), aValue,
57 anEntities[0], anEntities[1], anEntities[2], anEntities[3]);
58 aConstraint.h = myStorage->addConstraint(aConstraint);
59 mySlvsConstraints.push_back(aConstraint.h);