76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
import FreeCAD, FreeCADGui
|
|
|
|
from .utils import mainlogger as logger
|
|
try:
|
|
from . import sys_slvs
|
|
except ImportError as e:
|
|
logger.debug('failed to import slvs: {}'.format(e))
|
|
try:
|
|
from . import sys_sympy
|
|
except ImportError as e:
|
|
logger.debug('failed to import sympy: {}'.format(e))
|
|
import sys
|
|
if not 'freecad.asm3.sys_slvs' in sys.modules:
|
|
logger.warn('no solver backend found')
|
|
|
|
class Assembly3Workbench(FreeCADGui.Workbench):
|
|
from . import utils
|
|
MenuText = 'Assembly 3'
|
|
Icon = utils.addIconToFCAD('AssemblyWorkbench.svg')
|
|
|
|
from .gui import SelectionObserver
|
|
_observer = SelectionObserver()
|
|
|
|
from .mover import AsmDocumentObserver
|
|
_DocObserver = AsmDocumentObserver()
|
|
|
|
def __init__(self):
|
|
pass
|
|
|
|
def Activated(self):
|
|
from .gui import AsmCmdManager
|
|
AsmCmdManager.WorkbenchActivated = True
|
|
for cmd in AsmCmdManager.getInfo().Types:
|
|
cmd.workbenchActivated()
|
|
|
|
def Deactivated(self):
|
|
from .gui import AsmCmdManager
|
|
AsmCmdManager.WorkbenchActivated = False
|
|
for cmd in AsmCmdManager.getInfo().Types:
|
|
cmd.workbenchDeactivated()
|
|
|
|
def Initialize(self):
|
|
from .gui import AsmCmdManager,AsmCmdGotoRelation,\
|
|
AsmCmdGotoLinked, AsmCmdGotoLinkedFinal
|
|
AsmCmdManager.init()
|
|
cmdSet = set()
|
|
for name,cmds in AsmCmdManager.Toolbars.items():
|
|
cmdSet.update(cmds)
|
|
self.appendToolbar(name,[cmd.getName() for cmd in cmds])
|
|
self.appendToolbar('Assembly3 Navigation', ["Std_SelBack",
|
|
"Std_SelForward",AsmCmdGotoRelation.getName(),
|
|
AsmCmdGotoLinked.getName(), AsmCmdGotoLinkedFinal.getName(),
|
|
"Std_LinkSelectAllLinks","Std_TreeSelectAllInstances"])
|
|
for name,cmds in AsmCmdManager.Menus.items():
|
|
cmdSet.update(cmds)
|
|
self.appendMenu(name,[cmd.getName() for cmd in cmds])
|
|
self._observer.setCommands(cmdSet)
|
|
# FreeCADGui.addPreferencePage(
|
|
# ':/assembly3/ui/assembly3_prefs.ui','Assembly3')
|
|
|
|
def _contextMenu(self):
|
|
from .gui import AsmCmdManager
|
|
from collections import OrderedDict
|
|
menus = OrderedDict()
|
|
for cmd in AsmCmdManager.getInfo().Types:
|
|
name = cmd.getContextMenuName()
|
|
if name:
|
|
menus.setdefault(name,[]).append(cmd.getName())
|
|
for name,cmds in menus.items():
|
|
self.appendContextMenu(name,cmds)
|
|
|
|
def ContextMenu(self, _recipient):
|
|
logger.catch('',self._contextMenu)
|
|
|
|
FreeCADGui.addWorkbench(Assembly3Workbench)
|