X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2FModuleBase%2FModuleBase_WidgetSelector.cpp;h=6876a337fbd189abaf27279d04d8f4dbe6fcc997;hb=88ee9b2b81cf93a6324336b57e30cc8a3a487499;hp=7d701aaf55616c5e93f9c54a17a02be658caf427;hpb=a5e8dd0b6eae6660f0d10e659b2b604a4bbed65b;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetSelector.cpp b/src/ModuleBase/ModuleBase_WidgetSelector.cpp index 7d701aaf5..6876a337f 100644 --- a/src/ModuleBase/ModuleBase_WidgetSelector.cpp +++ b/src/ModuleBase/ModuleBase_WidgetSelector.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// Copyright (C) 2014-2022 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -35,11 +35,16 @@ #include #include #include +#include #include #include +// Get object from group +// Return true if find object +static bool getObjectFromGroup(ObjectPtr& theObject, GeomShapePtr& theShape); + ModuleBase_WidgetSelector::ModuleBase_WidgetSelector(QWidget* theParent, ModuleBase_IWorkshop* theWorkshop, const Config_WidgetAPI* theData) @@ -66,6 +71,15 @@ void ModuleBase_WidgetSelector::getGeomSelection(const ModuleBase_ViewerPrsPtr& if (!theObject.get()) theObject = thePrs->object(); theShape = aSelection->getShape(thePrs); + + FeaturePtr aFeature = ModelAPI_Feature::feature(theObject); + while (aFeature && aFeature->lastResult()->groupName() == ModelAPI_ResultGroup::group()) { + if (!getObjectFromGroup(theObject, theShape)) + break; + aFeature = ModelAPI_Feature::feature(theObject); + + thePrs->setObject(theObject); + } } //******************************************************************** @@ -209,11 +223,13 @@ bool ModuleBase_WidgetSelector::isValidSelectionCustom(const ModuleBase_ViewerPr { GeomShapePtr aShape = myWorkshop->selection()->getShape(thePrs); ResultPtr aResult = myWorkshop->selection()->getResult(thePrs); - bool aValid = acceptSubShape(aShape, aResult); + bool aValid = aResult.get(); + if (!isWholeResultAllowed()) + aValid = acceptSubShape(aShape, aResult); if (aValid) { // In order to avoid selection of the same object - ResultPtr aResult = myWorkshop->selection()->getResult(thePrs); + aResult = myWorkshop->selection()->getResult(thePrs); FeaturePtr aSelectedFeature = ModelAPI_Feature::feature(aResult); aValid = aSelectedFeature != myFeature; } @@ -252,3 +268,33 @@ void ModuleBase_WidgetSelector::deactivate() aSelectAttr->removeTemporaryValues(); } } + +//******************************************************************** +bool ModuleBase_WidgetSelector::isWholeResultAllowed() const +{ + AttributePtr anAttribute = attribute(); + if (anAttribute.get()) { + AttributeSelectionListPtr aSelAttr = + std::dynamic_pointer_cast(anAttribute); + if (aSelAttr.get()) + return aSelAttr->isWholeResultAllowed(); + } + return false; +} + +bool getObjectFromGroup(ObjectPtr& theObject, GeomShapePtr& theShape) +{ + FeaturePtr aFeature = ModelAPI_Feature::feature(theObject); + + AttributeSelectionListPtr anAttrList = aFeature->selectionList("group_list"); + + for (int anIndex = 0; anIndex < anAttrList->size(); ++anIndex) { + AttributeSelectionPtr aSelect = anAttrList->value(anIndex); + if (aSelect->context()->shape()->isSubShape(theShape) || + aSelect->context()->shape()->isEqual(theShape)) { + theObject = aSelect->contextObject(); + return true; + } + } + return false; +} \ No newline at end of file