diff --git a/gui.py b/gui.py index caf3504..c05a325 100644 --- a/gui.py +++ b/gui.py @@ -241,10 +241,14 @@ class AsmCmdBase(with_metaclass(AsmCmdManager, object)): def checkActive(cls): cls._active = True + @classmethod + def getIconName(cls): + return addIconToFCAD(cls._iconName) + @classmethod def GetResources(cls): ret = { - 'Pixmap':addIconToFCAD(cls._iconName), + 'Pixmap':cls.getIconName(), 'MenuText':cls.getMenuText(), 'ToolTip':cls.getToolTip() } @@ -632,6 +636,51 @@ class AsmCmdGotoRelation(AsmCmdBase): def onSelectionChange(cls,hasSelection): cls._active = None if hasSelection else False +class AsmCmdGotoLinked(AsmCmdBase): + _id = 20 + _menuText = 'Select linked object' + _tooltip = 'Select the linked object' + _accel = 'A, G' + _toolbarName = '' + + @classmethod + def getIconName(cls): + return 'LinkSelect' + + @classmethod + def Activated(cls): + from .assembly import isTypeOf, AsmElement, AsmElementLink + sels = FreeCADGui.Selection.getSelectionEx('',0,True) + if not sels: + return + subname = sels[0].SubElementNames[0] + obj = sels[0].Object.getSubObject(subname,retType=1) + if not isTypeOf(obj,AsmElementLink) and not isTypeOf(obj,AsmElement): + FreeCADGui.runCommand('Std_LinkSelectLinked') + return + import Part + subname = Part.splitSubname(subname)[0].split('.') + if isTypeOf(obj,AsmElementLink): + subname = subname[:-4] + else: + subname = subname[:-3] + link,linkSub = obj.LinkedObject + subname.append(link.Name) + subname = '.'.join(subname+linkSub.split('.')) + sobj = sels[0].Object.getSubObject(subname,retType=1) + if not sobj: + logger.error('Cannot find sub object {}.{}'.format( + objName(sels[0].Object),subname)) + return + FreeCADGui.Selection.pushSelStack() + FreeCADGui.Selection.clearSelection() + FreeCADGui.Selection.addSelection(sels[0].Object,subname) + FreeCADGui.Selection.pushSelStack() + + @classmethod + def IsActive(cls): + return FreeCADGui.isCommandActive('Std_LinkSelectLinked') + class AsmCmdUp(AsmCmdBase): _id = 6 diff --git a/init_gui.py b/init_gui.py index 16f325d..8d75e5b 100644 --- a/init_gui.py +++ b/init_gui.py @@ -38,7 +38,7 @@ class Assembly3Workbench(FreeCADGui.Workbench): def Initialize(self): from .mover import AsmDocumentObserver - from .gui import AsmCmdManager,AsmCmdGotoRelation + from .gui import AsmCmdManager,AsmCmdGotoRelation,AsmCmdGotoLinked AsmCmdManager.init() cmdSet = set() for name,cmds in AsmCmdManager.Toolbars.items(): @@ -46,7 +46,7 @@ class Assembly3Workbench(FreeCADGui.Workbench): self.appendToolbar(name,[cmd.getName() for cmd in cmds]) self.appendToolbar('Assembly3 Navigation', ["Std_SelBack", "Std_SelForward",AsmCmdGotoRelation.getName(), - "Std_LinkSelectLinked", "Std_LinkSelectLinkedFinal", + AsmCmdGotoLinked.getName(), "Std_LinkSelectLinkedFinal", "Std_LinkSelectAllLinks","Std_TreeSelectAllInstances"]) for name,cmds in AsmCmdManager.Menus.items(): cmdSet.update(cmds)