#include <ModelAPI_Object.h>
#include <ModelAPI_Attribute.h>
#include <ModelAPI_AttributeValidator.h>
+#include <GeomAPI_Shape.h>
/**\class ModelAPI_RefAttrValidator
* \ingroup DataModel
public:
//! Returns true if object is good for the feature attribute
virtual bool isValid(const FeaturePtr& theFeature, const std::list<std::string>& theArguments,
- const ObjectPtr& theObject) const = 0;
+ const ObjectPtr& theObject, const GeomShapePtr& theShape) const = 0;
//! Returns true if the attribute is good for the feature attribute
virtual bool isValid(const FeaturePtr& theFeature, const std::list<std::string>& theArguments,
const ModelAPI_RefAttrValidator* aAttrValidator =
dynamic_cast<const ModelAPI_RefAttrValidator*>(*aValidator);
if (aAttrValidator) {
- if (!aAttrValidator->isValid(myFeature, *aArgs, theObj)) {
+ if (!aAttrValidator->isValid(myFeature, *aArgs, theObj, theShape)) {
return false;
}
}
bool PartSet_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature,
const std::list<std::string>& theArguments,
- const ObjectPtr& theObject) const
+ const ObjectPtr& theObject,
+ const GeomShapePtr& theShape) const
{
// Check RefAttr attributes
std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs =
std::shared_ptr<ModelAPI_AttributeSelection> aRef =
std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(*anAttr);
// check the object is already presented
- if (aRef->isInitialized() && aRef->context() == theObject)
- return false;
+ if (aRef->isInitialized() && aRef->context() == theObject) {
+ if (theShape.get() != NULL) {
+ if (aRef->value()->isEqual(theShape))
+ return false;
+ } else
+ return false;
+ }
}
}
}
const std::list<std::string>& theArguments,
const AttributePtr& theAttribute) const
{
- return PartSet_DifferentObjectsValidator::isValid(theAttribute, theArguments);
+ if (PartSet_DifferentObjectsValidator::isValid(theAttribute, theArguments)) {
+ std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs =
+ theFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId());
+ std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
+ for(; anAttr != anAttrs.end(); anAttr++) {
+ if (*anAttr) {
+ std::shared_ptr<ModelAPI_AttributeRefAttr> aRef =
+ std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(*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,
/// \param theArguments a list of arguments (names of attributes to check)
/// \param theObject a selected object
virtual bool isValid(const FeaturePtr& theFeature, const std::list<std::string>& theArguments,
- const ObjectPtr& theObject) const;
+ const ObjectPtr& theObject, const GeomShapePtr& theShape) const;
//! Returns true if the attribute is good for the feature attribute
//! \param theFeature a feature to check
}
else
{
- if (!aAttrValidator->isValid(myFeature, *aArgs, theObj)) {
+ if (!aAttrValidator->isValid(myFeature, *aArgs, theObj, theShape)) {
return false;
}
}
ModelAPI_ValidatorsFactory* aFactory = aMgr->validators();
aFactory->registerValidator("SketchPlugin_DistanceAttr",
new SketchPlugin_DistanceAttrValidator);
- aFactory->registerValidator("SketchPlugin_DifferentObjects",
- new SketchPlugin_DifferentObjectsValidator);
+ //aFactory->registerValidator("SketchPlugin_DifferentObjects",
+ // new SketchPlugin_DifferentObjectsValidator);
aFactory->registerValidator("SketchPlugin_ResultPoint", new SketchPlugin_ResultPointValidator);
aFactory->registerValidator("SketchPlugin_ResultLine", new SketchPlugin_ResultLineValidator);
aFactory->registerValidator("SketchPlugin_ResultArc", new SketchPlugin_ResultArcValidator);
bool SketchPlugin_DistanceAttrValidator::isValid(const FeaturePtr& theFeature,
const std::list<std::string>& theArguments,
- const ObjectPtr& theObject) const
+ const ObjectPtr& theObject,
+ const GeomShapePtr& theShape) const
{
std::string aParamA = theArguments.front();
SessionPtr aMgr = ModelAPI_Session::get();
return isValid(theAttribute, theArguments);
}
-bool SketchPlugin_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature,
- const std::list<std::string>& theArguments,
- const ObjectPtr& theObject) const
-{
- std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs =
- theFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId());
- std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
- for(; anAttr != anAttrs.end(); anAttr++) {
- if (*anAttr) {
- std::shared_ptr<ModelAPI_AttributeRefAttr> aRef =
- std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(*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<std::string>& theArguments ) const
-{
- std::shared_ptr<ModelAPI_AttributeRefAttr> anOrigAttr =
- std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(theAttribute);
- if (anOrigAttr && anOrigAttr->isObject()) {
- const ObjectPtr& anObj = theAttribute->owner();
- const FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(anObj);
+//bool SketchPlugin_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature,
+// const std::list<std::string>& theArguments,
+// const ObjectPtr& theObject) const
+//{
+// std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs =
+// theFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId());
+// std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
+// for(; anAttr != anAttrs.end(); anAttr++) {
+// if (*anAttr) {
+// std::shared_ptr<ModelAPI_AttributeRefAttr> aRef =
+// std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(*anAttr);
+// // check the object is already presented
+// if (aRef->isObject() && aRef->object() == theObject)
+// return false;
+// }
+// }
+// return true;
+//}
- std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs =
- aFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId());
- std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
- for(; anAttr != anAttrs.end(); anAttr++) {
- if (*anAttr && *anAttr != theAttribute) {
- std::shared_ptr<ModelAPI_AttributeRefAttr> aRef =
- std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(*anAttr);
- // check the object is already presented
- if (aRef->isObject() && aRef->object() == anOrigAttr->object())
- return false;
- }
- }
- }
- return true;
-}
+//bool SketchPlugin_DifferentObjectsValidator::isValid(
+// const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
+//{
+// std::shared_ptr<ModelAPI_AttributeRefAttr> anOrigAttr =
+// std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(theAttribute);
+// if (anOrigAttr && anOrigAttr->isObject()) {
+// const ObjectPtr& anObj = theAttribute->owner();
+// const FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(anObj);
+//
+// std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs =
+// aFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId());
+// std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
+// for(; anAttr != anAttrs.end(); anAttr++) {
+// if (*anAttr && *anAttr != theAttribute) {
+// std::shared_ptr<ModelAPI_AttributeRefAttr> aRef =
+// std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(*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<std::string>& theArguments, const AttributePtr& theAttribute) const
-{
- std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs =
- theFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId());
- std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
- for(; anAttr != anAttrs.end(); anAttr++) {
- if (*anAttr) {
- std::shared_ptr<ModelAPI_AttributeRefAttr> aRef =
- std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(*anAttr);
- // check the object is already presented
- if (!aRef->isObject() && aRef->attr() == theAttribute)
- return false;
- }
- }
- return true;
-}
+//bool SketchPlugin_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature,
+// const std::list<std::string>& theArguments, const AttributePtr& theAttribute) const
+//{
+// std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs =
+// theFeature->data()->attributes(ModelAPI_AttributeRefAttr::typeId());
+// std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
+// for(; anAttr != anAttrs.end(); anAttr++) {
+// if (*anAttr) {
+// std::shared_ptr<ModelAPI_AttributeRefAttr> aRef =
+// std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(*anAttr);
+// // check the object is already presented
+// if (!aRef->isObject() && aRef->attr() == theAttribute)
+// return false;
+// }
+// }
+// return true;
+//}
//! returns true if attribute is valid
//! \param theAttribute the checked attribute
//! \param theArguments arguments of the attribute
- virtual bool isValid(
- const AttributePtr& theAttribute, const std::list<std::string>& theArguments) const;
+ virtual bool isValid(const AttributePtr& theAttribute,
+ const std::list<std::string>& theArguments) const;
+
//! Returns true if object is good for the feature attribute
virtual bool isValid(const FeaturePtr& theFeature, const std::list<std::string>& theArguments,
- const ObjectPtr& theObject) const;
+ const ObjectPtr& theObject, const GeomShapePtr& theShape) const;
//! Returns true if the attribute is good for the feature attribute
virtual bool isValid(const FeaturePtr& theFeature, const std::list<std::string>& theArguments,
* Check that there is no same object was already selected in the feature.
* For an example: to avoid perpendicularity on line and the same line.
*/
-class SketchPlugin_DifferentObjectsValidator : public ModelAPI_RefAttrValidator
-{
- public:
- //! returns true if attribute is valid
- //! \param theAttribute the checked attribute
- //! \param theArguments arguments of the attribute
- virtual bool isValid(
- const AttributePtr& theAttribute, const std::list<std::string>& theArguments) const;
- //! Returns true if object is good for the feature attribute
- virtual bool isValid(const FeaturePtr& theFeature, const std::list<std::string>& theArguments,
- const ObjectPtr& theObject) const;
- //! Returns true if the attribute is good for the feature attribute
- virtual bool isValid(const FeaturePtr& theFeature, const std::list<std::string>& theArguments,
- const AttributePtr& theAttribute) const;
-};
+// Use PartSet_DifferentObjectsValidator instead
+//class SketchPlugin_DifferentObjectsValidator : public ModelAPI_RefAttrValidator
+//{
+// public:
+// //! returns true if attribute is valid
+// //! \param theAttribute the checked attribute
+// //! \param theArguments arguments of the attribute
+// virtual bool isValid(
+// const AttributePtr& theAttribute, const std::list<std::string>& theArguments) const;
+// //! Returns true if object is good for the feature attribute
+// virtual bool isValid(const FeaturePtr& theFeature, const std::list<std::string>& theArguments,
+// const ObjectPtr& theObject) const;
+// //! Returns true if the attribute is good for the feature attribute
+// virtual bool isValid(const FeaturePtr& theFeature, const std::list<std::string>& theArguments,
+// const AttributePtr& theAttribute) const;
+//};
#endif
label="Last object"
tooltip="Select point, line end point, line, center of circle or arc."
shape_types="edge vertex">
- <validator id="SketchPlugin_DifferentObjects"/>
+ <validator id="PartSet_DifferentObjects"/>
<validator id="SketchPlugin_DistanceAttr" parameters="ConstraintEntityA"/>
<selection_filter id="MultiFilter" parameters="line,vertex"/>
</sketch_shape_selector>
<sketch_constraint_shape_selector id="ConstraintEntityB" label="Last line" tooltip="Select a line"
shape_types="edge">
<selection_filter id="EdgeFilter" parameters="line"/>
- <validator id="SketchPlugin_DifferentObjects"/>
+ <validator id="PartSet_DifferentObjects"/>
</sketch_constraint_shape_selector>
<sketch-2dpoint_selector id="ConstraintFlyoutValuePnt" internal="1" obligatory="0"/>
<sketch_constraint_shape_selector id="ConstraintEntityB"
label="Last line" tooltip="Select an line"
shape_types="edge">
- <validator id="SketchPlugin_DifferentObjects"/>
+ <validator id="PartSet_DifferentObjects"/>
<selection_filter id="EdgeFilter" parameters="line"/>
</sketch_constraint_shape_selector>
<validator id="PartSet_PerpendicularValidator"/>