From af89209cdeb31eec4abf9ebcb30266239ac35676 Mon Sep 17 00:00:00 2001 From: Mark Date: Fri, 9 Mar 2018 14:02:04 +0100 Subject: [PATCH 1/6] Changed rounding of prettyTime by accident --- resources/qml/PrintMonitor.qml | 2 +- resources/qml/Sidebar.qml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/qml/PrintMonitor.qml b/resources/qml/PrintMonitor.qml index 0841144043..ae74170004 100644 --- a/resources/qml/PrintMonitor.qml +++ b/resources/qml/PrintMonitor.qml @@ -122,7 +122,7 @@ Column { label: catalog.i18nc("@label", "Printing Time") value: activePrintJob != null ? getPrettyTime(activePrintJob.timeTotal) : "" - width:base.width + width: base.width visible: activePrinter != null } diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index e04d8607da..e3107ea7f8 100644 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -64,11 +64,11 @@ Rectangle function getPrettyTime(time) { - var hours = Math.round(time / 3600) + var hours = Math.floor(time / 3600) time -= hours * 3600 - var minutes = Math.round(time / 60); + var minutes = Math.floor(time / 60); time -= minutes * 60 - var seconds = Math.round(time); + var seconds = Math.floor(time); var finalTime = strPadLeft(hours, "0", 2) + ':' + strPadLeft(minutes,'0',2)+ ':' + strPadLeft(seconds,'0',2); return finalTime; From a40be0c64a919707d4c3b723d09560e9d8acc16f Mon Sep 17 00:00:00 2001 From: Andreea Scorojitu Date: Fri, 9 Mar 2018 14:25:35 +0100 Subject: [PATCH 2/6] Add default_build_plate to expert view, CURA-5032 The default build plate settings is now added in Expert view in SettingsVisibility --- resources/preset_setting_visibility_groups/expert.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/preset_setting_visibility_groups/expert.cfg b/resources/preset_setting_visibility_groups/expert.cfg index e180b831d8..d6989f8b26 100644 --- a/resources/preset_setting_visibility_groups/expert.cfg +++ b/resources/preset_setting_visibility_groups/expert.cfg @@ -103,6 +103,7 @@ material_print_temperature_layer_0 material_initial_print_temperature material_final_print_temperature material_extrusion_cool_down_speed +default_material_bed_temperature material_bed_temperature material_bed_temperature_layer_0 material_diameter From de72dd3455218a240acd0bbf4c25b423c6cc77ff Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 9 Mar 2018 14:26:14 +0100 Subject: [PATCH 3/6] Fix material update upon gcode flavour change CURA-5060 --- cura/Machines/MaterialManager.py | 4 +- cura/Settings/MachineManager.py | 6 ++- .../MachineSettingsAction.py | 43 ++++++++++--------- 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index 89b3a76f9a..7c205c0084 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -357,10 +357,10 @@ class MaterialManager(QObject): else: return None - def getDefaultMaterial(self, global_stack: "GlobalStack", extruder_variant_name: str) -> Optional["MaterialNode"]: + def getDefaultMaterial(self, global_stack: "GlobalStack", extruder_variant_name: Optional[str]) -> Optional["MaterialNode"]: node = None machine_definition = global_stack.definition - if parseBool(machine_definition.getMetaDataEntry("has_materials", False)): + if parseBool(global_stack.getMetaDataEntry("has_materials", False)): material_diameter = machine_definition.getProperty("material_diameter", "value") if isinstance(material_diameter, SettingFunction): material_diameter = material_diameter(global_stack) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 1b3f01170e..144f495997 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -905,11 +905,13 @@ class MachineManager(QObject): def _setMaterial(self, position, container_node = None): if container_node: self._global_container_stack.extruders[position].material = container_node.getContainer() + root_material_id = container_node.metadata["base_file"] + root_material_name = container_node.getContainer().getName() else: self._global_container_stack.extruders[position].material = self._empty_material_container + root_material_id = None + root_material_name = None # The _current_root_material_id is used in the MaterialMenu to see which material is selected - root_material_id = container_node.metadata["base_file"] - root_material_name = container_node.getContainer().getName() if root_material_id != self._current_root_material_id[position]: self._current_root_material_id[position] = root_material_id self._current_root_material_name[position] = root_material_name diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index baa0639d3f..bac4af69cc 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -26,6 +26,8 @@ class MachineSettingsAction(MachineAction): super().__init__("MachineSettingsAction", catalog.i18nc("@action", "Machine Settings")) self._qml_url = "MachineSettingsAction.qml" + self._application = Application.getInstance() + self._global_container_stack = None from cura.Settings.CuraContainerStack import _ContainerIndexes @@ -34,16 +36,16 @@ class MachineSettingsAction(MachineAction): self._container_registry = ContainerRegistry.getInstance() self._container_registry.containerAdded.connect(self._onContainerAdded) self._container_registry.containerRemoved.connect(self._onContainerRemoved) - Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) + self._application.globalContainerStackChanged.connect(self._onGlobalContainerChanged) self._empty_container = self._container_registry.getEmptyInstanceContainer() - self._backend = Application.getInstance().getBackend() + self._backend = self._application.getBackend() def _onContainerAdded(self, container): # Add this action as a supported action to all machine definitions if isinstance(container, DefinitionContainer) and container.getMetaDataEntry("type") == "machine": - Application.getInstance().getMachineActionManager().addSupportedAction(container.getId(), self.getKey()) + self._application.getMachineActionManager().addSupportedAction(container.getId(), self.getKey()) def _onContainerRemoved(self, container): # Remove definition_changes containers when a stack is removed @@ -61,11 +63,11 @@ class MachineSettingsAction(MachineAction): # Make sure there is a definition_changes container to store the machine settings definition_changes_container = self._global_container_stack.definitionChanges if definition_changes_container == self._empty_container: - definition_changes_container = CuraStackBuilder.createDefinitionChangesContainer( - self._global_container_stack, self._global_container_stack.getName() + "_settings") + CuraStackBuilder.createDefinitionChangesContainer(self._global_container_stack, + self._global_container_stack.getName() + "_settings") # Notify the UI in which container to store the machine settings data - from cura.Settings.CuraContainerStack import CuraContainerStack, _ContainerIndexes + from cura.Settings.CuraContainerStack import _ContainerIndexes container_index = _ContainerIndexes.DefinitionChanges if container_index != self._container_index: @@ -107,13 +109,13 @@ class MachineSettingsAction(MachineAction): def setMachineExtruderCount(self, extruder_count): # Note: this method was in this class before, but since it's quite generic and other plugins also need it # it was moved to the machine manager instead. Now this method just calls the machine manager. - Application.getInstance().getMachineManager().setActiveMachineExtruderCount(extruder_count) + self._application.getMachineManager().setActiveMachineExtruderCount(extruder_count) @pyqtSlot() def forceUpdate(self): # Force rebuilding the build volume by reloading the global container stack. # This is a bit of a hack, but it seems quick enough. - Application.getInstance().globalContainerStackChanged.emit() + self._application.globalContainerStackChanged.emit() @pyqtSlot() def updateHasMaterialsMetadata(self): @@ -126,9 +128,11 @@ class MachineSettingsAction(MachineAction): # In other words: only continue for the UM2 (extended), but not for the UM2+ return - stacks = ExtruderManager.getInstance().getExtruderStacks() + machine_manager = self._application.getMachineManager() + extruder_positions = list(self._global_container_stack.extruders.keys()) has_materials = self._global_container_stack.getProperty("machine_gcode_flavor", "value") != "UltiGCode" + material_node = None if has_materials: if "has_materials" in self._global_container_stack.getMetaData(): self._global_container_stack.setMetaDataEntry("has_materials", True) @@ -136,26 +140,23 @@ class MachineSettingsAction(MachineAction): self._global_container_stack.addMetaDataEntry("has_materials", True) # Set the material container for each extruder to a sane default - for stack in stacks: - material_container = stack.material - if material_container == self._empty_container: - machine_approximate_diameter = str(round(self._global_container_stack.getProperty("material_diameter", "value"))) - search_criteria = { "type": "material", "definition": "fdmprinter", "id": self._global_container_stack.getMetaDataEntry("preferred_material"), "approximate_diameter": machine_approximate_diameter} - materials = self._container_registry.findInstanceContainers(**search_criteria) - if materials: - stack.material = materials[0] + material_manager = self._application.getMaterialManager() + #material_manager.initialize() + material_node = material_manager.getDefaultMaterial(self._global_container_stack, None) + else: # The metadata entry is stored in an ini, and ini files are parsed as strings only. # Because any non-empty string evaluates to a boolean True, we have to remove the entry to make it False. if "has_materials" in self._global_container_stack.getMetaData(): self._global_container_stack.removeMetaDataEntry("has_materials") - for stack in stacks: - stack.material = ContainerRegistry.getInstance().getEmptyInstanceContainer() + # set materials + for position in extruder_positions: + machine_manager.setMaterial(position, material_node) - Application.getInstance().globalContainerStackChanged.emit() + self._application.globalContainerStackChanged.emit() @pyqtSlot(int) def updateMaterialForDiameter(self, extruder_position: int): # Updates the material container to a material that matches the material diameter set for the printer - Application.getInstance().getExtruderManager().updateMaterialForDiameter(extruder_position) + self._application.getExtruderManager().updateMaterialForDiameter(extruder_position) From 48dae7b6c79dc426692cb7e2ffb4c40a1d907f09 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 9 Mar 2018 14:35:37 +0100 Subject: [PATCH 4/6] Remove commented code CURA-5060 --- plugins/MachineSettingsAction/MachineSettingsAction.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index bac4af69cc..a97f3b463f 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -141,7 +141,6 @@ class MachineSettingsAction(MachineAction): # Set the material container for each extruder to a sane default material_manager = self._application.getMaterialManager() - #material_manager.initialize() material_node = material_manager.getDefaultMaterial(self._global_container_stack, None) else: From 8c7e413038c0f1af6612b8e8d33b47d489e2ba3a Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 9 Mar 2018 14:37:41 +0100 Subject: [PATCH 5/6] Remove unnecessary setGlobalContainerStack() in project loading CURA-5073 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index ac61016de7..7201df65e4 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -709,7 +709,6 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # function is running on the main thread (Qt thread), although those "changed" signals have been emitted, but # they won't take effect until this function is done. # To solve this, we schedule _updateActiveMachine() for later so it will have the latest data. - Application.getInstance().setGlobalContainerStack(global_stack) self._updateActiveMachine(global_stack) # Load all the nodes / meshdata of the workspace From c9905449ebbb306e84217d6066e65e4c90bb2c81 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 9 Mar 2018 14:54:01 +0100 Subject: [PATCH 6/6] Clean up MachineSettingsAction imports CURA-5060 --- plugins/MachineSettingsAction/MachineSettingsAction.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index a97f3b463f..26280a1f84 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -2,20 +2,16 @@ # Cura is released under the terms of the LGPLv3 or higher. from PyQt5.QtCore import pyqtProperty, pyqtSignal + +import UM.i18n from UM.FlameProfiler import pyqtSlot - -from cura.MachineAction import MachineAction - from UM.Application import Application from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.DefinitionContainer import DefinitionContainer -from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator -from UM.Logger import Logger -from cura.Settings.ExtruderManager import ExtruderManager +from cura.MachineAction import MachineAction from cura.Settings.CuraStackBuilder import CuraStackBuilder -import UM.i18n catalog = UM.i18n.i18nCatalog("cura")