From 6fa7c4785ed307bb1230dd7f6bd26a99c5711270 Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Tue, 11 Jun 2024 10:09:57 +0200 Subject: [PATCH 1/3] Assembly: Makes sure deleting assembly deletes the joints, the exploded views and the view group. --- src/Mod/Assembly/Gui/ViewProviderAssembly.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/Mod/Assembly/Gui/ViewProviderAssembly.cpp b/src/Mod/Assembly/Gui/ViewProviderAssembly.cpp index d9ea2ea4c5..9d07859cba 100644 --- a/src/Mod/Assembly/Gui/ViewProviderAssembly.cpp +++ b/src/Mod/Assembly/Gui/ViewProviderAssembly.cpp @@ -55,6 +55,7 @@ #include #include #include +#include #include #include "ViewProviderAssembly.h" @@ -887,10 +888,20 @@ void ViewProviderAssembly::onSelectionChanged(const Gui::SelectionChanges& msg) bool ViewProviderAssembly::onDelete(const std::vector& subNames) { - // Delete the joingroup when assembly is deleted + // Delete the assembly goups when assembly is deleted for (auto obj : getObject()->getOutList()) { - if (obj->getTypeId() == Assembly::JointGroup::getClassTypeId()) { - obj->getDocument()->removeObject(obj->getNameInDocument()); + if (obj->getTypeId() == Assembly::JointGroup::getClassTypeId() + || obj->getTypeId() == Assembly::ViewGroup::getClassTypeId() + /* || obj->getTypeId() == Assembly::BomGroup::getClassTypeId()*/) { + + // Delete the group content first. + Gui::Command::doCommand(Gui::Command::Doc, + "doc = App.getDocument(\"%s\")\n" + "objName = \"%s\"\n" + "doc.getObject(objName).removeObjectsFromDocument()\n" + "doc.removeObject(objName)\n", + obj->getDocument()->getName(), + obj->getNameInDocument()); } } From 87bfe83ed646e01dca92095638ea25565ab2f895 Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Tue, 11 Jun 2024 10:29:46 +0200 Subject: [PATCH 2/3] Assembly: Deletes exploded view deletes the moves objects. --- src/Mod/Assembly/CommandCreateView.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Mod/Assembly/CommandCreateView.py b/src/Mod/Assembly/CommandCreateView.py index c64c7c8ed3..3cfdc62be8 100644 --- a/src/Mod/Assembly/CommandCreateView.py +++ b/src/Mod/Assembly/CommandCreateView.py @@ -210,6 +210,11 @@ class ViewProviderExplodedView: return True + def onDelete(self, vobj, subelements): + for obj in self.claimChildren(): + obj.Document.removeObject(obj.Name) + return True + ######### Exploded View Move ######### ExplodedViewStepTypes = [ From f6b15dcc1219bbe3b87d07aa4e141c37fa945c8f Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Tue, 11 Jun 2024 12:11:16 +0200 Subject: [PATCH 3/3] Assembly: Fix bug by replacing const char* by std::string for variables that need to be swapped. --- src/Mod/Assembly/App/AssemblyObject.cpp | 14 +++++++------- src/Mod/Assembly/App/AssemblyObject.h | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Mod/Assembly/App/AssemblyObject.cpp b/src/Mod/Assembly/App/AssemblyObject.cpp index f8343cff06..2db312fb92 100644 --- a/src/Mod/Assembly/App/AssemblyObject.cpp +++ b/src/Mod/Assembly/App/AssemblyObject.cpp @@ -1652,14 +1652,14 @@ void AssemblyObject::swapJCS(App::DocumentObject* joint) } bool AssemblyObject::isEdgeType(App::DocumentObject* obj, - const char* elName, + std::string& elName, GeomAbs_CurveType type) { PartApp::Feature* base = static_cast(obj); const PartApp::TopoShape& TopShape = base->Shape.getShape(); // Check for valid face types - TopoDS_Edge edge = TopoDS::Edge(TopShape.getSubShape(elName)); + TopoDS_Edge edge = TopoDS::Edge(TopShape.getSubShape(elName.c_str())); BRepAdaptor_Curve sf(edge); if (sf.GetType() == type) { @@ -1670,16 +1670,16 @@ bool AssemblyObject::isEdgeType(App::DocumentObject* obj, } bool AssemblyObject::isFaceType(App::DocumentObject* obj, - const char* elName, + std::string& elName, GeomAbs_SurfaceType type) { auto base = static_cast(obj); PartApp::TopoShape TopShape = base->Shape.getShape(); // Check for valid face types - TopoDS_Face face = TopoDS::Face(TopShape.getSubShape(elName)); + TopoDS_Face face = TopoDS::Face(TopShape.getSubShape(elName.c_str())); BRepAdaptor_Surface sf(face); - // GeomAbs_Plane GeomAbs_Cylinder GeomAbs_Cone GeomAbs_Sphere GeomAbs_Thorus + if (sf.GetType() == type) { return true; } @@ -1726,8 +1726,8 @@ DistanceType AssemblyObject::getDistanceType(App::DocumentObject* joint) { std::string type1 = getElementTypeFromProp(joint, "Element1"); std::string type2 = getElementTypeFromProp(joint, "Element2"); - const char* elt1 = getElementFromProp(joint, "Element1"); - const char* elt2 = getElementFromProp(joint, "Element2"); + std::string elt1 = getElementFromProp(joint, "Element1"); + std::string elt2 = getElementFromProp(joint, "Element2"); auto* obj1 = getLinkedObjFromNameProp(joint, "Object1", "Part1"); auto* obj2 = getLinkedObjFromNameProp(joint, "Object2", "Part2"); diff --git a/src/Mod/Assembly/App/AssemblyObject.h b/src/Mod/Assembly/App/AssemblyObject.h index 9cbc449a80..0276811d7b 100644 --- a/src/Mod/Assembly/App/AssemblyObject.h +++ b/src/Mod/Assembly/App/AssemblyObject.h @@ -235,8 +235,8 @@ public: static void swapJCS(App::DocumentObject* joint); - static bool isEdgeType(App::DocumentObject* obj, const char* elName, GeomAbs_CurveType type); - static bool isFaceType(App::DocumentObject* obj, const char* elName, GeomAbs_SurfaceType type); + static bool isEdgeType(App::DocumentObject* obj, std::string& elName, GeomAbs_CurveType type); + static bool isFaceType(App::DocumentObject* obj, std::string& elName, GeomAbs_SurfaceType type); static double getFaceRadius(App::DocumentObject* obj, const char* elName); static double getEdgeRadius(App::DocumentObject* obj, const char* elName);