From c15e018bb151fa64f3c6ae007b600156c8f4ec58 Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Thu, 7 Nov 2024 10:01:52 +0100 Subject: [PATCH] Assembly: Fix regressions of https://github.com/FreeCAD/FreeCAD/pull/16671 --- src/Mod/Assembly/CommandCreateView.py | 5 +++++ src/Mod/Assembly/JointObject.py | 3 +++ src/Mod/Assembly/UtilsAssembly.py | 31 +++++++++++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/src/Mod/Assembly/CommandCreateView.py b/src/Mod/Assembly/CommandCreateView.py index b83841bc13..3900c34861 100644 --- a/src/Mod/Assembly/CommandCreateView.py +++ b/src/Mod/Assembly/CommandCreateView.py @@ -524,6 +524,11 @@ class TaskAssemblyCreateView(QtCore.QObject): UtilsAssembly.restoreAssemblyPartsPlacements(self.assembly, self.initialPlcs) for move in self.viewObj.Moves: move.Visibility = False + commands = "" + for move in self.viewObj.Moves: + more = UtilsAssembly.generatePropertySettings(move) + commands = commands + more + Gui.doCommand(commands[:-1]) # Don't use the last \n App.closeActiveTransaction() return True diff --git a/src/Mod/Assembly/JointObject.py b/src/Mod/Assembly/JointObject.py index 2159cbf3c3..5622d8d31f 100644 --- a/src/Mod/Assembly/JointObject.py +++ b/src/Mod/Assembly/JointObject.py @@ -1307,6 +1307,9 @@ class TaskAssemblyCreateJoint(QtCore.QObject): else: self.joint.Document.removeObject(self.joint.Name) + cmds = UtilsAssembly.generatePropertySettings(self.joint) + Gui.doCommand(cmds) + App.closeActiveTransaction() return True diff --git a/src/Mod/Assembly/UtilsAssembly.py b/src/Mod/Assembly/UtilsAssembly.py index 72bb137bb8..0450b34995 100644 --- a/src/Mod/Assembly/UtilsAssembly.py +++ b/src/Mod/Assembly/UtilsAssembly.py @@ -1235,3 +1235,34 @@ def getParentPlacementIfNeeded(part): return linkGroup.Placement return Base.Placement() + + +def generatePropertySettings(documentObject): + commands = [] + if hasattr(documentObject, "Name"): + commands.append(f'obj = App.ActiveDocument.getObject("{documentObject.Name}")') + for propertyName in documentObject.PropertiesList: + propertyValue = documentObject.getPropertyByName(propertyName) + propertyType = documentObject.getTypeIdOfProperty(propertyName) + # Note: OpenCascade precision is 1e-07, angular precision is 1e-05. For purposes of creating a Macro, + # we are forcing a reduction in precision so as to get round numbers like 0 instead of tiny near 0 values + if propertyType == "App::PropertyFloat": + commands.append(f"obj.{propertyName} = {propertyValue:.5f}") + elif propertyType == "App::PropertyInt" or propertyType == "App::PropertyBool": + commands.append(f"obj.{propertyName} = {propertyValue}") + elif propertyType == "App::PropertyString" or propertyType == "App::PropertyEnumeration": + commands.append(f'obj.{propertyName} = "{propertyValue}"') + elif propertyType == "App::PropertyPlacement": + commands.append( + f"obj.{propertyName} = App.Placement(" + f"App.Vector({propertyValue.Base.x:.5f},{propertyValue.Base.y:.5f},{propertyValue.Base.z:.5f})," + f"App.Rotation(*{[round(n,5) for n in propertyValue.Rotation.getYawPitchRoll()]}))" + ) + elif propertyType == "App::PropertyXLinkSubHidden": + commands.append( + f'obj.{propertyName} = [App.ActiveDocument.getObject("{propertyValue[0].Name}"), {propertyValue[1]}]' + ) + else: + # print("Not processing properties of type ", propertyType) + pass + return "\n".join(commands) + "\n"