From c6fa2c09313623ecda2a75a1cd2d289092bdb8a6 Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Wed, 15 Aug 2018 10:58:30 +0800 Subject: [PATCH] assembly: reduce auto recompute transaction --- assembly.py | 13 ++++++++++--- slvs | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/assembly.py b/assembly.py index 3432c75..d5b6e6e 100644 --- a/assembly.py +++ b/assembly.py @@ -2310,6 +2310,7 @@ BuildShapeNames = (BuildShapeNone,BuildShapeCompound, class Assembly(AsmGroup): _Timer = QtCore.QTimer() + _TransID = 0 _PartMap = {} # maps part to assembly _PartArrayMap = {} # maps array part to assembly _ScheduleTimer = QtCore.QTimer() @@ -2420,6 +2421,7 @@ class Assembly(AsmGroup): if not cls._Timer.isSingleShot(): cls._Timer.setSingleShot(True) cls._Timer.timeout.connect(Assembly.onSolverTimer) + cls._TransID = FreeCAD.getActiveTransaction() logger.debug('auto solve scheduled on change of {}.{}'.format( objName(obj),prop),frame=1) cls._Timer.start(300) @@ -2434,12 +2436,17 @@ class Assembly(AsmGroup): if not cls.canAutoSolve(): return from . import solver - FreeCAD.setActiveTransaction('Assembly auto recompute') + trans = cls._TransID and cls._TransID==FreeCAD.getActiveTransaction() + if not trans: + cls._TransID = 0 + FreeCAD.setActiveTransaction('Assembly auto recompute') if not logger.catch('solver exception when auto recompute', solver.solve, FreeCAD.ActiveDocument.Objects, True): - FreeCAD.closeActiveTransaction(True) + if not trans: + FreeCAD.closeActiveTransaction(True) else: - FreeCAD.closeActiveTransaction() + if not trans: + FreeCAD.closeActiveTransaction() @classmethod def scheduleDelete(cls,doc,names): diff --git a/slvs b/slvs index 5794991..8b66606 160000 --- a/slvs +++ b/slvs @@ -1 +1 @@ -Subproject commit 5794991d662c8b4321b20ac7fd289cfe06f3ad42 +Subproject commit 8b66606ef0d30e3dc9038fa79bc8f1d46f96fed5