-// =========== Auxiliary functions ========================================
-static double featureToVal(FeaturePtr theFeature)
-{
- if (theFeature->getKind() == SketchPlugin_Sketch::ID())
- return 0.0; // sketch
- ConstraintPtr aConstraint = std::dynamic_pointer_cast<SketchPlugin_Constraint>(theFeature);
- if (!aConstraint)
- return 1.0; // features (arc, circle, line, point)
-
- const std::string& anID = aConstraint->getKind();
- if (anID == SketchPlugin_ConstraintCoincidence::ID()) {
- AttributeRefAttrPtr anAttrA = std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(
- aConstraint->attribute(SketchPlugin_Constraint::ENTITY_A()));
- AttributeRefAttrPtr anAttrB = std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(
- aConstraint->attribute(SketchPlugin_Constraint::ENTITY_B()));
- if (anAttrA && anAttrB && (anAttrA->isObject() || anAttrB->isObject()))
- return 2.0; // point-on-line and point-on-circle should go before points coincidence constraint
- return 2.5;
- }
- if (anID == SketchPlugin_ConstraintDistance::ID() ||
- anID == SketchPlugin_ConstraintLength::ID() ||
- anID == SketchPlugin_ConstraintRadius::ID())
- return 3.0;
- if (anID == SketchPlugin_ConstraintAngle::ID())
- return 3.5;
- if (anID == SketchPlugin_ConstraintHorizontal::ID() ||
- anID == SketchPlugin_ConstraintVertical::ID() ||
- anID == SketchPlugin_ConstraintParallel::ID() ||
- anID == SketchPlugin_ConstraintPerpendicular::ID())
- return 4.0;
- if (anID == SketchPlugin_ConstraintEqual::ID())
- return 5.0;
- if (anID == SketchPlugin_ConstraintTangent::ID() ||
- anID == SketchPlugin_ConstraintMirror::ID())
- return 6.0;
- if (anID == SketchPlugin_ConstraintRigid::ID())
- return 7.0;
- if (anID == SketchPlugin_MultiRotation::ID() ||
- anID == SketchPlugin_MultiTranslation::ID())
- return 8.0;
-
- // all other constraints are placed between Equal and Tangent constraints
- return 5.5;
-}