From cac8eb0859880db9be5770e0a441c211368b1dff Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Mon, 16 Dec 2024 14:43:58 +0100 Subject: [PATCH] Assembly: Joint creation presolve: move part2 rather than part1 when both are unconnected. --- src/Mod/Assembly/JointObject.py | 48 ++++++++++++++++----------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/Mod/Assembly/JointObject.py b/src/Mod/Assembly/JointObject.py index fdac6ed824..8fb431fcae 100644 --- a/src/Mod/Assembly/JointObject.py +++ b/src/Mod/Assembly/JointObject.py @@ -706,31 +706,10 @@ class Joint: part2Connected = assembly.isPartConnected(part2) joint.Activated = True else: - part1Connected = False - part2Connected = True + part1Connected = True + part2Connected = False - if not part2Connected: - if savePlc: - self.partMovedByPresolved = part2 - self.presolveBackupPlc = part2.Placement - - globalJcsPlc1 = UtilsAssembly.getJcsGlobalPlc(joint.Placement1, joint.Reference1) - jcsPlc2 = UtilsAssembly.getJcsPlcRelativeToPart( - assembly, joint.Placement2, joint.Reference2 - ) - if not sameDir: - jcsPlc2 = UtilsAssembly.flipPlacement(jcsPlc2) - - # For link groups and sub-assemblies we have to take into account - # the parent placement (ie the linkgroup plc) as the linkgroup is not the moving part - # But instead of doing as follow, we rather enforce identity placement for linkgroups. - # parentPlc = UtilsAssembly.getParentPlacementIfNeeded(part2) - # part2.Placement = globalJcsPlc1 * jcsPlc2.inverse() * parentPlc.inverse() - - part2.Placement = globalJcsPlc1 * jcsPlc2.inverse() - return True - - elif not part1Connected: + if not part1Connected: if savePlc: self.partMovedByPresolved = part1 self.presolveBackupPlc = part1.Placement @@ -742,8 +721,29 @@ class Joint: if not sameDir: jcsPlc1 = UtilsAssembly.flipPlacement(jcsPlc1) + # For link groups and sub-assemblies we have to take into account + # the parent placement (ie the linkgroup plc) as the linkgroup is not the moving part + # But instead of doing as follow, we rather enforce identity placement for linkgroups. + # parentPlc = UtilsAssembly.getParentPlacementIfNeeded(part2) + # part2.Placement = globalJcsPlc1 * jcsPlc2.inverse() * parentPlc.inverse() + part1.Placement = globalJcsPlc2 * jcsPlc1.inverse() return True + + elif not part2Connected: + if savePlc: + self.partMovedByPresolved = part2 + self.presolveBackupPlc = part2.Placement + + globalJcsPlc1 = UtilsAssembly.getJcsGlobalPlc(joint.Placement1, joint.Reference1) + jcsPlc2 = UtilsAssembly.getJcsPlcRelativeToPart( + assembly, joint.Placement2, joint.Reference2 + ) + if not sameDir: + jcsPlc2 = UtilsAssembly.flipPlacement(jcsPlc2) + + part2.Placement = globalJcsPlc1 * jcsPlc2.inverse() + return True return False def undoPreSolve(self, joint):