Browse Source

CURA-5045 solve merge conflicts

Jack Ha 7 years ago
parent
commit
c9dc429b2b

+ 1 - 1
cura/CuraApplication.py

@@ -1698,7 +1698,7 @@ class CuraApplication(QtApplication):
             result = workspace_reader.preRead(file_path, show_dialog=False)
             return result == WorkspaceReader.PreReadResult.accepted
         except Exception as e:
-            Logger.logException("e", "Could not check file %s: %s", file_url)
+            Logger.logException("e", "Could not check file %s", file_url)
             return False
 
     def _onContextMenuRequested(self, x: float, y: float) -> None:

+ 4 - 0
cura/Machines/Models/GenericMaterialsModel.py

@@ -31,6 +31,7 @@ class GenericMaterialsModel(BaseMaterialsModel):
             self.setItems([])
             return
         extruder_stack = global_stack.extruders[extruder_position]
+        exclude_materials = set(global_stack.definition.getMetaDataEntry("exclude_materials", []))
 
         available_material_dict = self._material_manager.getAvailableMaterialsForMachineExtruder(global_stack,
                                                                                                  extruder_stack)
@@ -41,6 +42,9 @@ class GenericMaterialsModel(BaseMaterialsModel):
         item_list = []
         for root_material_id, container_node in available_material_dict.items():
             metadata = container_node.metadata
+            # Skip excluded materials
+            if metadata["id"] in exclude_materials:
+                continue
             # Only add results for generic materials
             if metadata["brand"].lower() != "generic":
                 continue

+ 11 - 10
cura/Settings/CuraContainerRegistry.py

@@ -467,6 +467,8 @@ class CuraContainerRegistry(ContainerRegistry):
     def addExtruderStackForSingleExtrusionMachine(self, machine, extruder_id, new_global_quality_changes = None, create_new_ids = True):
         new_extruder_id = extruder_id
 
+        application = CuraApplication.getInstance()
+
         extruder_definitions = self.findDefinitionContainers(id = new_extruder_id)
         if not extruder_definitions:
             Logger.log("w", "Could not find definition containers for extruder %s", new_extruder_id)
@@ -475,7 +477,7 @@ class CuraContainerRegistry(ContainerRegistry):
         extruder_definition = extruder_definitions[0]
         unique_name = self.uniqueName(machine.getName() + " " + new_extruder_id) if create_new_ids else machine.getName() + " " + new_extruder_id
 
-        extruder_stack = ExtruderStack.ExtruderStack(unique_name)
+        extruder_stack = ExtruderStack.ExtruderStack(unique_name, parent = machine)
         extruder_stack.setName(extruder_definition.getName())
         extruder_stack.setDefinition(extruder_definition)
         extruder_stack.addMetaDataEntry("position", extruder_definition.getMetaDataEntry("position"))
@@ -483,7 +485,7 @@ class CuraContainerRegistry(ContainerRegistry):
         # create a new definition_changes container for the extruder stack
         definition_changes_id = self.uniqueName(extruder_stack.getId() + "_settings") if create_new_ids else extruder_stack.getId() + "_settings"
         definition_changes_name = definition_changes_id
-        definition_changes = InstanceContainer(definition_changes_id)
+        definition_changes = InstanceContainer(definition_changes_id, parent = application)
         definition_changes.setName(definition_changes_name)
         definition_changes.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
         definition_changes.addMetaDataEntry("type", "definition_changes")
@@ -510,13 +512,13 @@ class CuraContainerRegistry(ContainerRegistry):
         # create empty user changes container otherwise
         user_container_id = self.uniqueName(extruder_stack.getId() + "_user") if create_new_ids else extruder_stack.getId() + "_user"
         user_container_name = user_container_id
-        user_container = InstanceContainer(user_container_id)
+        user_container = InstanceContainer(user_container_id, parent = application)
         user_container.setName(user_container_name)
         user_container.addMetaDataEntry("type", "user")
         user_container.addMetaDataEntry("machine", machine.getId())
         user_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
         user_container.setDefinition(machine.definition.getId())
