- // Obtain entities to identify the type of distance
- static const int aNbPoints = 2;
- Slvs_hEntity aPoint[aNbPoints] = {SLVS_E_UNKNOWN, SLVS_E_UNKNOWN};
- Slvs_hEntity aLine = SLVS_E_UNKNOWN;
- myType = SLVS_C_PT_PT_DISTANCE;
- int aPtPos = 0;
- std::vector<Slvs_hEntity>::iterator anEntIter = anEntities.begin();
- for (; anEntIter != anEntities.end(); anEntIter++) {
- if (*anEntIter == SLVS_E_UNKNOWN)
- continue;
- Slvs_Entity anEnt = myStorage->getEntity(*anEntIter);
- if (anEnt.type == SLVS_E_POINT_IN_2D || anEnt.type == SLVS_E_POINT_IN_3D) {
- if (aPtPos >= aNbPoints) {
- myErrorMsg = SketchSolver_Error::INCORRECT_ATTRIBUTE();
- return;
- }
- aPoint[aPtPos++] = *anEntIter;
- }
- else if (anEnt.type == SLVS_E_LINE_SEGMENT) {
- if (myType == SLVS_C_PT_LINE_DISTANCE) {
- myErrorMsg = SketchSolver_Error::INCORRECT_ATTRIBUTE();
- return;
- }
- aLine = *anEntIter;
- myType = SLVS_C_PT_LINE_DISTANCE;
- }
- }
-
- Slvs_Constraint aConstraint = Slvs_MakeConstraint(SLVS_C_UNKNOWN, myGroup->getId(),
- getType(), myGroup->getWorkplaneId(), aValue, aPoint[0], aPoint[1], aLine, SLVS_E_UNKNOWN);
- aConstraint.h = myStorage->addConstraint(aConstraint);
- mySlvsConstraints.push_back(aConstraint.h);
- adjustConstraint();