#include <ModelAPI_AttributeSelection.h>
#include "ModelAPI_Object.h"
-bool ModelAPI_ShapeValidator::isValid(const FeaturePtr& theFeature,
+bool ModelAPI_ShapeValidator::isValid(const AttributePtr& theAttribute,
const std::list<std::string>& theArguments,
- const ObjectPtr& theObject,
- const AttributePtr& theAttribute,
- const GeomShapePtr& theShape) const
+ std::string& theError) const
{
+ FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
+ AttributeSelectionPtr aSelectionAttribute =
+ std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(theAttribute);
+ GeomShapePtr aShape = aSelectionAttribute->value();
+ if (!aShape.get()) {
+ ResultPtr aResult = aSelectionAttribute->context();
+ if (aResult.get())
+ aShape = aResult->shape();
+ }
+
std::string aCurrentAttributeId = theAttribute->id();
// get all feature attributes
std::list<AttributePtr> anAttrs =
- theFeature->data()->attributes(ModelAPI_AttributeSelection::type());
- if (anAttrs.size() > 0 && theShape.get() != NULL) {
+ aFeature->data()->attributes(ModelAPI_AttributeSelection::typeId());
+ if (anAttrs.size() > 0 && aShape.get() != NULL) {
std::list<AttributePtr>::iterator anAttr = anAttrs.begin();
for(; anAttr != anAttrs.end(); anAttr++) {
AttributePtr anAttribute = *anAttr;
// take into concideration only other attributes
if (anAttribute.get() != NULL && anAttribute->id() != aCurrentAttributeId) {
- AttributeSelectionPtr aSelectionAttribute =
+ aSelectionAttribute =
std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(anAttribute);
// the shape of the attribute should be not the same
- if (aSelectionAttribute.get() != NULL && theShape->isEqual(aSelectionAttribute->value())) {
- return false;
+ if (aSelectionAttribute.get() != NULL) {
+ GeomShapePtr anAttrShape = aSelectionAttribute->value();
+ if (!anAttrShape.get()) {
+ ResultPtr aResult = aSelectionAttribute->context();
+ if (aResult.get())
+ anAttrShape = aResult->shape();
+ }
+ if (aShape->isEqual(anAttrShape)) {
+ return false;
+ }
}
}
}