From 7a9d129fbffa9ad35c2c25eaace17459b829015b Mon Sep 17 00:00:00 2001 From: nds Date: Fri, 27 Mar 2015 10:27:47 +0300 Subject: [PATCH] Validators correction for merge branch 'Dev_1.1.0' of newgeom:newgeom.git into Dev_1.1.0 --- src/GeomValidators/GeomValidators_Tools.cpp | 4 +- .../ModuleBase_WidgetShapeSelector.cpp | 9 - src/PartSet/PartSet_Validators.cpp | 177 +++++++----------- src/PartSet/PartSet_Validators.h | 21 --- src/PartSet/PartSet_WidgetShapeSelector.cpp | 34 ---- src/SketchPlugin/SketchPlugin_Validators.cpp | 86 --------- src/SketchPlugin/plugin-Sketch.xml | 42 ----- 7 files changed, 69 insertions(+), 304 deletions(-) diff --git a/src/GeomValidators/GeomValidators_Tools.cpp b/src/GeomValidators/GeomValidators_Tools.cpp index 898296961..9a78b5016 100644 --- a/src/GeomValidators/GeomValidators_Tools.cpp +++ b/src/GeomValidators/GeomValidators_Tools.cpp @@ -23,12 +23,12 @@ namespace GeomValidators_Tools { } if (anAttrType == ModelAPI_AttributeSelection::typeId()) { AttributeSelectionPtr anAttr = std::dynamic_pointer_cast(theAttribute); - if (anAttr != NULL && anAttr->isInitialized()) + if (anAttr != NULL) anObject = anAttr->context(); } if (anAttrType == ModelAPI_AttributeReference::typeId()) { AttributeReferencePtr anAttr = std::dynamic_pointer_cast(theAttribute); - if (anAttr.get() != NULL && anAttr->isInitialized()) + if (anAttr.get() != NULL) anObject = anAttr->value(); } return anObject; diff --git a/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp b/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp index c0e4faacf..ef46fa062 100644 --- a/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp +++ b/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp @@ -423,15 +423,6 @@ bool ModuleBase_WidgetShapeSelector::setSelection(const Handle_SelectMgr_EntityO std::list >::const_iterator aIt; for (aIt = aResList.cbegin(); aIt != aResList.cend(); ++aIt) { if ((*aIt) == aRes) -// TODO(nds): v1.0.2 (master) -// // Check the acceptability of the object as attribute -// aValidator = aValidators.begin(); -// std::list >::iterator aArgs = anArguments.begin(); -// for (; aValidator != aValidators.end(); aValidator++, aArgs++) { -// const ModelAPI_RefAttrValidator* aAttrValidator = -// dynamic_cast(*aValidator); -// if (aAttrValidator) { -// if (!aAttrValidator->isValid(myFeature, *aArgs, theObj, theShape)) { return false; } } diff --git a/src/PartSet/PartSet_Validators.cpp b/src/PartSet/PartSet_Validators.cpp index 0e2ca6f20..be4ffafa8 100644 --- a/src/PartSet/PartSet_Validators.cpp +++ b/src/PartSet/PartSet_Validators.cpp @@ -118,127 +118,84 @@ bool PartSet_DifferentObjectsValidator::isValid(const AttributePtr& theAttribute { FeaturePtr aFeature = std::dynamic_pointer_cast(theAttribute->owner()); - // 1. check whether the object of the attribute is not among the feature attributes - // find the attribute's object - ObjectPtr anObject = GeomValidators_Tools::getObject(theAttribute); + // the type of validated attributes should be equal, attributes with different types are not validated + // Check RefAttr attributes + std::string anAttrType = theAttribute->attributeType(); + std::list > anAttrs; - // check whether the object is not among other feature attributes - if (anObject.get() != NULL) { - // Check RefAttr attributes - std::list > anAttrs = aFeature->data()->attributes(""); - //if (anAttrs.size() > 0) { - std::list >::iterator anIt = anAttrs.begin(); - for(; anIt != anAttrs.end(); anIt++) { - AttributePtr anAttr = *anIt; - // the function parameter attribute should be skipped - if (anAttr.get() == NULL || anAttr->id() == theAttribute->id()) - continue; - ObjectPtr aCurObject = GeomValidators_Tools::getObject(anAttr); - if (aCurObject && aCurObject == anObject) - return false; + if (anAttrType == ModelAPI_AttributeRefAttr::typeId()) { + AttributeRefAttrPtr anAttr = std::dynamic_pointer_cast(theAttribute); + bool isObject = anAttr->isObject(); + ObjectPtr anObject = anAttr->object(); + AttributePtr anAttributeAttr = anAttr->attr(); + + anAttrs = aFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId()); + if (anAttrs.size() > 0) { + std::list >::iterator anAttr = anAttrs.begin(); + for(; anAttr != anAttrs.end(); anAttr++) { + if ((*anAttr).get() && (*anAttr)->id() != theAttribute->id()) { + std::shared_ptr aRef = + std::dynamic_pointer_cast(*anAttr); + if (aRef->isObject() != isObject) + continue; + if (isObject) { + if (aRef->object() == anObject) + return false; + } + else { // the attribute reference + if (aRef->attr() == theAttribute) + return false; + } + } + } + } + } + else if (anAttrType == ModelAPI_AttributeRefAttr::typeId()) { + AttributeSelectionPtr anAttr = std::dynamic_pointer_cast(theAttribute); + ResultPtr aContext = anAttr->context(); + GeomShapePtr aShape = anAttr->value(); + + // Check selection attributes + anAttrs = aFeature->data()->attributes(ModelAPI_AttributeSelection::typeId()); + if (anAttrs.size() > 0) { + std::list >::iterator anAttr = anAttrs.begin(); + for(; anAttr != anAttrs.end(); anAttr++) { + if ((*anAttr).get() && (*anAttr)->id() != theAttribute->id()) { + std::shared_ptr aRef = + std::dynamic_pointer_cast(*anAttr); + // check the object is already presented + if (aRef->context() == aContext) { + bool aHasShape = aShape.get() != NULL; + if (!aHasShape || aRef->value()->isEqual(aShape)) + return false; + } + } + } } } - else { - // 2. collect object referenced by theAttribute and ... - if (featureHasReferences(theAttribute)) { - // 3. check whether the attribute value is not among other feature attributes - std::list > anAttrs = - aFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId()); + else if (anAttrType == ModelAPI_AttributeReference::typeId()) { + AttributeReferencePtr anAttr = std::dynamic_pointer_cast(theAttribute); + ObjectPtr anObject = anAttr->value(); + // Check selection attributes + anAttrs = aFeature->data()->attributes(ModelAPI_AttributeReference::typeId()); + if (anAttrs.size() > 0) { std::list >::iterator anAttr = anAttrs.begin(); for(; anAttr != anAttrs.end(); anAttr++) { - if (*anAttr) { - std::shared_ptr aRef = - std::dynamic_pointer_cast(*anAttr); + if ((*anAttr).get() && (*anAttr)->id() != theAttribute->id()) { + std::shared_ptr aRef = + std::dynamic_pointer_cast(*anAttr); // check the object is already presented - if (!aRef->isObject() && aRef->attr() == theAttribute) + if (aRef->value() == anObject) return false; } -// TODO(nds) v1.0.2 master -//bool PartSet_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature, -// const std::list& theArguments, -// const ObjectPtr& theObject, -// const GeomShapePtr& theShape) const -//{ -// // Check RefAttr attributes -// std::list > anAttrs = -// theFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId()); -// if (anAttrs.size() > 0) { -// 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->object() == theObject) -// return false; -// } -// } -// } -// // Check selection attributes -// anAttrs = theFeature->data()->attributes(ModelAPI_AttributeSelection::typeId()); -// if (anAttrs.size() > 0) { -// 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->isInitialized() && aRef->context() == theObject) { -// if (theShape.get() != NULL) { -// if (aRef->value()->isEqual(theShape)) -// return false; -// } else -// return false; -// } -// } -// } -// } -// // Check selection attributes -// anAttrs = theFeature->data()->attributes(ModelAPI_AttributeReference::typeId()); -// if (anAttrs.size() > 0) { -// 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->isInitialized() && aRef->value() == theObject) -// return false; -// ======= end of todo + return true; } - return true; } } - return true; + return !featureHasReferences(theAttribute); } bool PartSet_DifferentObjectsValidator::featureHasReferences(const AttributePtr& theAttribute) const -// TODO(nds) v1.0.2 master -//bool PartSet_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature, -// const std::list& theArguments, -// const AttributePtr& theAttribute) const -//{ -// if (PartSet_DifferentObjectsValidator::isValid(theAttribute, theArguments)) { -// std::list > anAttrs = -// theFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId()); -// 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; -// } -// return false; -//} -// -//bool PartSet_DifferentObjectsValidator::isValid(const AttributePtr& theAttribute, -// const std::list& theArguments) const -// ======= end of todo { std::list > > allRefs; if (theAttribute->owner().get() && theAttribute->owner()->data().get()) @@ -251,7 +208,7 @@ bool PartSet_DifferentObjectsValidator::featureHasReferences(const AttributePtr& anAttrObjs = &(aRefIter->second); } if (!anAttrObjs || anAttrObjs->empty()) - return true; // theAttribute does not references to anything + return false; // theAttribute does not references to anything // check with all others for(aRefIter = allRefs.begin(); aRefIter != allRefs.end(); aRefIter++) { if (theAttribute->id() == aRefIter->first) @@ -261,11 +218,11 @@ bool PartSet_DifferentObjectsValidator::featureHasReferences(const AttributePtr& std::list::iterator aReferencedByMe = anAttrObjs->begin(); for(; aReferencedByMe != anAttrObjs->end(); aReferencedByMe++) { if (*aReferenced == *aReferencedByMe) // found same objects! - return false; + return true; } } } - return true; + return false; } bool PartSet_SketchEntityValidator::isValid(const AttributePtr& theAttribute, diff --git a/src/PartSet/PartSet_Validators.h b/src/PartSet/PartSet_Validators.h index 02e73de5f..eb9f8a06b 100644 --- a/src/PartSet/PartSet_Validators.h +++ b/src/PartSet/PartSet_Validators.h @@ -72,22 +72,6 @@ class PartSet_RigidValidator : public ModuleBase_SelectionValidator class PartSet_DifferentObjectsValidator : public ModelAPI_AttributeValidator { public: -// TODO(nds) v1.0.2 master -// /// Returns True if the feature is valid -// /// \param theFeature a feature to check -// /// \param theArguments a list of arguments (names of attributes to check) -// /// \param theObject a selected object -// /// \param theShape a selected sub-shape -// virtual bool isValid(const FeaturePtr& theFeature, const std::list& theArguments, -// const ObjectPtr& theObject, const GeomShapePtr& theShape) const; -// -// //! Returns true if the attribute is good for the feature attribute -// //! \param theFeature a feature to check -// //! \param theArguments a list of arguments (names of attributes to check) -// //! \param theAttribute an attribute -// virtual bool isValid(const FeaturePtr& theFeature, const std::list& theArguments, -// const AttributePtr& theAttribute) const; - // ======= end of todo //! Returns true if the attribute is good for the feature attribute //! \param theAttribute an attribute //! \param theArguments a list of arguments (names of attributes to check) @@ -95,11 +79,6 @@ class PartSet_DifferentObjectsValidator : public ModelAPI_AttributeValidator const std::list& theArguments) const; protected: - //! Casts the attribute to an attribute kind and obtains an object value if it is possible - //! \param theAttribute a source attribute to find object - //! \return an attribute object or NULL - ObjectPtr getObject(const AttributePtr& theAttribute) const; - //! Checks whethe other feature attributes has a reference to the given attribute //! \param theAttribute a source attribute to find object //! \return a boolean value diff --git a/src/PartSet/PartSet_WidgetShapeSelector.cpp b/src/PartSet/PartSet_WidgetShapeSelector.cpp index 98c25d47b..578e1cdf9 100644 --- a/src/PartSet/PartSet_WidgetShapeSelector.cpp +++ b/src/PartSet/PartSet_WidgetShapeSelector.cpp @@ -111,40 +111,6 @@ void PartSet_WidgetShapeSelector::createExternal(ObjectPtr theSelectedObject, if (aObj != myExternalObject) { removeExternal(); myExternalObject = aObj; -// TODO(nds) v1.0.2 master -// // Check the acceptability of the object and shape as validator attribute -// AttributePtr aPntAttr; -// DataPtr aData = myFeature->data(); -// if (theShape.get() != NULL) { -// AttributePtr aAttr = aData->attribute(attributeID()); -// AttributeRefAttrPtr aRefAttr = -// std::dynamic_pointer_cast(aAttr); -// if (aRefAttr) { -// TopoDS_Shape aShape = theShape->impl(); -// aPntAttr = PartSet_Tools::findAttributeBy2dPoint(theObj, aShape, mySketch); -// } -// } -// // Check the acceptability of the object as attribute -// aValidator = aValidators.begin(); -// std::list >::iterator aArgs = anArguments.begin(); -// for (; aValidator != aValidators.end(); aValidator++, aArgs++) { -// const ModelAPI_RefAttrValidator* aAttrValidator = -// dynamic_cast(*aValidator); -// if (aAttrValidator) { -// if (aPntAttr.get() != NULL) -// { -// if (!aAttrValidator->isValid(myFeature, *aArgs, aPntAttr)) { -// return false; -// } -// } -// else -// { -// if (!aAttrValidator->isValid(myFeature, *aArgs, theObj, theShape)) { -// return false; -// } -// } -// } -// ======= end of todo } } diff --git a/src/SketchPlugin/SketchPlugin_Validators.cpp b/src/SketchPlugin/SketchPlugin_Validators.cpp index ca7df854d..32a0b30b5 100644 --- a/src/SketchPlugin/SketchPlugin_Validators.cpp +++ b/src/SketchPlugin/SketchPlugin_Validators.cpp @@ -18,11 +18,6 @@ bool SketchPlugin_DistanceAttrValidator::isValid( const AttributePtr& theAttribute, const std::list& theArguments ) const -//bool SketchPlugin_DistanceAttrValidator::isValid(const FeaturePtr& theFeature, -// const std::list& theArguments, -// const ObjectPtr& theObject, -// const GeomShapePtr& theShape) const -// ======= end of todo master { // there is a check whether the feature contains a point and a linear edge or two point values std::string aParamA = theArguments.front(); @@ -65,84 +60,3 @@ bool SketchPlugin_DistanceAttrValidator::isValid( } return false; } -// TODO(nds) v1.0.2, master -// return false; -//} - -//bool SketchPlugin_DistanceAttrValidator::isValid( -// const AttributePtr& theAttribute, const std::list& theArguments ) const -//{ -// // 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); -//} - -// commented in v1.0.2, master: -//bool SketchPlugin_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature, -// const std::list& theArguments, -// const ObjectPtr& theObject) const -//{ -// std::list > anAttrs = -// theFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId()); -// 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->object() == theObject) -// return false; -// } -// } -// return true; -//} - -//bool SketchPlugin_DifferentObjectsValidator::isValid( -// const AttributePtr& theAttribute, const std::list& theArguments ) const -//{ -// std::shared_ptr anOrigAttr = -// std::dynamic_pointer_cast(theAttribute); -// if (anOrigAttr && anOrigAttr->isObject()) { -// const ObjectPtr& anObj = theAttribute->owner(); -// const FeaturePtr aFeature = std::dynamic_pointer_cast(anObj); -// -// std::list > anAttrs = -// aFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId()); -// std::list >::iterator anAttr = anAttrs.begin(); -// for(; anAttr != anAttrs.end(); anAttr++) { -// if (*anAttr && *anAttr != theAttribute) { -// std::shared_ptr aRef = -// std::dynamic_pointer_cast(*anAttr); -// // check the object is already presented -// if (aRef->isObject() && aRef->object() == anOrigAttr->object()) -// return false; -// } -// } -// } -// 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::typeId()); -// 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; -//} -// =========== end of todo diff --git a/src/SketchPlugin/plugin-Sketch.xml b/src/SketchPlugin/plugin-Sketch.xml index 2691caeba..67ae5e124 100644 --- a/src/SketchPlugin/plugin-Sketch.xml +++ b/src/SketchPlugin/plugin-Sketch.xml @@ -65,17 +65,6 @@ - - @@ -125,22 +114,6 @@ - - @@ -162,21 +135,6 @@ - -- 2.39.2