Browse Source

Merge branch '3.2' of github.com:Ultimaker/Cura into 3.2

Mark 7 years ago
parent
commit
74e9bf051c

+ 16 - 4
plugins/3MFReader/ThreeMFWorkspaceReader.py

@@ -24,6 +24,7 @@ from cura.Settings.ExtruderStack import ExtruderStack
 from cura.Settings.GlobalStack import GlobalStack
 from cura.Settings.CuraContainerStack import _ContainerIndexes
 from cura.QualityManager import QualityManager
+from cura.CuraApplication import CuraApplication
 
 from configparser import ConfigParser
 import zipfile
@@ -750,8 +751,16 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
             # If not extruder stacks were saved in the project file (pre 3.1) create one manually
             # We re-use the container registry's addExtruderStackForSingleExtrusionMachine method for this
             if not extruder_stacks:
-                stack = self._container_registry.addExtruderStackForSingleExtrusionMachine(global_stack, "fdmextruder")
+                if self._resolve_strategies["machine"] == "new":
+                    stack = self._container_registry.addExtruderStackForSingleExtrusionMachine(global_stack, "fdmextruder")
+                else:
+                    stack = global_stack.extruders.get("0")
+                    if not stack:
+                        # this should not happen
+                        Logger.log("e", "Cannot find any extruder in an existing global stack [%s].", global_stack.getId())
                 if stack:
+                    if global_stack.quality.getId() in ("empty", "empty_quality"):
+                        stack.quality = empty_quality_container
                     if self._resolve_strategies["machine"] == "override":
                         # in case the extruder is newly created (for a single-extrusion machine), we need to override
                         # the existing extruder stack.
@@ -991,6 +1000,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
             for stack in extruder_stacks:
                 stack.setNextStack(global_stack)
                 stack.containersChanged.emit(stack.getTop())
+        else:
+            if quality_has_been_changed:
+                CuraApplication.getInstance().getMachineManager().activeQualityChanged.emit()
 
         # Actually change the active machine.
         Application.getInstance().setGlobalContainerStack(global_stack)
@@ -1040,13 +1052,13 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
         # find the old material ID
         old_material_id_in_stack = stack.material.getId()
         best_matching_old_material_id = None
-        best_matching_old_meterial_prefix_length = -1
+        best_matching_old_material_prefix_length = -1
         for old_parent_material_id in old_new_material_dict:
-            if len(old_parent_material_id) < best_matching_old_meterial_prefix_length:
+            if len(old_parent_material_id) < best_matching_old_material_prefix_length:
                 continue
             if len(old_parent_material_id) <= len(old_material_id_in_stack):
                 if old_parent_material_id == old_material_id_in_stack[0:len(old_parent_material_id)]:
-                    best_matching_old_meterial_prefix_length = len(old_parent_material_id)
+                    best_matching_old_material_prefix_length = len(old_parent_material_id)
                     best_matching_old_material_id = old_parent_material_id
 
         if best_matching_old_material_id is None:

+ 7 - 0
plugins/CuraEngineBackend/CuraEngineBackend.py

@@ -426,6 +426,13 @@ class CuraEngineBackend(QObject, Backend):
         if not isinstance(source, SceneNode):
             return
 
+        # This case checks if the source node is a node that contains a GCode. In this case the
+        # cached layer data is removed so the previous data is not rendered - CURA-4821
+        if source.callDecoration("isBlockSlicing") and source.callDecoration("getLayerData"):
+            if self._stored_optimized_layer_data:
+                print(self._stored_optimized_layer_data)
+                del self._stored_optimized_layer_data[source.callDecoration("getBuildPlateNumber")]
+
         build_plate_changed = set()
         source_build_plate_number = source.callDecoration("getBuildPlateNumber")
         if source == self._scene.getRoot():

+ 4 - 1
plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py

@@ -286,7 +286,10 @@ class NetworkClusterPrinterOutputDevice(NetworkPrinterOutputDevice.NetworkPrinte
         gcode_list = getattr(Application.getInstance().getController().getScene(), "gcode_dict")[output_build_plate_number]
         if not gcode_list:  # Empty build plate
             Logger.log("d", "Skipping empty job (build plate number %d).", output_build_plate_number)
-            return self.sendPrintJob()
+            if self._job_list:
+                return self.sendPrintJob()
+            else:
+                return
 
         self._send_gcode_start = time.time()
         Logger.log("d", "Sending print job [%s] to host, build plate [%s]..." % (file_name, output_build_plate_number))

+ 8 - 8
resources/definitions/fdmprinter.def.json

@@ -1168,6 +1168,14 @@
                     "limit_to_extruder": "wall_0_extruder_nr",
                     "settable_per_mesh": true
                 },
+                "optimize_wall_printing_order":
+                {
+                    "label": "Optimize Wall Printing Order",
+                    "description": "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization.",
+                    "type": "bool",
+                    "default_value": false,
+                    "settable_per_mesh": true
+                },
                 "outer_inset_first":
                 {
                     "label": "Outer Before Inner Walls",
@@ -5338,14 +5346,6 @@
             "description": "experimental!",
             "children":
             {
-                "optimize_wall_printing_order":
-                {
-                    "label": "Optimize Wall Printing Order",
-                    "description": "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization.",
-                    "type": "bool",
-                    "default_value": false,
-                    "settable_per_mesh": true
-                },
                 "support_skip_some_zags":
                 {
                     "label": "Break Up Support In Chunks",