mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-15 02:37:49 -06:00
Fix error message when slicing with per-object setting errors
The message was generating a list of settings that had an error state by going through all extruder stacks and the global stack, but didn't bother to check the per-object stacks. I could've added it to the regular message but then the user would be confused because he can't find any errors either. So instead I opted to specify that it happened in per-model settings. It's not perfect, but should narrow down the user's search considerably. Fixes #2427.
This commit is contained in:
parent
f484467f86
commit
6d2bcd9b3e
2 changed files with 22 additions and 1 deletions
|
@ -301,6 +301,26 @@ class CuraEngineBackend(QObject, Backend):
|
||||||
self.backendStateChange.emit(BackendState.NotStarted)
|
self.backendStateChange.emit(BackendState.NotStarted)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
elif job.getResult() == StartSliceJob.StartJobResult.ObjectSettingError:
|
||||||
|
errors = {}
|
||||||
|
for node in DepthFirstIterator(Application.getInstance().getController().getScene().getRoot()):
|
||||||
|
stack = node.callDecoration("getStack")
|
||||||
|
if not stack:
|
||||||
|
continue
|
||||||
|
for key in stack.getErrorKeys():
|
||||||
|
definition = self._global_container_stack.getBottom().findDefinitions(key = key)
|
||||||
|
if not definition:
|
||||||
|
Logger.log("e", "When checking settings for errors, unable to find definition for key {key} in per-object stack.".format(key = key))
|
||||||
|
continue
|
||||||
|
definition = definition[0]
|
||||||
|
errors[key] = definition.label
|
||||||
|
error_labels = ", ".join(errors.values())
|
||||||
|
self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}").format(error_labels = error_labels),
|
||||||
|
title = catalog.i18nc("@info:title", "Unable to slice"))
|
||||||
|
self._error_message.show()
|
||||||
|
self.backendStateChange.emit(BackendState.Error)
|
||||||
|
return
|
||||||
|
|
||||||
if job.getResult() == StartSliceJob.StartJobResult.BuildPlateError:
|
if job.getResult() == StartSliceJob.StartJobResult.BuildPlateError:
|
||||||
if Application.getInstance().platformActivity:
|
if Application.getInstance().platformActivity:
|
||||||
self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because the prime tower or prime position(s) are invalid."),
|
self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because the prime tower or prime position(s) are invalid."),
|
||||||
|
|
|
@ -26,6 +26,7 @@ class StartJobResult(IntEnum):
|
||||||
NothingToSlice = 4
|
NothingToSlice = 4
|
||||||
MaterialIncompatible = 5
|
MaterialIncompatible = 5
|
||||||
BuildPlateError = 6
|
BuildPlateError = 6
|
||||||
|
ObjectSettingError = 7 #When an error occurs in per-object settings.
|
||||||
|
|
||||||
|
|
||||||
## Formatter class that handles token expansion in start/end gcod
|
## Formatter class that handles token expansion in start/end gcod
|
||||||
|
@ -105,7 +106,7 @@ class StartSliceJob(Job):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if self._checkStackForErrors(node.callDecoration("getStack")):
|
if self._checkStackForErrors(node.callDecoration("getStack")):
|
||||||
self.setResult(StartJobResult.SettingError)
|
self.setResult(StartJobResult.ObjectSettingError)
|
||||||
return
|
return
|
||||||
|
|
||||||
with self._scene.getSceneLock():
|
with self._scene.getSceneLock():
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue