assembly: auto recompute on undo/redo while dragging

This commit is contained in:
Zheng, Lei 2017-12-04 21:01:40 +08:00
parent eb06ef8fbd
commit 7c2ebac386
2 changed files with 20 additions and 0 deletions

View File

@ -7,20 +7,24 @@ class Assembly3Workbench(FreeCADGui.Workbench):
def __init__(self):
self.observer = None
self.docObserver = None
def Activated(self):
self.observer.attach()
FreeCAD.addDocumentObserver(self.docObserver)
from asm3.gui import AsmCmdManager
for cmd in AsmCmdManager.getInfo().Types:
cmd.workbenchActivated()
def Deactivated(self):
self.observer.detach()
FreeCAD.removeDocumentObserver(self.docObserver)
from asm3.gui import AsmCmdManager
for cmd in AsmCmdManager.getInfo().Types:
cmd.workbenchDeactivated()
def Initialize(self):
from asm3.assembly import AsmDocumentObserver
from asm3.gui import AsmCmdManager,SelectionObserver
cmdSet = set()
for name,cmds in AsmCmdManager.Toolbars.items():
@ -30,6 +34,7 @@ class Assembly3Workbench(FreeCADGui.Workbench):
cmdSet.update(cmds)
self.appendMenu(name,[cmd.getName() for cmd in cmds])
self.observer = SelectionObserver(cmdSet)
self.docObserver = AsmDocumentObserver()
# FreeCADGui.addPreferencePage(
# ':/assembly3/ui/assembly3_prefs.ui','Assembly3')

View File

@ -1665,6 +1665,21 @@ def movePart(useCenterballDragger=None):
vobj.Proxy._movingPart = AsmMovingPart(*ret)
return doc.setEdit(vobj,1)
class AsmDocumentObserver:
def checkMovingPart(self):
doc = FreeCADGui.editDocument()
if not doc:
return
vobj = doc.getInEdit()
if vobj and isTypeOf(vobj.Object,Assembly):
vobj.Object.recompute(True)
def slotUndoDocument(self,_doc):
self.checkMovingPart()
def slotRedoDocument(self,_doc):
self.checkMovingPart()
class ViewProviderAssembly(ViewProviderAsmGroup):
def __init__(self,vobj):