Browse Source

Removed related commits to Settins per Object validation and
added short validation in StartScliceJob
CURA-4972

Aleksei S 7 years ago
parent
commit
6bb42da056

+ 0 - 10
cura/ObjectsModel.py

@@ -19,8 +19,6 @@ class ObjectsModel(ListModel):
 
         self._build_plate_number = -1
 
-        self._stacks_have_errors = None  # type:Optional[bool]
-
     def setActiveBuildPlate(self, nr):
         self._build_plate_number = nr
         self._update()
@@ -69,11 +67,3 @@ class ObjectsModel(ListModel):
     @staticmethod
     def createObjectsModel():
         return ObjectsModel()
-
-    ##  Check if none of the model's stacks contain error states
-    #   The setting applied for the settings per model
-    def stacksHaveErrors(self) -> bool:
-        return bool(self._stacks_have_errors)
-
-    def setStacksHaveErrors(self, value):
-        self._stacks_have_errors = value

+ 4 - 21
cura/Settings/SettingOverrideDecorator.py

@@ -9,8 +9,7 @@ from UM.Signal import Signal, signalemitter
 from UM.Settings.InstanceContainer import InstanceContainer
 from UM.Settings.ContainerRegistry import ContainerRegistry
 from UM.Logger import Logger
-from UM.Settings.Validator import ValidatorState
-from PyQt5.QtCore import QTimer
+
 from UM.Application import Application
 
 from cura.Settings.PerObjectContainerStack import PerObjectContainerStack
@@ -40,10 +39,6 @@ class SettingOverrideDecorator(SceneNodeDecorator):
         self._extruder_stack = ExtruderManager.getInstance().getExtruderStack(0).getId()
 
         self._is_non_printing_mesh = False
-        self._error_check_timer = QTimer()
-        self._error_check_timer.setInterval(250)
-        self._error_check_timer.setSingleShot(True)
-        self._error_check_timer.timeout.connect(self._checkStackForErrors)
 
         self._stack.propertyChanged.connect(self._onSettingChanged)
 
@@ -99,21 +94,9 @@ class SettingOverrideDecorator(SceneNodeDecorator):
         # Trigger slice/need slicing if the value has changed.
         if property_name == "value":
             self._is_non_printing_mesh = any(bool(self._stack.getProperty(setting, "value")) for setting in self._non_printing_mesh_settings)
-            if not self._is_non_printing_mesh:
-                # self._error_check_timer.start()
-                self._checkStackForErrors()
-        Application.getInstance().getBackend().needsSlicing()
-        Application.getInstance().getBackend().tickle()
-
-    def _checkStackForErrors(self):
-        hasErrors = False;
-        for key in self._stack.getAllKeys():
-            validation_state = self._stack.getProperty(key, "validationState")
-            if validation_state in (ValidatorState.Exception, ValidatorState.MaximumError, ValidatorState.MinimumError):
-                Logger.log("w", "Setting Per Object %s is not valid.", key)
-                hasErrors = True
-                break
-        Application.getInstance().getObjectsModel().setStacksHaveErrors(hasErrors)
+
+            Application.getInstance().getBackend().needsSlicing()
+            Application.getInstance().getBackend().tickle()
 
     ##  Makes sure that the stack upon which the container stack is placed is
     #   kept up to date.

+ 1 - 5
plugins/CuraEngineBackend/StartSliceJob.py

@@ -136,14 +136,10 @@ class StartSliceJob(Job):
                     self.setResult(StartJobResult.MaterialIncompatible)
                     return
 
-        # Validate settings per selectable model
-        if Application.getInstance().getObjectsModel().stacksHaveErrors():
-            self.setResult(StartJobResult.ObjectSettingError)
-            return
 
         # Don't slice if there is a per object setting with an error value.
         for node in DepthFirstIterator(self._scene.getRoot()):
-            if node.isSelectable():
+            if type(node) is not CuraSceneNode or not node.isSelectable():
                 continue
 
             if self._checkStackForErrors(node.callDecoration("getStack")):

+ 1 - 14
plugins/PerObjectSettingsTool/PerObjectItem.qml

