mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-12 09:17:50 -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.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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue