mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-11 08:47:50 -06:00
Fixed last bugs in manual slicing. CURA-3214
This commit is contained in:
parent
e6e5d7862e
commit
18318348b6
2 changed files with 23 additions and 18 deletions
|
@ -100,6 +100,7 @@ class CuraEngineBackend(QObject, Backend):
|
||||||
self._always_restart = True # Always restart the engine when starting a new slice. Don't keep the process running. TODO: Fix engine statelessness.
|
self._always_restart = True # Always restart the engine when starting a new slice. Don't keep the process running. TODO: Fix engine statelessness.
|
||||||
self._process_layers_job = None # The currently active job to process layers, or None if it is not processing layers.
|
self._process_layers_job = None # The currently active job to process layers, or None if it is not processing layers.
|
||||||
self._need_slicing = False
|
self._need_slicing = False
|
||||||
|
self._engine_is_fresh = True # Is the newly started engine used before or not?
|
||||||
|
|
||||||
self._backend_log_max_lines = 20000 # Maximum number of lines to buffer
|
self._backend_log_max_lines = 20000 # Maximum number of lines to buffer
|
||||||
self._error_message = None # Pop-up message that shows errors.
|
self._error_message = None # Pop-up message that shows errors.
|
||||||
|
@ -116,7 +117,12 @@ class CuraEngineBackend(QObject, Backend):
|
||||||
Preferences.getInstance().addPreference("general/auto_slice", True)
|
Preferences.getInstance().addPreference("general/auto_slice", True)
|
||||||
|
|
||||||
self._use_timer = False
|
self._use_timer = False
|
||||||
self._change_timer = None
|
# When you update a setting and other settings get changed through inheritance, many propertyChanged signals are fired.
|
||||||
|
# This timer will group them up, and only slice for the last setting changed signal.
|
||||||
|
# TODO: Properly group propertyChanged signals by whether they are triggered by the same user interaction.
|
||||||
|
self._change_timer = QTimer()
|
||||||
|
self._change_timer.setSingleShot(True)
|
||||||
|
self._change_timer.setInterval(500)
|
||||||
self.determineAutoSlicing()
|
self.determineAutoSlicing()
|
||||||
Preferences.getInstance().preferenceChanged.connect(self._onPreferencesChanged)
|
Preferences.getInstance().preferenceChanged.connect(self._onPreferencesChanged)
|
||||||
|
|
||||||
|
@ -171,10 +177,11 @@ class CuraEngineBackend(QObject, Backend):
|
||||||
|
|
||||||
## Perform a slice of the scene.
|
## Perform a slice of the scene.
|
||||||
def slice(self):
|
def slice(self):
|
||||||
Logger.log("d", "Starting slice job...")
|
|
||||||
self._slice_start_time = time()
|
self._slice_start_time = time()
|
||||||
if not self._need_slicing:
|
if not self._need_slicing:
|
||||||
Logger.log("w", "Do not need to slice, optimizable or programming error.")
|
self.processingProgress.emit(1.0)
|
||||||
|
self.backendStateChange.emit(BackendState.Done)
|
||||||
|
Logger.log("w", "Do not need to slice.")
|
||||||
return
|
return
|
||||||
|
|
||||||
self.printDurationMessage.emit(0, [0])
|
self.printDurationMessage.emit(0, [0])
|
||||||
|
@ -186,6 +193,7 @@ class CuraEngineBackend(QObject, Backend):
|
||||||
Logger.log("d", "Creating socket and start the engine...")
|
Logger.log("d", "Creating socket and start the engine...")
|
||||||
self._createSocket()
|
self._createSocket()
|
||||||
self.stopSlicing()
|
self.stopSlicing()
|
||||||
|
self._engine_is_fresh = False # Yes we're going to use the engine
|
||||||
|
|
||||||
self.processingProgress.emit(0.0)
|
self.processingProgress.emit(0.0)
|
||||||
self.backendStateChange.emit(BackendState.NotStarted)
|
self.backendStateChange.emit(BackendState.NotStarted)
|
||||||
|
@ -372,7 +380,6 @@ class CuraEngineBackend(QObject, Backend):
|
||||||
Logger.log("w", "A socket error caused the connection to be reset")
|
Logger.log("w", "A socket error caused the connection to be reset")
|
||||||
|
|
||||||
## Remove old layer data (if any)
|
## Remove old layer data (if any)
|
||||||
## TODO: now copied from ProcessSlicedLayersJob. Find my a home.
|
|
||||||
def _clearLayerData(self):
|
def _clearLayerData(self):
|
||||||
for node in DepthFirstIterator(self._scene.getRoot()):
|
for node in DepthFirstIterator(self._scene.getRoot()):
|
||||||
if node.callDecoration("getLayerData"):
|
if node.callDecoration("getLayerData"):
|
||||||
|
@ -458,6 +465,7 @@ class CuraEngineBackend(QObject, Backend):
|
||||||
## Creates a new socket connection.
|
## Creates a new socket connection.
|
||||||
def _createSocket(self):
|
def _createSocket(self):
|
||||||
super()._createSocket(os.path.abspath(os.path.join(PluginRegistry.getInstance().getPluginPath(self.getPluginId()), "Cura.proto")))
|
super()._createSocket(os.path.abspath(os.path.join(PluginRegistry.getInstance().getPluginPath(self.getPluginId()), "Cura.proto")))
|
||||||
|
self._engine_is_fresh = True
|
||||||
|
|
||||||
## Called when anything has changed to the stuff that needs to be sliced.
|
## Called when anything has changed to the stuff that needs to be sliced.
|
||||||
#
|
#
|
||||||
|
@ -482,6 +490,10 @@ class CuraEngineBackend(QObject, Backend):
|
||||||
def _onToolOperationStarted(self, tool):
|
def _onToolOperationStarted(self, tool):
|
||||||
self._tool_active = True # Do not react on scene change
|
self._tool_active = True # Do not react on scene change
|
||||||
self.disableTimer()
|
self.disableTimer()
|
||||||
|
# Restart engine as soon as possible, we know we want to slice afterwards
|
||||||
|
if not self._engine_is_fresh:
|
||||||
|
self._terminate()
|
||||||
|
self._createSocket()
|
||||||
|
|
||||||
## Called when the user stops using some tool.
|
## Called when the user stops using some tool.
|
||||||
#
|
#
|
||||||
|
@ -558,23 +570,16 @@ class CuraEngineBackend(QObject, Backend):
|
||||||
self._process_layers_job = None
|
self._process_layers_job = None
|
||||||
|
|
||||||
def enableTimer(self):
|
def enableTimer(self):
|
||||||
self.disableTimer() # disable any existing timer
|
if not self._use_timer:
|
||||||
self._use_timer = True
|
|
||||||
# When you update a setting and other settings get changed through inheritance, many propertyChanged signals are fired.
|
|
||||||
# This timer will group them up, and only slice for the last setting changed signal.
|
|
||||||
# TODO: Properly group propertyChanged signals by whether they are triggered by the same user interaction.
|
|
||||||
self._change_timer = QTimer()
|
|
||||||
self._change_timer.setInterval(500)
|
|
||||||
self._change_timer.setSingleShot(True)
|
|
||||||
self._change_timer.timeout.connect(self.slice)
|
self._change_timer.timeout.connect(self.slice)
|
||||||
|
self._use_timer = True
|
||||||
|
|
||||||
## Disable timer.
|
## Disable timer.
|
||||||
# This means that slicing will not be triggered automatically
|
# This means that slicing will not be triggered automatically
|
||||||
def disableTimer(self):
|
def disableTimer(self):
|
||||||
if self._change_timer is not None:
|
if self._use_timer:
|
||||||
self._change_timer.timeout.disconnect()
|
|
||||||
self._change_timer = None
|
|
||||||
self._use_timer = False
|
self._use_timer = False
|
||||||
|
self._change_timer.timeout.disconnect(self.slice)
|
||||||
|
|
||||||
def _onPreferencesChanged(self, preference):
|
def _onPreferencesChanged(self, preference):
|
||||||
if preference != "general/auto_slice":
|
if preference != "general/auto_slice":
|
||||||
|
|
|
@ -14,6 +14,7 @@ Item {
|
||||||
|
|
||||||
property real progress: UM.Backend.progress;
|
property real progress: UM.Backend.progress;
|
||||||
property int backendState: UM.Backend.state;
|
property int backendState: UM.Backend.state;
|
||||||
|
property var backend: CuraApplication.getBackend();
|
||||||
property bool activity: Printer.getPlatformActivity;
|
property bool activity: Printer.getPlatformActivity;
|
||||||
property int totalHeight: childrenRect.height + UM.Theme.getSize("default_margin").height
|
property int totalHeight: childrenRect.height + UM.Theme.getSize("default_margin").height
|
||||||
property string fileBaseName
|
property string fileBaseName
|
||||||
|
@ -133,7 +134,6 @@ Item {
|
||||||
text: [1, 5].indexOf(UM.Backend.state) != -1 ? catalog.i18nc("@label:Printjob", "Prepare") : catalog.i18nc("@label:Printjob", "Cancel")
|
text: [1, 5].indexOf(UM.Backend.state) != -1 ? catalog.i18nc("@label:Printjob", "Prepare") : catalog.i18nc("@label:Printjob", "Cancel")
|
||||||
onClicked:
|
onClicked:
|
||||||
{
|
{
|
||||||
var backend = CuraApplication.getBackend()
|
|
||||||
if ([1, 5].indexOf(UM.Backend.state) != -1) {
|
if ([1, 5].indexOf(UM.Backend.state) != -1) {
|
||||||
backend.forceSlice();
|
backend.forceSlice();
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue