From 3052760541008523ae483b6dfd332f925bc7bee4 Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Tue, 11 Jun 2024 15:37:52 +0200 Subject: [PATCH] Assembly: deleting a component deletes its joints. --- src/Mod/Assembly/Gui/ViewProviderAssembly.cpp | 26 +++++++++++++++++++ src/Mod/Assembly/Gui/ViewProviderAssembly.h | 1 + src/Mod/Assembly/JointObject.py | 6 +++++ 3 files changed, 33 insertions(+) diff --git a/src/Mod/Assembly/Gui/ViewProviderAssembly.cpp b/src/Mod/Assembly/Gui/ViewProviderAssembly.cpp index 9d07859cba..571ed523f4 100644 --- a/src/Mod/Assembly/Gui/ViewProviderAssembly.cpp +++ b/src/Mod/Assembly/Gui/ViewProviderAssembly.cpp @@ -908,6 +908,32 @@ bool ViewProviderAssembly::onDelete(const std::vector& subNames) return ViewProviderPart::onDelete(subNames); } +bool ViewProviderAssembly::canDelete(App::DocumentObject* obj) const +{ + bool res = ViewProviderPart::canDelete(obj); + if (res) { + // If a component is deleted, then we delete the joints as well. + for (auto parent : obj->getInList()) { + if (!parent) { + continue; + } + + auto* prop = + dynamic_cast(parent->getPropertyByName("EnableLimits")); + auto* prop2 = + dynamic_cast(parent->getPropertyByName("ObjectToGround")); + if (prop || prop2) { + Gui::Command::doCommand(Gui::Command::Doc, + "App.getDocument(\"%s\").removeObject(\"%s\")", + parent->getDocument()->getName(), + parent->getNameInDocument()); + } + } + } + + return res; +} + void ViewProviderAssembly::setDraggerVisibility(bool val) { asmDraggerSwitch->whichChild = val ? SO_SWITCH_ALL : SO_SWITCH_NONE; diff --git a/src/Mod/Assembly/Gui/ViewProviderAssembly.h b/src/Mod/Assembly/Gui/ViewProviderAssembly.h index fa04a91342..ab28415a6d 100644 --- a/src/Mod/Assembly/Gui/ViewProviderAssembly.h +++ b/src/Mod/Assembly/Gui/ViewProviderAssembly.h @@ -72,6 +72,7 @@ public: bool doubleClicked() override; bool onDelete(const std::vector& subNames) override; + bool canDelete(App::DocumentObject* obj) const override; /** @name enter/exit edit mode */ //@{ diff --git a/src/Mod/Assembly/JointObject.py b/src/Mod/Assembly/JointObject.py index f7cd18a122..073302ecc5 100644 --- a/src/Mod/Assembly/JointObject.py +++ b/src/Mod/Assembly/JointObject.py @@ -941,6 +941,9 @@ class ViewProviderJoint: return True + def canDelete(self, _obj): + return True + ################ Grounded Joint object ################# @@ -1143,6 +1146,9 @@ class ViewProviderGroundedJoint: Since no data were serialized nothing needs to be done here.""" return None + def canDelete(self, _obj): + return True + class MakeJointSelGate: def __init__(self, taskbox, assembly):