-        user_container.setMetaDataEntry("extruder", extruder_stack.getId())
+        user_container.setMetaDataEntry("position", extruder_stack.getMetaDataEntry("position"))
 
         if machine.userChanges:
             # for the newly created extruder stack, we need to move all "per-extruder" settings to the user changes
@@ -538,7 +540,6 @@ class CuraContainerRegistry(ContainerRegistry):
         self.addContainer(user_container)
         extruder_stack.setUserChanges(user_container)
 
-        application = CuraApplication.getInstance()
         empty_variant = application.empty_variant_container
         empty_material = application.empty_material_container
         empty_quality = application.empty_quality_container
@@ -579,17 +580,17 @@ class CuraContainerRegistry(ContainerRegistry):
                 extruder_quality_changes_container = self._findQualityChangesContainerInCuraFolder(machine_quality_changes.getName())
                 if extruder_quality_changes_container:
                     quality_changes_id = extruder_quality_changes_container.getId()
-                    extruder_quality_changes_container.addMetaDataEntry("extruder", extruder_stack.definition.getId())
+                    extruder_quality_changes_container.addMetaDataEntry("position", extruder_definition.getMetaDataEntry("position"))
                     extruder_stack.qualityChanges = self.findInstanceContainers(id = quality_changes_id)[0]
                 else:
                     # if we still cannot find a quality changes container for the extruder, create a new one
                     container_name = machine_quality_changes.getName()
                     container_id = self.uniqueName(extruder_stack.getId() + "_qc_" + container_name)
-                    extruder_quality_changes_container = InstanceContainer(container_id)
+                    extruder_quality_changes_container = InstanceContainer(container_id, parent = application)
                     extruder_quality_changes_container.setName(container_name)
                     extruder_quality_changes_container.addMetaDataEntry("type", "quality_changes")
                     extruder_quality_changes_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
-                    extruder_quality_changes_container.addMetaDataEntry("extruder", extruder_stack.definition.getId())
+                    extruder_quality_changes_container.addMetaDataEntry("position", extruder_definition.getMetaDataEntry("position"))
                     extruder_quality_changes_container.addMetaDataEntry("quality_type", machine_quality_changes.getMetaDataEntry("quality_type"))
                     extruder_quality_changes_container.setDefinition(machine_quality_changes.getDefinition().getId())
 
@@ -649,8 +650,8 @@ class CuraContainerRegistry(ContainerRegistry):
         for qc_name, qc_list in qc_groups.items():
             qc_dict = {"global": None, "extruders": []}
             for qc in qc_list:
-                extruder_def_id = qc.getMetaDataEntry("extruder")
-                if extruder_def_id is not None:
+                extruder_position = qc.getMetaDataEntry("position")
+                if extruder_position is not None:
                     qc_dict["extruders"].append(qc)
                 else:
                     qc_dict["global"] = qc

+ 25 - 7
cura/Settings/MachineManager.py

@@ -131,6 +131,10 @@ class MachineManager(QObject):
         self._material_manager.materialsUpdated.connect(self._updateUponMaterialMetadataChange)
         self.rootMaterialChanged.connect(self._onRootMaterialChanged)
 
+        # Emit the printerConnectedStatusChanged when either globalContainerChanged or outputDevicesChanged are emitted
+        self.globalContainerChanged.connect(self.printerConnectedStatusChanged)
+        self.outputDevicesChanged.connect(self.printerConnectedStatusChanged)
+
     activeQualityGroupChanged = pyqtSignal()
     activeQualityChangesGroupChanged = pyqtSignal()
 
@@ -151,6 +155,7 @@ class MachineManager(QObject):
 
     outputDevicesChanged = pyqtSignal()
     currentConfigurationChanged = pyqtSignal() # Emitted every time the current configurations of the machine changes
+    printerConnectedStatusChanged = pyqtSignal() # Emitted every time the active machine change or the outputdevices change
 
     rootMaterialChanged = pyqtSignal()
 
