From f303e0ac953271787efce9c96845b41db3d4dcb9 Mon Sep 17 00:00:00 2001 From: azv Date: Wed, 1 Apr 2015 15:56:05 +0300 Subject: [PATCH] Validator for attributes of the Equal constraint --- src/SketchPlugin/SketchPlugin_Plugin.cpp | 2 + src/SketchPlugin/SketchPlugin_Validators.cpp | 45 ++++++++++++++++++++ src/SketchPlugin/SketchPlugin_Validators.h | 16 +++++++ src/SketchPlugin/plugin-Sketch.xml | 2 +- 4 files changed, 64 insertions(+), 1 deletion(-) diff --git a/src/SketchPlugin/SketchPlugin_Plugin.cpp b/src/SketchPlugin/SketchPlugin_Plugin.cpp index e0f06569f..e92cdb8c4 100644 --- a/src/SketchPlugin/SketchPlugin_Plugin.cpp +++ b/src/SketchPlugin/SketchPlugin_Plugin.cpp @@ -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); diff --git a/src/SketchPlugin/SketchPlugin_Validators.cpp b/src/SketchPlugin/SketchPlugin_Validators.cpp index baace5c2a..fe88ebf59 100644 --- a/src/SketchPlugin/SketchPlugin_Validators.cpp +++ b/src/SketchPlugin/SketchPlugin_Validators.cpp @@ -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& theArguments ) const +{ + std::string aParamA = theArguments.front(); + FeaturePtr aFeature = std::dynamic_pointer_cast(theAttribute->owner()); + AttributeRefAttrPtr aRefAttr[2]; + aRefAttr[0] = std::dynamic_pointer_cast(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 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; +} + diff --git a/src/SketchPlugin/SketchPlugin_Validators.h b/src/SketchPlugin/SketchPlugin_Validators.h index 21ad277f7..47df37061 100644 --- a/src/SketchPlugin/SketchPlugin_Validators.h +++ b/src/SketchPlugin/SketchPlugin_Validators.h @@ -60,5 +60,21 @@ class SketchPlugin_NotFixedValidator : public ModelAPI_AttributeValidator const std::list& 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& theArguments) const; +}; + #endif diff --git a/src/SketchPlugin/plugin-Sketch.xml b/src/SketchPlugin/plugin-Sketch.xml index 898546d74..04730f8fc 100644 --- a/src/SketchPlugin/plugin-Sketch.xml +++ b/src/SketchPlugin/plugin-Sketch.xml @@ -180,7 +180,7 @@ - + -- 2.39.2