#include <ModelAPI_AttributeSelectionList.h>
#include <ModelAPI_Session.h>
-#include <GeomValidators_Edge.h>
+#include <GeomValidators_ShapeType.h>
#include <GeomDataAPI_Point2D.h>
-bool SketchPlugin_DistanceAttrValidator::isValid(
- const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
+bool SketchPlugin_DistanceAttrValidator::isValid(const AttributePtr& theAttribute,
+ const std::list<std::string>& theArguments,
+ std::string& theError) const
{
// there is a check whether the feature contains a point and a linear edge or two point values
std::string aParamA = theArguments.front();
// 1. check whether the references object is a linear
ObjectPtr anObject = aRefAttr->object();
- const ModelAPI_AttributeValidator* anEdgeValidator =
- dynamic_cast<const GeomValidators_Edge*>(aFactory->validator("GeomValidators_Edge"));
+ const ModelAPI_AttributeValidator* aShapeValidator =
+ dynamic_cast<const GeomValidators_ShapeType*>(aFactory->validator("GeomValidators_ShapeType"));
std::list<std::string> anArguments;
anArguments.push_back("circle");
- bool anEdgeValid = anEdgeValidator->isValid(aRefAttr, anArguments);
+ bool aShapeValid = aShapeValidator->isValid(aRefAttr, anArguments);
// the circle line is not a valid case
- if (anEdgeValid)
+ if (aShapeValid)
return false;
anArguments.clear();
anArguments.push_back("line");
- anEdgeValid = anEdgeValidator->isValid(aRefAttr, anArguments);
+ aShapeValid = aShapeValidator->isValid(aRefAttr, anArguments);
// if the attribute value is not a line, that means it is a vertex. A vertex is always valid
- if (!anEdgeValid)
+ if (!aShapeValid)
return true;
FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
// If it is a line then we have to check that first attribute id not a line
- std::shared_ptr<GeomDataAPI_Point2D> aPoint = SketcherPrs_Tools::getFeaturePoint(aFeature->data(), aParamA);
+ std::shared_ptr<SketchPlugin_Feature> aSFeature =
+ std::dynamic_pointer_cast<SketchPlugin_Feature>(theAttribute->owner());
+ SketchPlugin_Sketch* aSketch = aSFeature->sketch();
+ std::shared_ptr<GeomAPI_Ax3> aPlane = SketchPlugin_Sketch::plane(aSketch);
+ std::shared_ptr<GeomDataAPI_Point2D> aPoint = SketcherPrs_Tools::getFeaturePoint(
+ aFeature->data(), aParamA, aPlane);
if (aPoint)
return true;
}
return false;
}
-bool SketchPlugin_TangentAttrValidator::isValid(
- const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
+
+bool SketchPlugin_TangentAttrValidator::isValid(const AttributePtr& theAttribute,
+ const std::list<std::string>& theArguments,
+ std::string& theError) const
{
// there is a check whether the feature contains a point and a linear edge or two point values
std::string aParamA = theArguments.front();
} else
return false;
- // check that both have coincidence
- FeaturePtr aConstrFeature;
- std::set<FeaturePtr> aCoinList;
- const std::set<std::shared_ptr<ModelAPI_Attribute>>& aRefsList = aRefFea->data()->refsToMe();
- std::set<std::shared_ptr<ModelAPI_Attribute>>::const_iterator aIt;
- for (aIt = aRefsList.cbegin(); aIt != aRefsList.cend(); ++aIt) {
- std::shared_ptr<ModelAPI_Attribute> aAttr = (*aIt);
- aConstrFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aAttr->owner());
- if (aConstrFeature->getKind() == SketchPlugin_ConstraintCoincidence::ID()) {
- AttributeRefAttrPtr aRAttr = std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(aAttr);
- AttributePtr aAR = aRAttr->attr();
- if (aAR->id() != SketchPlugin_Arc::CENTER_ID()) // ignore constraint to center of arc
- aCoinList.insert(aConstrFeature);
- }
- }
- // if there is no coincidence then it is not valid
- if (aCoinList.size() == 0)
- return false;
-
- // find that coincedence is the same
- const std::set<std::shared_ptr<ModelAPI_Attribute>>& aOtherList = aOtherFea->data()->refsToMe();
- std::set<FeaturePtr>::const_iterator aCoinsIt;
- for (aIt = aOtherList.cbegin(); aIt != aOtherList.cend(); ++aIt) {
- std::shared_ptr<ModelAPI_Attribute> aAttr = (*aIt);
- aConstrFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aAttr->owner());
- aCoinsIt = aCoinList.find(aConstrFeature);
- if (aCoinsIt != aCoinList.end()) {
- AttributeRefAttrPtr aRAttr = std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(aAttr);
- AttributePtr aAR = aRAttr->attr();
- if (aAR->id() != SketchPlugin_Arc::CENTER_ID())
- return true;
- }
- }
+ return true;
}
return false;
}
-bool SketchPlugin_NotFixedValidator::isValid(
- const AttributePtr& theAttribute, const std::list<std::string>& theArguments) const
+bool SketchPlugin_NotFixedValidator::isValid(const AttributePtr& theAttribute,
+ const std::list<std::string>& theArguments,
+ std::string& theError) const
{
std::shared_ptr<SketchPlugin_Feature> aFeature =
std::dynamic_pointer_cast<SketchPlugin_Feature>(theAttribute->owner());
return true;
}
-bool SketchPlugin_EqualAttrValidator::isValid(
- const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
+bool SketchPlugin_EqualAttrValidator::isValid(const AttributePtr& theAttribute,
+ const std::list<std::string>& theArguments,
+ std::string& theError) const
{
std::string aParamA = theArguments.front();
FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
return true;
}
-bool SketchPlugin_MirrorAttrValidator::isValid(
- const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
+bool SketchPlugin_MirrorAttrValidator::isValid(const AttributePtr& theAttribute,
+ const std::list<std::string>& theArguments,
+ std::string& theError) const
{
FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
AttributeSelectionListPtr aSelAttr =
}
-bool SketchPlugin_CoincidenceAttrValidator::isValid(
- const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
+bool SketchPlugin_CoincidenceAttrValidator::isValid(const AttributePtr& theAttribute,
+ const std::list<std::string>& theArguments,
+ std::string& theError) const
{
// there is a check whether the feature contains a point and a linear edge or two point values
std::string aParamA = theArguments.front();
}
-bool SketchPlugin_CopyValidator::isValid(
- const AttributePtr& theAttribute, const std::list<std::string>& theArguments ) const
+bool SketchPlugin_CopyValidator::isValid(const AttributePtr& theAttribute,
+ const std::list<std::string>& theArguments,
+ std::string& theError) const
{
FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
AttributeSelectionListPtr aSelAttr =