Browse Source

Slicing no longer occurs when a perObject setting is in error state

CURA-1288
Jaime van Kessel 8 years ago
parent
commit
c994cb6bef

+ 17 - 2
plugins/CuraEngineBackend/StartSliceJob.py

@@ -3,7 +3,6 @@
 
 import numpy
 from string import Formatter
-import traceback
 from enum import IntEnum
 
 from UM.Job import Job
@@ -59,7 +58,7 @@ class StartSliceJob(Job):
             self.setResult(StartJobResult.Error)
             return
 
-        #Don't slice if there is a setting with an error value.
+        # Don't slice if there is a setting with an error value.
         for key in stack.getAllKeys():
             validation_state = stack.getProperty(key, "validationState")
             if validation_state in (ValidatorState.Exception, ValidatorState.MaximumError, ValidatorState.MinimumError):
@@ -69,6 +68,22 @@ class StartSliceJob(Job):
 
             Job.yieldThread()
 
+        # Don't slice if there is a per object setting with an error value.
+        for node in DepthFirstIterator(self._scene.getRoot()):
+            if type(node) is not SceneNode or not node.isSelectable():
+                continue
+
+            node_stack = node.callDecoration("getStack")
+            if node_stack:
+                for key in node_stack.getAllKeys():
+                    validation_state = node_stack.getProperty(key, "validationState")
+                    if validation_state in (ValidatorState.Exception, ValidatorState.MaximumError, ValidatorState.MinimumError):
+                        Logger.log("w", "Per object setting %s is not valid, but %s. Aborting slicing.", key, validation_state)
+                        self.setResult(StartJobResult.SettingError)
+                        return
+
+                    Job.yieldThread()
+
         with self._scene.getSceneLock():
             # Remove old layer data.
             for node in DepthFirstIterator(self._scene.getRoot()):

+ 0 - 1
plugins/PerObjectSettingsTool/PerObjectSettingsTool.py

@@ -32,7 +32,6 @@ class PerObjectSettingsTool(Tool):
         return selected_object_id
 
     def getContainerID(self):
-
         selected_object = Selection.getSelectedObject(0)
         if selected_object.getParent().callDecoration("isGroup"):
             selected_object = selected_object.getParent()