From 656fcdd2bdb484a2f737555d91de3d86d9fef09a Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Sun, 30 Dec 2018 13:03:27 +0800 Subject: [PATCH] gui: support AsmElement(Link) in command GotoLinkedFinal --- gui.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ init_gui.py | 5 +++-- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/gui.py b/gui.py index b177546..6ca542f 100644 --- a/gui.py +++ b/gui.py @@ -700,11 +700,65 @@ class AsmCmdGotoLinked(AsmCmdBase): FreeCADGui.Selection.clearSelection() FreeCADGui.Selection.addSelection(sels[0].Object,subname) FreeCADGui.Selection.pushSelStack() + FreeCADGui.runCommand('Std_TreeSelection') @classmethod def IsActive(cls): return FreeCADGui.isCommandActive('Std_LinkSelectLinked') +class AsmCmdGotoLinkedFinal(AsmCmdBase): + _id = 23 + _menuText = 'Select linked final' + _tooltip = 'Select the deepest linked object' + _accel = 'A, F' + _toolbarName = '' + + @classmethod + def getIconName(cls): + return 'LinkSelectFinal' + + @classmethod + def Activated(cls): + from .assembly import isTypeOf, AsmElement, AsmElementLink + sels = FreeCADGui.Selection.getSelectionEx('',0,True) + if not sels: + return + if not sels[0].SubElementNames: + FreeCADGui.runCommand('Std_LinkSelectFinal') + return + subname = sels[0].SubElementNames[0] + obj = sels[0].Object.getSubObject(subname,retType=1) + if not isTypeOf(obj,(AsmElementLink,AsmElement)): + FreeCADGui.runCommand('Std_LinkSelectFinal') + return + + if isTypeOf(obj, AsmElementLink): + obj = obj.getSubObject(subname,retType=1) + + while isTypeOf(obj,AsmElement): + linked,subname = obj.LinkedObject + obj = linked.getSubObject(subname,retType=1) + + obj = obj.getLinkedObject(True) + + import Part + subname = Part.splitSubname(subname)[-1] + + FreeCADGui.Selection.pushSelStack() + FreeCADGui.Selection.clearSelection() + FreeCADGui.Selection.addSelection(obj,subname) + FreeCADGui.Selection.pushSelStack() + FreeCADGui.runCommand('Std_TreeSelection') + + @classmethod + def IsActive(cls): + from .assembly import isTypeOf, AsmElement, AsmElementLink + sels = FreeCADGui.Selection.getSelectionEx('',0,True) + if len(sels)==1 and sels[0].SubElementNames: + obj = sels[0].Object.getSubObject(sels[0].SubElementNames[0],1) + if isTypeOf(obj, (AsmElementLink,AsmElement)): + return True + return FreeCADGui.isCommandActive('Std_LinkSelectFinal') class AsmCmdUp(AsmCmdBase): _id = 6 diff --git a/init_gui.py b/init_gui.py index 3abc673..67dc9ff 100644 --- a/init_gui.py +++ b/init_gui.py @@ -38,7 +38,8 @@ class Assembly3Workbench(FreeCADGui.Workbench): cmd.workbenchDeactivated() def Initialize(self): - from .gui import AsmCmdManager,AsmCmdGotoRelation,AsmCmdGotoLinked + from .gui import AsmCmdManager,AsmCmdGotoRelation,\ + AsmCmdGotoLinked, AsmCmdGotoLinkedFinal AsmCmdManager.init() cmdSet = set() for name,cmds in AsmCmdManager.Toolbars.items(): @@ -46,7 +47,7 @@ class Assembly3Workbench(FreeCADGui.Workbench): self.appendToolbar(name,[cmd.getName() for cmd in cmds]) self.appendToolbar('Assembly3 Navigation', ["Std_SelBack", "Std_SelForward",AsmCmdGotoRelation.getName(), - AsmCmdGotoLinked.getName(), "Std_LinkSelectLinkedFinal", + AsmCmdGotoLinked.getName(), AsmCmdGotoLinkedFinal.getName(), "Std_LinkSelectAllLinks","Std_TreeSelectAllInstances"]) for name,cmds in AsmCmdManager.Menus.items(): cmdSet.update(cmds)