From 2e0f664e66dc2b46796df2953f52871b10799173 Mon Sep 17 00:00:00 2001 From: vsv Date: Wed, 9 Oct 2019 12:06:30 +0300 Subject: [PATCH] Fix selection of non-visible features. --- src/ModuleBase/ModuleBase_ISelection.cpp | 13 +++++++++++-- src/ModuleBase/ModuleBase_WidgetValidated.cpp | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/ModuleBase/ModuleBase_ISelection.cpp b/src/ModuleBase/ModuleBase_ISelection.cpp index 73999c601..635991721 100644 --- a/src/ModuleBase/ModuleBase_ISelection.cpp +++ b/src/ModuleBase/ModuleBase_ISelection.cpp @@ -20,6 +20,7 @@ #include "ModuleBase_ISelection.h" #include "ModuleBase_ViewerPrs.h" +#include "ModelAPI_Feature.h" #include #include @@ -53,8 +54,16 @@ ResultPtr ModuleBase_ISelection::getResult(const ModuleBase_ViewerPrsPtr& thePrs { ResultPtr aResult; - if (thePrs->object().get()) - aResult = std::dynamic_pointer_cast(thePrs->object()); + if (thePrs->object().get()) { + ObjectPtr aObject = thePrs->object(); + aResult = std::dynamic_pointer_cast(aObject); + if (!aResult.get()) { + FeaturePtr aFeature = std::dynamic_pointer_cast(aObject); + if (aFeature.get()) { + aResult = aFeature->firstResult(); + } + } + } else if (!thePrs->owner().IsNull()) { ObjectPtr anObject = getSelectableObject(thePrs->owner()); aResult = std::dynamic_pointer_cast(anObject); diff --git a/src/ModuleBase/ModuleBase_WidgetValidated.cpp b/src/ModuleBase/ModuleBase_WidgetValidated.cpp index a11c8c201..bd9cdbd76 100644 --- a/src/ModuleBase/ModuleBase_WidgetValidated.cpp +++ b/src/ModuleBase/ModuleBase_WidgetValidated.cpp @@ -107,7 +107,7 @@ bool ModuleBase_WidgetValidated::isValidInFilters(const ModuleBase_ViewerPrsPtr& // if an owner is null, the selection happens in the Object browser. // creates a selection owner on the base of object shape and the object AIS object - if ((aOwnersList.Size() > 0) && thePrs->object().get()) { + if ((aOwnersList.Size() == 0) && thePrs->object().get()) { ResultPtr aResult = myWorkshop->selection()->getResult(thePrs); GeomShapePtr aShape = aResult.get() ? aResult->shape() : GeomShapePtr(); // some results have no shape, e.g. the parameter one. So, they should not be validated -- 2.39.2