X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_Validators.cpp;h=fe88ebf595e516bc949a0b732905bf6c59cd8031;hb=f303e0ac953271787efce9c96845b41db3d4dcb9;hp=baace5c2aa3541633ba64400234e2f2b17bbde84;hpb=96b3e7a48214b3247070b9e854681c5f49edc84f;p=modules%2Fshaper.git 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; +} +