X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_Validators.cpp;h=29bdf3c27310df0ba7abadc7ca882ea353ef4f85;hb=7e0da9d6edbfd2e934df3ff119b45cec3cff6936;hp=855ac9ab0584a88b7e92713fce7b8f9127f854cb;hpb=244f7eadf98c565ba0c1b3ea375491025604ad84;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_Validators.cpp b/src/SketchPlugin/SketchPlugin_Validators.cpp index 855ac9ab0..29bdf3c27 100644 --- a/src/SketchPlugin/SketchPlugin_Validators.cpp +++ b/src/SketchPlugin/SketchPlugin_Validators.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> + // File: SketchPlugin_Validators.cpp // Created: 01 Aug 2014 // Author: Vitaly SMETANNIKOV @@ -9,6 +11,7 @@ #include #include #include +#include #include bool SketchPlugin_DistanceAttrValidator::isValid(const FeaturePtr& theFeature, @@ -19,14 +22,22 @@ bool SketchPlugin_DistanceAttrValidator::isValid(const FeaturePtr& theFeature, SessionPtr aMgr = ModelAPI_Session::get(); ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); + const ModelAPI_ResultValidator* anArcValidator = + dynamic_cast(aFactory->validator("SketchPlugin_ResultArc")); + bool anArcValid = anArcValidator->isValid(theObject); + if (anArcValid) + return false; + + // If the object is not a line then it is accepted const ModelAPI_ResultValidator* aLineValidator = - dynamic_cast(aFactory->validator("SketchPlugin_ResultLineValidator")); - if (!aLineValidator->isValid(theObject)) + dynamic_cast(aFactory->validator("SketchPlugin_ResultLine")); + bool aLineValid = aLineValidator->isValid(theObject); + if (!aLineValid) return true; // If it is a line then we have to check that first attribute id not a line - boost::shared_ptr aPoint = getFeaturePoint(theFeature->data(), aParamA); + std::shared_ptr aPoint = getFeaturePoint(theFeature->data(), aParamA); if (aPoint) return true; return false; @@ -35,27 +46,28 @@ bool SketchPlugin_DistanceAttrValidator::isValid(const FeaturePtr& theFeature, 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 + // any point attribute is acceptable for the distance operation + return true; +} + +bool SketchPlugin_DistanceAttrValidator::isValid(const FeaturePtr& theFeature, + const std::list& theArguments, + const AttributePtr& theAttribute) const +{ + return isValid(theAttribute, theArguments); } bool SketchPlugin_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature, const std::list& theArguments, const ObjectPtr& theObject) const { - std::list > anAttrs = + std::list > anAttrs = theFeature->data()->attributes(ModelAPI_AttributeRefAttr::type()); - std::list >::iterator anAttr = anAttrs.begin(); + std::list >::iterator anAttr = anAttrs.begin(); for(; anAttr != anAttrs.end(); anAttr++) { if (*anAttr) { - boost::shared_ptr aRef = - boost::dynamic_pointer_cast(*anAttr); + std::shared_ptr aRef = + std::dynamic_pointer_cast(*anAttr); // check the object is already presented if (aRef->isObject() && aRef->object() == theObject) return false; @@ -67,19 +79,19 @@ bool SketchPlugin_DifferentObjectsValidator::isValid(const FeaturePtr& theFeatur bool SketchPlugin_DifferentObjectsValidator::isValid( const AttributePtr& theAttribute, const std::list& theArguments ) const { - boost::shared_ptr anOrigAttr = - boost::dynamic_pointer_cast(theAttribute); + std::shared_ptr anOrigAttr = + std::dynamic_pointer_cast(theAttribute); if (anOrigAttr && anOrigAttr->isObject()) { const ObjectPtr& anObj = theAttribute->owner(); - const FeaturePtr aFeature = boost::dynamic_pointer_cast(anObj); + const FeaturePtr aFeature = std::dynamic_pointer_cast(anObj); - std::list > anAttrs = + std::list > anAttrs = aFeature->data()->attributes(ModelAPI_AttributeRefAttr::type()); - std::list >::iterator anAttr = anAttrs.begin(); + std::list >::iterator anAttr = anAttrs.begin(); for(; anAttr != anAttrs.end(); anAttr++) { if (*anAttr && *anAttr != theAttribute) { - boost::shared_ptr aRef = - boost::dynamic_pointer_cast(*anAttr); + std::shared_ptr aRef = + std::dynamic_pointer_cast(*anAttr); // check the object is already presented if (aRef->isObject() && aRef->object() == anOrigAttr->object()) return false; @@ -88,3 +100,21 @@ bool SketchPlugin_DifferentObjectsValidator::isValid( } return true; } + +bool SketchPlugin_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature, + const std::list& theArguments, const AttributePtr& theAttribute) const +{ + std::list > anAttrs = + theFeature->data()->attributes(ModelAPI_AttributeRefAttr::type()); + std::list >::iterator anAttr = anAttrs.begin(); + for(; anAttr != anAttrs.end(); anAttr++) { + if (*anAttr) { + std::shared_ptr aRef = + std::dynamic_pointer_cast(*anAttr); + // check the object is already presented + if (!aRef->isObject() && aRef->attr() == theAttribute) + return false; + } + } + return true; +}