Salome HOME
Error management -- Attribute validator returns an error.
[modules/shaper.git] / src / SketchPlugin / SketchPlugin_Validators.cpp
index 40cfd995dd5857aeedcd912945173d2baa79a5c0..b8b2fa53e498be217bd9f10fb550ea393caa5aca 100644 (file)
@@ -28,8 +28,9 @@
 #include <GeomDataAPI_Point2D.h>
 
 
-bool SketchPlugin_DistanceAttrValidator::isValid(
-  const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
+bool SketchPlugin_DistanceAttrValidator::isValid(const AttributePtr& theAttribute, 
+                                                 const std::list<std::string>& theArguments,
+                                                 std::string& theError) const
 {
   // there is a check whether the feature contains a point and a linear edge or two point values
   std::string aParamA = theArguments.front();
@@ -78,69 +79,9 @@ bool SketchPlugin_DistanceAttrValidator::isValid(
   return false;
 }
 
-bool SketchPlugin_CoincidentAttr::isValid(
-  const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
-{
-  // there is a check whether the feature contains a point and a linear edge or two point values
-  std::string aParamA = theArguments.front();
-  SessionPtr aMgr = ModelAPI_Session::get();
-  ModelAPI_ValidatorsFactory* aFactory = aMgr->validators();
-
-  FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
-  AttributeRefAttrPtr aRefAttr = std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(theAttribute);
-  if (!aRefAttr)
-    return false;
-
-  bool isObject = aRefAttr->isObject();
-  ObjectPtr anObject = aRefAttr->object();
-  if (isObject && anObject) {
-    FeaturePtr aRefFea = ModelAPI_Feature::feature(anObject);
-    AttributeRefAttrPtr aOtherAttr = aFeature->data()->refattr(aParamA);
-    ObjectPtr aOtherObject = aOtherAttr->object();
-    // if the other attribute is not filled still, the result is true
-    if (!aOtherObject.get())
-      return true;
-    FeaturePtr aOtherFea = ModelAPI_Feature::feature(aOtherObject);
-
-    // check that both have coincidence
-    FeaturePtr aConstrFeature;
-    std::set<FeaturePtr> aCoinList;
-    const std::set<std::shared_ptr<ModelAPI_Attribute>>& aRefsList = aRefFea->data()->refsToMe();
-    std::set<std::shared_ptr<ModelAPI_Attribute>>::const_iterator aIt;
-    for (aIt = aRefsList.cbegin(); aIt != aRefsList.cend(); ++aIt) {
-      std::shared_ptr<ModelAPI_Attribute> aAttr = (*aIt);
-      aConstrFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aAttr->owner());
-      if (aConstrFeature->getKind() == SketchPlugin_ConstraintCoincidence::ID()) {
-        AttributeRefAttrPtr aRAttr = std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(aAttr);
-        AttributePtr aAR = aRAttr->attr();
-        if (aAR->id() != SketchPlugin_Arc::CENTER_ID()) // ignore constraint to center of arc
-          aCoinList.insert(aConstrFeature);
-      }
-    }
-    // if there is no coincidence then it is not valid
-    if (aCoinList.size() == 0)
-      return false;
-
-    // find that coincedence is the same
-    const std::set<std::shared_ptr<ModelAPI_Attribute>>& aOtherList = aOtherFea->data()->refsToMe();
-    std::set<FeaturePtr>::const_iterator aCoinsIt;
-    for (aIt = aOtherList.cbegin(); aIt != aOtherList.cend(); ++aIt) {
-      std::shared_ptr<ModelAPI_Attribute> aAttr = (*aIt);
-      aConstrFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aAttr->owner());
-      aCoinsIt = aCoinList.find(aConstrFeature);
-      if (aCoinsIt != aCoinList.end()) {
-        AttributeRefAttrPtr aRAttr = std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(aAttr);
-        AttributePtr aAR = aRAttr->attr();
-        if (aAR->id() != SketchPlugin_Arc::CENTER_ID())
-          return true;
-      }
-    }
-  }
-  return false;
-}
-
-bool SketchPlugin_TangentAttrValidator::isValid(
-  const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
+bool SketchPlugin_TangentAttrValidator::isValid(const AttributePtr& theAttribute, 
+                                                const std::list<std::string>& theArguments,
+                                                std::string& theError) const
 {
   // there is a check whether the feature contains a point and a linear edge or two point values
   std::string aParamA = theArguments.front();
@@ -176,8 +117,9 @@ bool SketchPlugin_TangentAttrValidator::isValid(
   return false;
 }
 
-bool SketchPlugin_NotFixedValidator::isValid(
-    const AttributePtr& theAttribute, const std::list<std::string>& theArguments) const
+bool SketchPlugin_NotFixedValidator::isValid(const AttributePtr& theAttribute, 
+                                             const std::list<std::string>& theArguments,
+                                             std::string& theError) const
 {
   std::shared_ptr<SketchPlugin_Feature> aFeature =
       std::dynamic_pointer_cast<SketchPlugin_Feature>(theAttribute->owner());
@@ -205,8 +147,9 @@ bool SketchPlugin_NotFixedValidator::isValid(
   return true;
 }
 
-bool SketchPlugin_EqualAttrValidator::isValid(
-  const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
+bool SketchPlugin_EqualAttrValidator::isValid(const AttributePtr& theAttribute, 
+                                              const std::list<std::string>& theArguments,
+                                              std::string& theError) const
 {
   std::string aParamA = theArguments.front();
   FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
@@ -249,8 +192,9 @@ bool SketchPlugin_EqualAttrValidator::isValid(
   return true;
 }
 
-bool SketchPlugin_MirrorAttrValidator::isValid(
-  const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
+bool SketchPlugin_MirrorAttrValidator::isValid(const AttributePtr& theAttribute, 
+                                               const std::list<std::string>& theArguments,
+                                               std::string& theError) const
 {
   FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
   AttributeSelectionListPtr aSelAttr = 
@@ -273,8 +217,9 @@ bool SketchPlugin_MirrorAttrValidator::isValid(
 }
 
 
-bool SketchPlugin_CoincidenceAttrValidator::isValid(
-  const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
+bool SketchPlugin_CoincidenceAttrValidator::isValid(const AttributePtr& theAttribute, 
+                                                    const std::list<std::string>& theArguments,
+                                                    std::string& theError) const
 {
   // there is a check whether the feature contains a point and a linear edge or two point values
   std::string aParamA = theArguments.front();
@@ -316,8 +261,9 @@ bool SketchPlugin_CoincidenceAttrValidator::isValid(
 }
 
 
-bool SketchPlugin_CopyValidator::isValid(
-  const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
+bool SketchPlugin_CopyValidator::isValid(const AttributePtr& theAttribute, 
+                                         const std::list<std::string>& theArguments,
+                                         std::string& theError) const
 {
   FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
   AttributeSelectionListPtr aSelAttr =