X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGeomValidators%2FGeomValidators_BodyShapes.cpp;h=70d7bed541c946987c0381c7adf246d2d215f7c6;hb=9afbc5fb015e5ff91689e1ef3f4da286347fbda5;hp=bf790bb16a1ff2aa0a3999cf268670baef6335ef;hpb=a94fc319f2aa64b43c9a73b5ff7063923648faec;p=modules%2Fshaper.git diff --git a/src/GeomValidators/GeomValidators_BodyShapes.cpp b/src/GeomValidators/GeomValidators_BodyShapes.cpp index bf790bb16..70d7bed54 100644 --- a/src/GeomValidators/GeomValidators_BodyShapes.cpp +++ b/src/GeomValidators/GeomValidators_BodyShapes.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// Copyright (C) 2014-2023 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -12,10 +12,9 @@ // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or -// email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #include "GeomValidators_BodyShapes.h" @@ -25,6 +24,8 @@ #include #include #include +#include +#include bool GeomValidators_BodyShapes::isValid(const AttributePtr& theAttribute, const std::list& theArguments, @@ -35,16 +36,38 @@ bool GeomValidators_BodyShapes::isValid(const AttributePtr& theAttribute, AttributeSelectionPtr anAttrSelection = std::dynamic_pointer_cast(theAttribute); ResultPtr aContext = anAttrSelection->context(); - if(!aContext.get()) { + FeaturePtr aContextFeature = anAttrSelection->contextFeature(); + if (!(aContext.get() || aContextFeature.get())) { theError = "Error: Context is empty."; return false; } - - ResultConstructionPtr aResultConstruction = - std::dynamic_pointer_cast(aContext); - if(aResultConstruction.get()) { - theError = "Error: Result construction selected."; - return false; + if (aContext.get()) { + ResultConstructionPtr aResultConstruction = + std::dynamic_pointer_cast(aContext); + if (aResultConstruction.get()) { + theError = "Error: Result construction selected."; + return false; + } + // additional check that the selected object is top-level result + if (theArguments.size() > 0 && *(theArguments.rbegin()) == "toplevel") { + if (ModelAPI_Tools::bodyOwner(aContext).get()) { + theError = "Error: Only higher level shape allowed."; + return false; + } + } + } else { + std::list aResList = aContextFeature->results(); + std::list::const_iterator aIt; + for (aIt = aResList.cbegin(); aIt != aResList.cend(); aIt++) { + ResultPtr aRes = (*aIt); + ResultBodyPtr aBody = std::dynamic_pointer_cast(aRes); + if (aBody.get()) + break; + } + if (aIt == aResList.cend()) { + theError = "Error: Feature doesn't create body."; + return false; + } } } else if(anAttributeType == ModelAPI_AttributeSelectionList::typeId()) { AttributeSelectionListPtr anAttrSelectionList = @@ -58,9 +81,11 @@ bool GeomValidators_BodyShapes::isValid(const AttributePtr& theAttribute, } } } else { +// LCOV_EXCL_START theError = "Error: Attribute \"%1\" does not supported by this validator."; theError.arg(anAttributeType); return false; +// LCOV_EXCL_STOP } return true;