@@ -468,13 +473,17 @@ class MachineManager(QObject):
             return self._global_container_stack.getId()
         return ""
 
-    @pyqtProperty(str, notify = outputDevicesChanged)
+    @pyqtProperty(bool, notify = printerConnectedStatusChanged)
+    def printerConnected(self):
+        return bool(self._printer_output_devices)
+
+    @pyqtProperty(str, notify = printerConnectedStatusChanged)
     def activeMachineNetworkKey(self) -> str:
         if self._global_container_stack:
             return self._global_container_stack.getMetaDataEntry("um_network_key", "")
         return ""
 
-    @pyqtProperty(str, notify = outputDevicesChanged)
+    @pyqtProperty(str, notify = printerConnectedStatusChanged)
     def activeMachineNetworkGroupName(self) -> str:
         if self._global_container_stack:
             return self._global_container_stack.getMetaDataEntry("connect_group_name", "")
@@ -1017,14 +1026,19 @@ class MachineManager(QObject):
         if self._global_container_stack is None:
             return #Can't change that.
         quality_type = quality_changes_group.quality_type
-        quality_group_dict = self._quality_manager.getQualityGroups(self._global_container_stack)
-        quality_group = quality_group_dict[quality_type]
+        # A custom quality can be created based on "not supported".
+        # In that case, do not set quality containers to empty.
+        if quality_type == "not_supported":
+            quality_group = None
+        else:
+            quality_group_dict = self._quality_manager.getQualityGroups(self._global_container_stack)
+            quality_group = quality_group_dict[quality_type]
 
         quality_changes_container = self._empty_quality_changes_container
-        quality_container = self._empty_quality_changes_container
+        quality_container = self._empty_quality_container
         if quality_changes_group.node_for_global and quality_changes_group.node_for_global.getContainer():
             quality_changes_container = quality_changes_group.node_for_global.getContainer()
-        if quality_group.node_for_global and quality_group.node_for_global.getContainer():
+        if quality_group is not None and quality_group.node_for_global and quality_group.node_for_global.getContainer():
             quality_container = quality_group.node_for_global.getContainer()
 
         self._global_container_stack.quality = quality_container
@@ -1032,7 +1046,9 @@ class MachineManager(QObject):
 
         for position, extruder in self._global_container_stack.extruders.items():
             quality_changes_node = quality_changes_group.nodes_for_extruders.get(position)
-            quality_node = quality_group.nodes_for_extruders.get(position)
+            quality_node = None
+            if quality_group is not None:
+                quality_node = quality_group.nodes_for_extruders.get(position)
 
             quality_changes_container = self._empty_quality_changes_container
             quality_container = self._empty_quality_container
@@ -1336,6 +1352,8 @@ class MachineManager(QObject):
         return name
 
     def _updateUponMaterialMetadataChange(self):
+        if self._global_container_stack is None:
+            return
         with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue):
             self._updateMaterialWithVariant(None)
             self._updateQualityWithMaterial()

+ 3 - 1
plugins/3MFReader/ThreeMFWorkspaceReader.py

@@ -385,7 +385,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
         parser = ConfigParser(interpolation = None)
         parser.read_string(serialized)
         quality_container_id = parser["containers"][str(_ContainerIndexes.Quality)]
-        quality_type = instance_container_info_dict[quality_container_id].parser["metadata"]["quality_type"]
+        quality_type = "empty_quality"
+        if quality_container_id not in ("empty", "empty_quality"):
+            quality_type = instance_container_info_dict[quality_container_id].parser["metadata"]["quality_type"]
 
         # Get machine info
         serialized = archive.open(global_stack_file).read().decode("utf-8")

+ 7 - 1
plugins/ChangeLogPlugin/ChangeLog.txt

@@ -18,7 +18,7 @@ This new feature allows you to easily add small cubic areas which prevent suppor
 A convenient way to select a preset of settings to be visible. These presets guide you to find the most important Cura settings in an incremental way. A small menu is located next to the ‘search bar’ to easily access these new setting visibility presets.
 
 *Model assistant
-This feature provides useful information to the user based on their model. For now, it informs the user when printing models with a footprint larger than 15x15x15cm, printed with ABS, PC, PP or CPE+, that they may want to make changes to the model such as filleting sharp edges.
+This feature provides useful information to the user based on their model. For now, it informs the user when printing models with a footprint larger than 15x15x10cm, printed with ABS, PC, PP or CPE+, that they may want to make changes to the model such as filleting sharp edges.
 
 *Circular prime tower
 The prime tower shape has changed from rectangular to circular. This shape should increase the adhesion to the build plate, overall strength, and prevent delamination of the layers.
@@ -60,6 +60,12 @@ Also Alexander Roessler made a new NGC writer plugin so you can export files in
 *Pre-heat extruders - fieldOfView
 This new feature allows to preheat the extruders in the printer monitor.
 
+*Persistent post-processing scripts
+Scripts are no longer erased after restarting Ultimaker Cura.
+
+*GZ Reader
+By default, G-code for Ultimaker 3 machines is now saved as gzipped G-Code.
+
 *Print preview image
 Adds a preview image of the gcode to the slice information. This can be shown in Cura Connect.
 

+ 1 - 1
plugins/LegacyProfileReader/DictionaryOfDoom.json

@@ -1,6 +1,6 @@
 {
     "source_version": "15.04",
-    "target_version": 2,
+    "target_version": 3,
 
     "translation": {
         "machine_nozzle_size": "nozzle_size",

+ 1 - 1
plugins/UM3NetworkPrinting/UM3InfoComponents.qml

@@ -12,7 +12,7 @@ Item
 
     property string activeQualityDefinitionId: Cura.MachineManager.activeQualityDefinitionId
     property bool isUM3: activeQualityDefinitionId == "ultimaker3" || activeQualityDefinitionId.match("ultimaker_") != null
-    property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0
+    property bool printerConnected: Cura.MachineManager.printerConnected
     property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands
     property bool authenticationRequested: printerConnected && (Cura.MachineManager.printerOutputDevices[0].authenticationState == 2 || Cura.MachineManager.printerOutputDevices[0].authenticationState == 5) // AuthState.AuthenticationRequested or AuthenticationReceived.
 

+ 6 - 1
plugins/UM3NetworkPrinting/UM3OutputDevicePlugin.py

@@ -107,6 +107,8 @@ class UM3OutputDevicePlugin(OutputDevicePlugin):
                     Logger.log("d", "Attempting to connect with [%s]" % key)
                     self._discovered_devices[key].connect()
                     self._discovered_devices[key].connectionStateChanged.connect(self._onDeviceConnectionStateChanged)
+                else:
+                    self._onDeviceConnectionStateChanged(key)
             else:
                 if self._discovered_devices[key].isConnected():
                     Logger.log("d", "Attempting to close connection with [%s]" % key)
@@ -117,7 +119,10 @@ class UM3OutputDevicePlugin(OutputDevicePlugin):
         if key not in self._discovered_devices:
             return
         if self._discovered_devices[key].isConnected():
-            self.getOutputDeviceManager().addOutputDevice(self._discovered_devices[key])
+            # Sometimes the status changes after changing the global container and maybe the device doesn't belong to this machine
+            um_network_key = Application.getInstance().getGlobalContainerStack().getMetaDataEntry("um_network_key")
+            if key == um_network_key:
+                self.getOutputDeviceManager().addOutputDevice(self._discovered_devices[key])
         else:
             self.getOutputDeviceManager().removeOutputDevice(key)
 

+ 1 - 1
plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml

@@ -14,7 +14,7 @@ import Cura 1.0 as Cura
 Cura.MachineAction
 {
     anchors.fill: parent;
-    property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0
+    property bool printerConnected: Cura.MachineManager.printerConnected
     property var activeOutputDevice: printerConnected ? Cura.MachineManager.printerOutputDevices[0] : null
 
     Item

Some files were not shown because too many files changed in this diff