X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_Validators.cpp;h=b71d5adbd69b29d7baf6f03b3c0e9e924ebe2fc9;hb=5b841e9801c659d762d708378df8c4d85565fda0;hp=50af2be895a9e3c0880f63fc44e56ab56af7bb17;hpb=8dc74f82810d5f597b78633b457efb0ef4f89f9f;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_Validators.cpp b/src/SketchPlugin/SketchPlugin_Validators.cpp index 50af2be89..b71d5adbd 100644 --- a/src/SketchPlugin/SketchPlugin_Validators.cpp +++ b/src/SketchPlugin/SketchPlugin_Validators.cpp @@ -7,6 +7,9 @@ #include #include #include +#include +#include +#include #include bool SketchPlugin_DistanceAttrValidator::isValid(const FeaturePtr& theFeature, @@ -14,12 +17,12 @@ bool SketchPlugin_DistanceAttrValidator::isValid(const FeaturePtr& theFeature, const ObjectPtr& theObject) const { std::string aParamA = theArguments.front(); - PluginManagerPtr aMgr = ModelAPI_PluginManager::get(); + SessionPtr aMgr = ModelAPI_Session::get(); ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); // If the object is not a line then it is accepted const ModelAPI_ResultValidator* aLineValidator = - dynamic_cast(aFactory->validator("Model_ResultLineValidator")); + dynamic_cast(aFactory->validator("SketchPlugin_ResultLine")); if (!aLineValidator->isValid(theObject)) return true; @@ -30,3 +33,59 @@ bool SketchPlugin_DistanceAttrValidator::isValid(const FeaturePtr& theFeature, return false; } +bool SketchPlugin_DistanceAttrValidator::isValid( + const AttributePtr& theAttribute, const std::list& theArguments ) const +{ + boost::shared_ptr anAttr = + boost::dynamic_pointer_cast(theAttribute); + if (anAttr) { + const ObjectPtr& anObj = theAttribute->owner(); + const FeaturePtr aFeature = boost::dynamic_pointer_cast(anObj); + return isValid(aFeature, theArguments, anAttr->object()); + } + return true; // it may be not reference attribute, in this case, it is OK +} + +bool SketchPlugin_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature, + const std::list& theArguments, + const ObjectPtr& theObject) const +{ + std::list > anAttrs = + theFeature->data()->attributes(ModelAPI_AttributeRefAttr::type()); + std::list >::iterator anAttr = anAttrs.begin(); + for(; anAttr != anAttrs.end(); anAttr++) { + if (*anAttr) { + boost::shared_ptr aRef = + boost::dynamic_pointer_cast(*anAttr); + // check the object is already presented + if (aRef->isObject() && aRef->object() == theObject) + return false; + } + } + return true; +} + +bool SketchPlugin_DifferentObjectsValidator::isValid( + const AttributePtr& theAttribute, const std::list& theArguments ) const +{ + boost::shared_ptr anOrigAttr = + boost::dynamic_pointer_cast(theAttribute); + if (anOrigAttr && anOrigAttr->isObject()) { + const ObjectPtr& anObj = theAttribute->owner(); + const FeaturePtr aFeature = boost::dynamic_pointer_cast(anObj); + + std::list > anAttrs = + aFeature->data()->attributes(ModelAPI_AttributeRefAttr::type()); + std::list >::iterator anAttr = anAttrs.begin(); + for(; anAttr != anAttrs.end(); anAttr++) { + if (*anAttr && *anAttr != theAttribute) { + boost::shared_ptr aRef = + boost::dynamic_pointer_cast(*anAttr); + // check the object is already presented + if (aRef->isObject() && aRef->object() == anOrigAttr->object()) + return false; + } + } + } + return true; +}