Salome HOME
Validator for attributes of the Equal constraint
authorazv <azv@opencascade.com>
Wed, 1 Apr 2015 12:56:05 +0000 (15:56 +0300)
committerazv <azv@opencascade.com>
Wed, 1 Apr 2015 12:56:44 +0000 (15:56 +0300)
src/SketchPlugin/SketchPlugin_Plugin.cpp
src/SketchPlugin/SketchPlugin_Validators.cpp
src/SketchPlugin/SketchPlugin_Validators.h
src/SketchPlugin/plugin-Sketch.xml

index e0f06569fd4db5541af848c5e703476d1ccc9726..e92cdb8c47472ae37d3726b24434f64d4743ca87 100644 (file)
@@ -57,6 +57,8 @@ SketchPlugin_Plugin::SketchPlugin_Plugin()
                               new SketchPlugin_TangentAttrValidator);
   aFactory->registerValidator("SketchPlugin_NotFixed",
                               new SketchPlugin_NotFixedValidator);
+  aFactory->registerValidator("SketchPlugin_EqualAttr",
+                              new SketchPlugin_EqualAttrValidator);
 
   // register this plugin
   ModelAPI_Session::get()->registerPlugin(this);
index baace5c2aa3541633ba64400234e2f2b17bbde84..fe88ebf595e516bc949a0b732905bf6c59cd8031 100644 (file)
@@ -10,6 +10,7 @@
 #include "SketchPlugin_ConstraintRigid.h"
 #include "SketchPlugin_Line.h"
 #include "SketchPlugin_Arc.h"
+#include "SketchPlugin_Circle.h"
 
 #include "SketcherPrs_Tools.h"
 
@@ -165,3 +166,47 @@ bool SketchPlugin_NotFixedValidator::isValid(
   return true;
 }
 
+bool SketchPlugin_EqualAttrValidator::isValid(
+  const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
+{
+  std::string aParamA = theArguments.front();
+  FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
+  AttributeRefAttrPtr aRefAttr[2];
+  aRefAttr[0] = std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(theAttribute);
+  if (!aRefAttr)
+    return false;
+  aRefAttr[1] = aFeature->data()->refattr(aParamA);
+
+  if (!aRefAttr[0]->isObject() || !aRefAttr[1]->isObject())
+    return false;
+
+  int aType[2] = {0, 0}; // types of attributes: 0 - incorrect, 1 - line, 2 - circle, 3 - arc
+  std::list<std::string> anArguments;
+  for (int i = 0; i < 2; i++) {
+    ObjectPtr anObject = aRefAttr[i]->object();
+    aFeature = ModelAPI_Feature::feature(anObject);
+    if (!aFeature)
+      return false;
+
+    if (aFeature->getKind() == SketchPlugin_Line::ID()) {
+      aType[i] = 1;
+      continue;
+    }
+    if (aFeature->getKind() == SketchPlugin_Circle::ID()) {
+      aType[i] = 2;
+      continue;
+    }
+    if (aFeature->getKind() == SketchPlugin_Arc::ID()) {
+      aType[i] = 3;
+      continue;
+    }
+    // wrong type of attribute
+    return false;
+  }
+
+  if ((aType[0] == 1 && aType[1] == 2) ||
+      (aType[0] == 2 && aType[1] == 1))
+    return false;
+  return true;
+}
+
index 21ad277f77c251619a740d6ce6a80292934ef86c..47df3706156129b4cfacac9f4891d6bc0b733bc9 100644 (file)
@@ -60,5 +60,21 @@ class SketchPlugin_NotFixedValidator : public ModelAPI_AttributeValidator
                        const std::list<std::string>& theArguments) const;
 };
 
+/**\class SketchPlugin_EqualAttrValidator
+ * \ingroup Validators
+ * \brief Validator for the equal constraint input.
+ *
+ * It checks that attributes of the Equal constraint are correct.
+ */
+class SketchPlugin_EqualAttrValidator : public ModelAPI_AttributeValidator
+{
+ public:
+  //! returns true if attribute is valid
+  //! \param theAttribute the checked attribute
+  //! \param theArguments arguments of the attribute
+  virtual bool isValid(const AttributePtr& theAttribute,
+                       const std::list<std::string>& theArguments) const;
+};
+
 
 #endif
index 898546d74aba78ec695b681341ee84af991fab72..04730f8fc9538824ba28a4e04c60c4e574f6cf0b 100644 (file)
         
         <sketch_constraint_shape_selector id="ConstraintEntityB"
             label="Last object" tooltip="Select line, circle or arc" shape_types="edge">
-          <validator id="PartSet_SameTypeAttr" parameters="ConstraintEntityA"/>
+          <validator id="SketchPlugin_EqualAttr" parameters="ConstraintEntityA"/>
           <validator id="PartSet_DifferentObjects"/>
         </sketch_constraint_shape_selector>
       </feature>