Enable killing and restarting the engine when we get a change and are busy slicing

This commit is contained in:
Arjen Hiemstra 2015-03-13 13:51:42 +01:00
parent 17316edfef
commit 25d347691d

View file

@ -4,6 +4,7 @@ from UM.Scene.SceneNode import SceneNode
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.Preferences import Preferences
from UM.Math.Vector import Vector
from UM.Signal import Signal
from . import Cura_pb2
from . import ProcessSlicedObjectListJob
@ -37,9 +38,17 @@ class CuraEngineBackend(Backend):
self._slice_interval = 0.5
self._slicing = False
self._restart = False
self.changeTimerFinished.connect(self._onChangeTimerFinished)
self.backendConnected.connect(self._onBackendConnected)
def getEngineCommand(self):
return [Preferences.getInstance().getValue("backend/location"), '--connect', "127.0.0.1:{0}".format(self._port)]
changeTimerFinished = Signal()
def _onSceneChanged(self, source):
if (type(source) is not SceneNode) or (source is self._scene.getRoot()):
return
@ -63,6 +72,8 @@ class CuraEngineBackend(Backend):
job.start()
def _onProgressMessage(self, message):
if message.amount >= 0.99:
self._slicing = False
self.processingProgress.emit(message.amount)
def _onGCodeMessage(self, message):
@ -89,10 +100,16 @@ class CuraEngineBackend(Backend):
if self._changeTimer:
self._changeTimer.cancel()
self._changeTimer = threading.Timer(self._slice_interval, self._onChangeTimerFinished)
self._changeTimer = threading.Timer(self._slice_interval, lambda: self.changeTimerFinished.emit())
self._changeTimer.start()
def _onChangeTimerFinished(self):
if self._slicing:
self._slicing = False
self._restart = True
self._process.terminate()
return
objects = []
for node in DepthFirstIterator(self._scene.getRoot()):
if type(node) is SceneNode and node.getMeshData():
@ -102,6 +119,8 @@ class CuraEngineBackend(Backend):
self._changeTimer = None
return #No point in slicing an empty build plate
self._slicing = True
self._sendSettings()
self._scene.acquireLock()
@ -302,3 +321,8 @@ class CuraEngineBackend(Backend):
s.value = str(value).encode('utf-8')
self._socket.sendMessage(msg)
def _onBackendConnected(self):
if self._restart:
self._onChanged()
self._restart = False