From 25e9a8b7b7dc95f23bbabf5e6eca89f39dbfbb8c Mon Sep 17 00:00:00 2001 From: Kacper Donat Date: Sun, 7 Sep 2025 01:08:25 +0200 Subject: [PATCH] Gui: Add handling for BaseFeatures outside of Body edge case --- src/Mod/PartDesign/Gui/ViewProviderBase.cpp | 22 +++++++++++++++++++++ src/Mod/PartDesign/Gui/ViewProviderBase.h | 2 ++ 2 files changed, 24 insertions(+) diff --git a/src/Mod/PartDesign/Gui/ViewProviderBase.cpp b/src/Mod/PartDesign/Gui/ViewProviderBase.cpp index 220ac52c20..8ac591b363 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderBase.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderBase.cpp @@ -72,9 +72,25 @@ void ViewProviderBase::setupContextMenu(QMenu* menu, QObject* receiver, const ch if (!base->Placement.testStatus(App::Property::Immutable) && !base->Placement.testStatus(App::Property::ReadOnly) && !base->Placement.testStatus(App::Property::Hidden)) { + + // Handling of the edge case where some base features are outside the body + // that should not happen, but it was possible to do in older FreeCAD versions. + // This ensures that for older files it still works correctly. + if (!getBodyViewProvider()) { + ViewProviderPartExt::setupContextMenu(menu, receiver, member); + } + ViewProvider::setupContextMenu(menu, receiver, member); } } +Gui::ViewProvider* ViewProviderBase::startEditing(int ModNum) +{ + if (!getBodyViewProvider()) { + return ViewProviderPartExt::startEditing(ModNum); + } + + return ViewProvider::startEditing(ModNum); +} bool ViewProviderBase::setEdit(int ModNum) { @@ -82,6 +98,12 @@ bool ViewProviderBase::setEdit(int ModNum) if (!base->Placement.testStatus(App::Property::Immutable) && !base->Placement.testStatus(App::Property::ReadOnly) && !base->Placement.testStatus(App::Property::Hidden)) { + + // same as in setupContextMenu + if (!getBodyViewProvider()) { + return ViewProviderPartExt::setEdit(ModNum); + } + return ViewProvider::setEdit(ModNum); } diff --git a/src/Mod/PartDesign/Gui/ViewProviderBase.h b/src/Mod/PartDesign/Gui/ViewProviderBase.h index 4c56292940..592ca2b76a 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderBase.h +++ b/src/Mod/PartDesign/Gui/ViewProviderBase.h @@ -41,6 +41,8 @@ public: bool doubleClicked() override; void setupContextMenu(QMenu* menu, QObject* receiver, const char* member) override; + Gui::ViewProvider* startEditing(int ModNum) override; + protected: bool setEdit(int ModNum) override; };