X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_Validators.cpp;h=55f0157b003a2ff8e9f36cdc1ec364f706b1d98f;hb=bb0072beffb5e17b0d2a02b326dc6402b9f5fb93;hp=04bcb3663fd2587b91666f37598aaf205cc9b04d;hpb=8014834da0821ddfaa8b19e3d9bd651fa4392ad9;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_Validators.cpp b/src/PartSet/PartSet_Validators.cpp index 04bcb3663..55f0157b0 100644 --- a/src/PartSet/PartSet_Validators.cpp +++ b/src/PartSet/PartSet_Validators.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #ifdef _DEBUG @@ -63,31 +64,31 @@ int shapesNbLines(const ModuleBase_ISelection* theSelection) return aCount; } -bool PartSet_DistanceValidator::isValid(const ModuleBase_ISelection* theSelection) const +bool PartSet_DistanceSelection::isValid(const ModuleBase_ISelection* theSelection) const { int aCount = shapesNbPoints(theSelection) + shapesNbLines(theSelection); return (aCount > 0) && (aCount < 3); } -bool PartSet_LengthValidator::isValid(const ModuleBase_ISelection* theSelection) const +bool PartSet_LengthSelection::isValid(const ModuleBase_ISelection* theSelection) const { int aCount = shapesNbLines(theSelection); - return (aCount > 0) && (aCount < 2); + return (aCount == 1); } -bool PartSet_PerpendicularValidator::isValid(const ModuleBase_ISelection* theSelection) const +bool PartSet_PerpendicularSelection::isValid(const ModuleBase_ISelection* theSelection) const { int aCount = shapesNbLines(theSelection); return (aCount > 0) && (aCount < 3); } -bool PartSet_ParallelValidator::isValid(const ModuleBase_ISelection* theSelection) const +bool PartSet_ParallelSelection::isValid(const ModuleBase_ISelection* theSelection) const { int aCount = shapesNbLines(theSelection); return (aCount > 0) && (aCount < 3); } -bool PartSet_RadiusValidator::isValid(const ModuleBase_ISelection* theSelection) const +bool PartSet_RadiusSelection::isValid(const ModuleBase_ISelection* theSelection) const { QList aList = theSelection->getSelected(); ModuleBase_ViewerPrs aPrs; @@ -105,15 +106,79 @@ bool PartSet_RadiusValidator::isValid(const ModuleBase_ISelection* theSelection) } } } - return (aCount > 0) && (aCount < 2); + return (aCount == 1); } -bool PartSet_RigidValidator::isValid(const ModuleBase_ISelection* theSelection) const +bool PartSet_RigidSelection::isValid(const ModuleBase_ISelection* theSelection) const +{ + QList aList = theSelection->getSelected(); + return (aList.count() == 1); +} + + +bool PartSet_CoincidentSelection::isValid(const ModuleBase_ISelection* theSelection) const +{ + int aCount = shapesNbPoints(theSelection); + return (aCount > 0) && (aCount < 3); +} + +bool PartSet_HVDirSelection::isValid(const ModuleBase_ISelection* theSelection) const +{ + int aCount = shapesNbLines(theSelection); + return (aCount == 1); +} + +bool PartSet_FilletSelection::isValid(const ModuleBase_ISelection* theSelection) const { int aCount = shapesNbLines(theSelection); - return (aCount > 0) && (aCount < 2); + return (aCount > 0) && (aCount < 3); +} + +bool PartSet_TangentSelection::isValid(const ModuleBase_ISelection* theSelection) const +{ + QList aList = theSelection->getSelected(); + if ((aList.size() == 0) || (aList.size() > 2)) + return false; + + ModuleBase_ViewerPrs aPrs = aList.first(); + const TopoDS_Shape& aShape = aPrs.shape(); + if (aShape.IsNull()) + return false; + + if (aShape.ShapeType() != TopAbs_EDGE) + return false; + + std::shared_ptr aShapePtr(new GeomAPI_Shape); + aShapePtr->setImpl(new TopoDS_Shape(aShape)); + GeomAPI_Edge aEdge1(aShapePtr); + + if (aEdge1.isLine() || aEdge1.isArc()) { + if (aList.size() == 2) { + // Check second selection + aPrs = aList.last(); + const TopoDS_Shape& aShape2 = aPrs.shape(); + if (aShape2.IsNull()) + return false; + + if (aShape2.ShapeType() != TopAbs_EDGE) + return false; + + std::shared_ptr aShapePtr2(new GeomAPI_Shape); + aShapePtr2->setImpl(new TopoDS_Shape(aShape2)); + GeomAPI_Edge aEdge2(aShapePtr2); + if (aEdge1.isLine() && aEdge2.isArc()) + return true; + else if (aEdge1.isArc() && aEdge2.isLine()) + return true; + else + return false; + } else + return true; + } + return false; } + bool PartSet_DifferentObjectsValidator::isValid(const AttributePtr& theAttribute, const std::list& theArguments) const {