X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_Validators.cpp;h=fa7ac518f60a1696c8a4b04f5b88cc7392107735;hb=8abaa3d7f05f4f3cfe57d5d6921a66e29da72640;hp=1d6250afe4c3245bffd2b1be651f7af52b089a3b;hpb=3985b767e74385e51d1b503d2c97d3bb1e3f6faa;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_Validators.cpp b/src/PartSet/PartSet_Validators.cpp index 1d6250afe..fa7ac518f 100644 --- a/src/PartSet/PartSet_Validators.cpp +++ b/src/PartSet/PartSet_Validators.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + // File: PartSet_Validators.cpp // Created: 09 July 2014 // Author: Vitaly SMETANNIKOV @@ -9,18 +11,22 @@ #include #include #include +#include -#include +#include +#include +#include +#include +#ifdef _DEBUG +#include +#endif int shapesNbPoints(const ModuleBase_ISelection* theSelection) { - std::list aList = theSelection->getSelected(); - std::list::iterator it; - ModuleBase_ViewerPrs aPrs; + QList aList = theSelection->getSelected(); int aCount = 0; - for (it = aList.begin(); it != aList.end(); ++it) { - aPrs = *it; + foreach (ModuleBase_ViewerPrs aPrs, aList) { const TopoDS_Shape& aShape = aPrs.shape(); if (!aShape.IsNull()) { if (aShape.ShapeType() == TopAbs_VERTEX) @@ -32,12 +38,9 @@ int shapesNbPoints(const ModuleBase_ISelection* theSelection) int shapesNbLines(const ModuleBase_ISelection* theSelection) { - std::list aList = theSelection->getSelected(); - std::list::iterator it; - ModuleBase_ViewerPrs aPrs; + QList aList = theSelection->getSelected(); int aCount = 0; - for (it = aList.begin(); it != aList.end(); ++it) { - aPrs = *it; + foreach(ModuleBase_ViewerPrs aPrs, aList) { const TopoDS_Shape& aShape = aPrs.shape(); if (!aShape.IsNull()) { if (aShape.ShapeType() == TopAbs_EDGE) { @@ -55,7 +58,7 @@ int shapesNbLines(const ModuleBase_ISelection* theSelection) bool PartSet_DistanceValidator::isValid(const ModuleBase_ISelection* theSelection) const { - int aCount = shapesNbPoints(theSelection); + int aCount = shapesNbPoints(theSelection) + shapesNbLines(theSelection); return (aCount > 0) && (aCount < 3); } @@ -79,12 +82,10 @@ bool PartSet_ParallelValidator::isValid(const ModuleBase_ISelection* theSelectio bool PartSet_RadiusValidator::isValid(const ModuleBase_ISelection* theSelection) const { - std::list aList = theSelection->getSelected(); - std::list::iterator it; + QList aList = theSelection->getSelected(); ModuleBase_ViewerPrs aPrs; int aCount = 0; - for (it = aList.begin(); it != aList.end(); ++it) { - aPrs = *it; + foreach (ModuleBase_ViewerPrs aPrs, aList) { const TopoDS_Shape& aShape = aPrs.shape(); if (!aShape.IsNull()) { if (aShape.ShapeType() == TopAbs_EDGE) { @@ -99,3 +100,74 @@ bool PartSet_RadiusValidator::isValid(const ModuleBase_ISelection* theSelection) } return (aCount > 0) && (aCount < 2); } + +bool PartSet_RigidValidator::isValid(const ModuleBase_ISelection* theSelection) const +{ + int aCount = shapesNbLines(theSelection); + return (aCount > 0) && (aCount < 2); +} + +bool PartSet_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature, + const std::list& theArguments, + const ObjectPtr& theObject) const +{ + // Check RefAttr attributes + std::list > anAttrs = + theFeature->data()->attributes(ModelAPI_AttributeRefAttr::type()); + 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::type()); + 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) + return false; + } + } + } + // Check selection attributes + anAttrs = theFeature->data()->attributes(ModelAPI_AttributeReference::type()); + 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; + } + } + } + return true; +} + +bool PartSet_DifferentObjectsValidator::isValid(const FeaturePtr& theFeature, + const std::list& theArguments, + const AttributePtr& theAttribute) const +{ + // not implemented + return true; +} + +bool PartSet_DifferentObjectsValidator::isValid(const AttributePtr& theAttribute, + const std::list& theArguments) const +{ + // not implemented + return true; +}