From 7c2ebac386b8b6fa4d84af0c6254ca820e603037 Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Mon, 4 Dec 2017 21:01:40 +0800 Subject: [PATCH] assembly: auto recompute on undo/redo while dragging --- InitGui.py | 5 +++++ assembly.py | 15 +++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/InitGui.py b/InitGui.py index 5ee0450..3c9f91a 100644 --- a/InitGui.py +++ b/InitGui.py @@ -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') diff --git a/assembly.py b/assembly.py index aa725c9..3a930d9 100644 --- a/assembly.py +++ b/assembly.py @@ -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):