assembly: enable auto solve on active transaction

This commit is contained in:
Zheng, Lei 2018-07-03 17:37:37 +08:00
parent 5c35ad78f0
commit fba1254627

View File

@ -1448,22 +1448,24 @@ class Assembly(AsmGroup):
if not cls.canAutoSolve(): if not cls.canAutoSolve():
return return
ret = FreeCAD.getActiveTransaction() ret = FreeCAD.getActiveTransaction()
if ret: # if ret:
logger.debug('skip auto solve because of active transaction ' # logger.debug('skip auto solve because of active transaction '
'{}'.format(ret)) # '{}'.format(ret))
return # return
from . import solver from . import solver
if not ret:
FreeCAD.setActiveTransaction('Assembly auto recompute') FreeCAD.setActiveTransaction('Assembly auto recompute')
logger.catch('solver exception when auto recompute', logger.catch('solver exception when auto recompute',
solver.solve, FreeCAD.ActiveDocument.Objects, True) solver.solve, FreeCAD.ActiveDocument.Objects, True)
if not ret:
FreeCAD.closeActiveTransaction() FreeCAD.closeActiveTransaction()
def onSolverChanged(self,setup=False): def onSolverChanged(self):
for obj in self.getConstraintGroup().Group: for obj in self.getConstraintGroup().Group:
# setup==True usually means we are restoring, so try to restore the # setup==True usually means we are restoring, so try to restore the
# non-touched state if possible, since recompute() below will touch # non-touched state if possible, since recompute() below will touch
# the constraint object # the constraint object
touched = not setup or 'Touched' in obj.State touched = 'Touched' in obj.State
obj.recompute() obj.recompute()
if not touched: if not touched:
obj.purgeTouched() obj.purgeTouched()
@ -1532,8 +1534,6 @@ class Assembly(AsmGroup):
# correct rendering and picking behavior # correct rendering and picking behavior
self.getPartGroup(True) self.getPartGroup(True)
self.onSolverChanged(True)
def onChanged(self, obj, prop): def onChanged(self, obj, prop):
if prop == 'BuildShape': if prop == 'BuildShape':
if not obj.BuildShape or obj.BuildShape == BuildShapeCompound: if not obj.BuildShape or obj.BuildShape == BuildShapeCompound: