diff --git a/src/Mod/PartDesign/Gui/TaskDressUpParameters.cpp b/src/Mod/PartDesign/Gui/TaskDressUpParameters.cpp index 0dd325517f..e2754199ea 100644 --- a/src/Mod/PartDesign/Gui/TaskDressUpParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskDressUpParameters.cpp @@ -135,7 +135,7 @@ void TaskDressUpParameters::addAllEdges(QListWidget* widget) if (!base) { return; } - int count = Part::Feature::getTopoShape(base, Part::ShapeOption::ResolveLink + int count = Part::Feature::getTopoShape(base, Part::ShapeOption::ResolveLink | Part::ShapeOption::Transform).countSubShapes(TopAbs_EDGE); auto subValues = pcDressUp->Base.getSubValues(false); std::size_t len = subValues.size(); @@ -398,6 +398,12 @@ void TaskDressUpParameters::setSelectionMode(selectionModes mode) // remove any highlights and selections DressUpView->highlightReferences(false); + + if (previouslyShownViewProvider != nullptr) { + // restore the previously shown view provider + previouslyShownViewProvider->show(); + previouslyShownViewProvider = nullptr; + } } else { AllowSelectionFlags allow; @@ -406,6 +412,11 @@ void TaskDressUpParameters::setSelectionMode(selectionModes mode) Gui::Selection().addSelectionGate(new ReferenceSelection(this->getBase(), allow)); DressUpView->highlightReferences(true); + + // selection must come from the previous feature, we also need to remember the currently + // shown so we can restore it later + previouslyShownViewProvider = DressUpView->getBodyViewProvider()->getShownViewProvider(); + DressUpView->showPreviousFeature(true); } Gui::Selection().clearSelection(); diff --git a/src/Mod/PartDesign/Gui/TaskDressUpParameters.h b/src/Mod/PartDesign/Gui/TaskDressUpParameters.h index 09c687287b..07e67c72c7 100644 --- a/src/Mod/PartDesign/Gui/TaskDressUpParameters.h +++ b/src/Mod/PartDesign/Gui/TaskDressUpParameters.h @@ -105,6 +105,8 @@ protected: private: Gui::WeakPtrT DressUpView; + + Gui::ViewProvider* previouslyShownViewProvider { nullptr }; }; /// simulation dialog for the TaskView