Salome HOME
Merge branch 'Pre_2.8.0_development'
[modules/shaper.git] / src / SketchPlugin / SketchPlugin_ConstraintDistance.cpp
index 4d299b6b01d848532fdda463e70a51b18271ccd6..f4a02ca4102db7db10e294f8ec4b8e4089fc8500 100644 (file)
@@ -178,6 +178,32 @@ double SketchPlugin_ConstraintDistance::calculateCurrentDistance()
   return aDistance;
 }
 
+bool SketchPlugin_ConstraintDistance::areAttributesInitialized()
+{
+  std::shared_ptr<ModelAPI_Data> aData = data();
+  std::shared_ptr<GeomAPI_Ax3> aPlane = SketchPlugin_Sketch::plane(sketch());
+  std::shared_ptr<GeomDataAPI_Point2D> aPointA =
+      SketcherPrs_Tools::getFeaturePoint(aData, SketchPlugin_Constraint::ENTITY_A(), aPlane);
+  std::shared_ptr<GeomDataAPI_Point2D> aPointB =
+      SketcherPrs_Tools::getFeaturePoint(aData, SketchPlugin_Constraint::ENTITY_B(), aPlane);
+
+  if (!aPointA && !aPointB)
+    return false;
+  else if (aPointA || aPointB) {
+    FeaturePtr aLine;
+    if (!aPointA)
+      aLine = SketcherPrs_Tools::getFeatureLine(aData, SketchPlugin_Constraint::ENTITY_A());
+    else if (!aPointB)
+      aLine = SketcherPrs_Tools::getFeatureLine(aData, SketchPlugin_Constraint::ENTITY_B());
+    else // both points are initialized
+      return true;
+
+    if (!aLine || aLine->getKind() != SketchPlugin_Line::ID())
+      return false;
+  }
+  return true;
+}
+
 void SketchPlugin_ConstraintDistance::attributeChanged(const std::string& theID)
 {
   if (theID == SketchPlugin_Constraint::ENTITY_A() ||