1 #include <SketchSolver_ConstraintCoincidence.h>
2 #include <SketchSolver_Error.h>
3 #include <SketchSolver_Manager.h>
5 void SketchSolver_ConstraintCoincidence::getAttributes(
7 std::vector<EntityWrapperPtr>& theAttributes)
9 SketchSolver_Constraint::getAttributes(theValue, theAttributes);
10 if (!myErrorMsg.empty() || !theAttributes[0]) {
11 theAttributes.clear();
15 if (theAttributes[1]) {
16 myType = CONSTRAINT_PT_PT_COINCIDENT;
17 if (myStorage->isFixed(theAttributes[1]) && !myStorage->isFixed(theAttributes[0])) {
18 // fixed point should go first
19 EntityWrapperPtr aTemp = theAttributes[0];
20 theAttributes[0] = theAttributes[1];
21 theAttributes[1] = aTemp;
23 // Set the slave (second) point the same as master (first) point.
24 // This will allow to skip adding point-point coincidence to the set of constraints
25 // and give us speed-up in solving the set of equations
26 myStorage->addCoincidentPoints(theAttributes[0], theAttributes[1]);
28 else if (theAttributes[2]) {
29 // check the type of entity (line or circle)
30 SketchSolver_EntityType anEntType = theAttributes[2]->type();
31 if (anEntType == ENTITY_LINE)
32 myType = CONSTRAINT_PT_ON_LINE;
33 else if (anEntType == ENTITY_CIRCLE || anEntType == ENTITY_ARC)
34 myType = CONSTRAINT_PT_ON_CIRCLE;
36 myErrorMsg = SketchSolver_Error::INCORRECT_ATTRIBUTE();
38 myErrorMsg = SketchSolver_Error::INCORRECT_ATTRIBUTE();