@@ -25,20 +25,7 @@ UM.TooltipArea
 
         onClicked:
         {
-            // Important first set visible and then subscribe
-            // otherwise the setting is not yet in list
-            // For unsubscribe is important first remove the subscription and then
-            // set as invisible
-            if(checked)
-            {
-                addedSettingsModel.setVisible(model.key, checked);
-                UM.ActiveTool.triggerActionWithData("subscribeForSettingValidation", model.key)
-            }
-            else
-            {
-                UM.ActiveTool.triggerActionWithData("unsubscribeForSettingValidation", model.key)
-                addedSettingsModel.setVisible(model.key, checked);
-            }
+            addedSettingsModel.setVisible(model.key, checked);
             UM.ActiveTool.forceUpdate();
         }
     }

+ 1 - 4
plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml

@@ -240,10 +240,7 @@ Item {
                             width: Math.round(UM.Theme.getSize("setting").height / 2)
                             height: UM.Theme.getSize("setting").height
 
-                            onClicked: {
-                                addedSettingsModel.setVisible(model.key, false)
-                                UM.ActiveTool.triggerActionWithData("unsubscribeForSettingValidation", model.key)
-                            }
+                            onClicked: addedSettingsModel.setVisible(model.key, false)
 
                             style: ButtonStyle
                             {

+ 0 - 70
plugins/PerObjectSettingsTool/PerObjectSettingsTool.py

@@ -10,10 +10,7 @@ from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator
 from cura.Settings.ExtruderManager import ExtruderManager
 from UM.Settings.SettingInstance import SettingInstance
 from UM.Event import Event
-from UM.Settings.Validator import ValidatorState
-from UM.Logger import Logger
 
-from PyQt5.QtCore import QTimer
 
 ##  This tool allows the user to add & change settings per node in the scene.
 #   The settings per object are kept in a ContainerStack, which is linked to a node by decorator.
@@ -37,12 +34,6 @@ class PerObjectSettingsTool(Tool):
         self._onGlobalContainerChanged()
         Selection.selectionChanged.connect(self._updateEnabled)
 
-        self._scene = Application.getInstance().getController().getScene()
-
-        self._error_check_timer = QTimer()
-        self._error_check_timer.setInterval(250)
-        self._error_check_timer.setSingleShot(True)
-        self._error_check_timer.timeout.connect(self._updateStacksHaveErrors)
 
     def event(self, event):
         super().event(event)
@@ -151,64 +142,3 @@ class PerObjectSettingsTool(Tool):
         else:
             self._single_model_selected = True
         Application.getInstance().getController().toolEnabledChanged.emit(self._plugin_id, self._advanced_mode and self._single_model_selected)
-
-
-    def _onPropertyChanged(self, key: str, property_name: str) -> None:
-        if property_name == "validationState":
-            # self._error_check_timer.start()
-            return
-
-    def _updateStacksHaveErrors(self) -> None:
-        return
-        # self._checkStacksHaveErrors()
-
-
-    def _checkStacksHaveErrors(self):
-
-        for node in DepthFirstIterator(self._scene.getRoot()):
-
-            # valdiate only objects which can be selected because the settings per object
-            # can be applied only for them
-            if not node.isSelectable():
-                continue
-
-            hasErrors = self._checkStackForErrors(node.callDecoration("getStack"))
-            Application.getInstance().getObjectsModel().setStacksHaveErrors(hasErrors)
-
-            #If any of models has an error then no reason check next objects on the build plate
-            if hasErrors:
-                break
-
-
-    def _checkStackForErrors(self, stack):
-        if stack is None:
-            return False
-
-        for key in stack.getAllKeys():
-            validation_state = stack.getProperty(key, "validationState")
-            if validation_state in (ValidatorState.Exception, ValidatorState.MaximumError, ValidatorState.MinimumError):
-                Logger.log("w", "Setting Per Object %s is not valid.", key)
-                return True
-        return False
-
-    def subscribeForSettingValidation(self, setting_name):
-        selected_object = Selection.getSelectedObject(0)
-        stack = selected_object.callDecoration("getStack")  # Don't try to get the active extruder since it may be None anyway.
-        if not stack:
-            return ""
-
-        settings = stack.getTop()
-        setting_instance = settings.getInstance(setting_name)
-        if setting_instance:
-            setting_instance.propertyChanged.connect(self._onPropertyChanged)
-
-    def unsubscribeForSettingValidation(self, setting_name):
-        selected_object = Selection.getSelectedObject(0)
-        stack = selected_object.callDecoration("getStack")  # Don't try to get the active extruder since it may be None anyway.
-        if not stack:
-            return ""
-
-        settings = stack.getTop()
-        setting_instance = settings.getInstance(setting_name)
-        if setting_instance:
-            setting_instance.propertyChanged.disconnect(self._onPropertyChanged)