gui: add AsmCmdGotoLinked command

For special handling of Element and ElementLink
This commit is contained in:
Zheng, Lei 2018-09-16 13:51:30 +08:00
parent 1b9c948f0e
commit ce930261d8
2 changed files with 52 additions and 3 deletions

51
gui.py
View File

@ -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

View File

@ -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)