mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-12 17:27:51 -06:00
Enable killing and restarting the engine when we get a change and are busy slicing
This commit is contained in:
parent
17316edfef
commit
25d347691d
1 changed files with 25 additions and 1 deletions
|
@ -4,6 +4,7 @@ from UM.Scene.SceneNode import SceneNode
|
||||||
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
|
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
|
||||||
from UM.Preferences import Preferences
|
from UM.Preferences import Preferences
|
||||||
from UM.Math.Vector import Vector
|
from UM.Math.Vector import Vector
|
||||||
|
from UM.Signal import Signal
|
||||||
|
|
||||||
from . import Cura_pb2
|
from . import Cura_pb2
|
||||||
from . import ProcessSlicedObjectListJob
|
from . import ProcessSlicedObjectListJob
|
||||||
|
@ -37,9 +38,17 @@ class CuraEngineBackend(Backend):
|
||||||
|
|
||||||
self._slice_interval = 0.5
|
self._slice_interval = 0.5
|
||||||
|
|
||||||
|
self._slicing = False
|
||||||
|
self._restart = False
|
||||||
|
|
||||||
|
self.changeTimerFinished.connect(self._onChangeTimerFinished)
|
||||||
|
self.backendConnected.connect(self._onBackendConnected)
|
||||||
|
|
||||||
def getEngineCommand(self):
|
def getEngineCommand(self):
|
||||||
return [Preferences.getInstance().getValue("backend/location"), '--connect', "127.0.0.1:{0}".format(self._port)]
|
return [Preferences.getInstance().getValue("backend/location"), '--connect', "127.0.0.1:{0}".format(self._port)]
|
||||||
|
|
||||||
|
changeTimerFinished = Signal()
|
||||||
|
|
||||||
def _onSceneChanged(self, source):
|
def _onSceneChanged(self, source):
|
||||||
if (type(source) is not SceneNode) or (source is self._scene.getRoot()):
|
if (type(source) is not SceneNode) or (source is self._scene.getRoot()):
|
||||||
return
|
return
|
||||||
|
@ -63,6 +72,8 @@ class CuraEngineBackend(Backend):
|
||||||
job.start()
|
job.start()
|
||||||
|
|
||||||
def _onProgressMessage(self, message):
|
def _onProgressMessage(self, message):
|
||||||
|
if message.amount >= 0.99:
|
||||||
|
self._slicing = False
|
||||||
self.processingProgress.emit(message.amount)
|
self.processingProgress.emit(message.amount)
|
||||||
|
|
||||||
def _onGCodeMessage(self, message):
|
def _onGCodeMessage(self, message):
|
||||||
|
@ -89,10 +100,16 @@ class CuraEngineBackend(Backend):
|
||||||
if self._changeTimer:
|
if self._changeTimer:
|
||||||
self._changeTimer.cancel()
|
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()
|
self._changeTimer.start()
|
||||||
|
|
||||||
def _onChangeTimerFinished(self):
|
def _onChangeTimerFinished(self):
|
||||||
|
if self._slicing:
|
||||||
|
self._slicing = False
|
||||||
|
self._restart = True
|
||||||
|
self._process.terminate()
|
||||||
|
return
|
||||||
|
|
||||||
objects = []
|
objects = []
|
||||||
for node in DepthFirstIterator(self._scene.getRoot()):
|
for node in DepthFirstIterator(self._scene.getRoot()):
|
||||||
if type(node) is SceneNode and node.getMeshData():
|
if type(node) is SceneNode and node.getMeshData():
|
||||||
|
@ -102,6 +119,8 @@ class CuraEngineBackend(Backend):
|
||||||
self._changeTimer = None
|
self._changeTimer = None
|
||||||
return #No point in slicing an empty build plate
|
return #No point in slicing an empty build plate
|
||||||
|
|
||||||
|
self._slicing = True
|
||||||
|
|
||||||
self._sendSettings()
|
self._sendSettings()
|
||||||
|
|
||||||
self._scene.acquireLock()
|
self._scene.acquireLock()
|
||||||
|
@ -302,3 +321,8 @@ class CuraEngineBackend(Backend):
|
||||||
s.value = str(value).encode('utf-8')
|
s.value = str(value).encode('utf-8')
|
||||||
|
|
||||||
self._socket.sendMessage(msg)
|
self._socket.sendMessage(msg)
|
||||||
|
|
||||||
|
def _onBackendConnected(self):
|
||||||
|
if self._restart:
|
||||||
|
self._onChanged()
|
||||||
|
self._restart = False
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue