diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 9493153bf7..e3465e6af5 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1733,7 +1733,7 @@ class CuraApplication(QtApplication): def log(self, msg): Logger.log("d", msg) - openProjectFile = pyqtSignal(QUrl, arguments = ["project_file"]) # Emitted when a project file is about to open. + openProjectFile = pyqtSignal(QUrl, bool, arguments = ["project_file", "add_to_recent_files"]) # Emitted when a project file is about to open. @pyqtSlot(QUrl, str, bool) @pyqtSlot(QUrl, str) @@ -1743,6 +1743,7 @@ class CuraApplication(QtApplication): :param project_mode: How to handle project files. Either None(default): Follow user preference, "open_as_model" or "open_as_project". This parameter is only considered if the file is a project file. + :param add_to_recent_files: Whether or not to add the file as an option to the Recent Files list. """ Logger.log("i", "Attempting to read file %s", file.toString()) if not file.isValid(): @@ -1768,7 +1769,7 @@ class CuraApplication(QtApplication): if is_project_file and project_mode == "always_ask": # present a dialog asking to open as project or import models - self.callLater(self.openProjectFile.emit, file) + self.callLater(self.openProjectFile.emit, file, add_to_recent_files) return # Either the file is a model file or we want to load only models from project. Continue to load models. @@ -1940,7 +1941,7 @@ class CuraApplication(QtApplication): try: result = workspace_reader.preRead(file_path, show_dialog=False) return result == WorkspaceReader.PreReadResult.accepted - except Exception: + except: Logger.logException("e", "Could not check file %s", file_url) return False diff --git a/cura/UI/PrintInformation.py b/cura/UI/PrintInformation.py index 22710165b3..10318b3a8b 100644 --- a/cura/UI/PrintInformation.py +++ b/cura/UI/PrintInformation.py @@ -301,6 +301,7 @@ class PrintInformation(QObject): if self._base_name == "": self._job_name = self.UNTITLED_JOB_NAME self._is_user_specified_job_name = False + self._application.getController().getScene().clearMetaData() self.jobNameChanged.emit() return diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index 5fd218ca7c..37ca1e98aa 100755 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Ultimaker B.V. +# Copyright (c) 2021 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import os.path @@ -163,9 +163,9 @@ class ThreeMFReader(MeshReader): um_node.callDecoration("getStack").getTop().setDefinition(definition_id) setting_container = um_node.callDecoration("getStack").getTop() - + known_setting_keys = um_node.callDecoration("getStack").getAllKeys() for key in settings: - setting_value = settings[key] + setting_value = settings[key].value # Extruder_nr is a special case. if key == "extruder_nr": @@ -175,7 +175,10 @@ class ThreeMFReader(MeshReader): else: Logger.log("w", "Unable to find extruder in position %s", setting_value) continue - setting_container.setProperty(key, "value", setting_value) + if key in known_setting_keys: + setting_container.setProperty(key, "value", setting_value) + else: + um_node.metadata[key] = settings[key] if len(um_node.getChildren()) > 0 and um_node.getMeshData() is None: if len(um_node.getAllChildren()) == 1: @@ -206,6 +209,10 @@ class ThreeMFReader(MeshReader): parser = Savitar.ThreeMFParser() scene_3mf = parser.parse(archive.open("3D/3dmodel.model").read()) self._unit = scene_3mf.getUnit() + + for key, value in scene_3mf.getMetadata().items(): + CuraApplication.getInstance().getController().getScene().setMetaDataEntry(key, value) + for node in scene_3mf.getSceneNodes(): um_node = self._convertSavitarNodeToUMNode(node, file_name) if um_node is None: diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py index 6c02935080..c85eca88bf 100644 --- a/plugins/3MFWriter/ThreeMFWriter.py +++ b/plugins/3MFWriter/ThreeMFWriter.py @@ -14,6 +14,7 @@ from cura.CuraApplication import CuraApplication import Savitar import numpy +import datetime MYPY = False try: @@ -108,7 +109,11 @@ class ThreeMFWriter(MeshWriter): # Get values for all changed settings & save them. for key in changed_setting_keys: - savitar_node.setSetting(key, str(stack.getProperty(key, "value"))) + savitar_node.setSetting("cura:" + key, str(stack.getProperty(key, "value"))) + + # Store the metadata. + for key, value in um_node.metadata.items(): + savitar_node.setSetting(key, value) for child_node in um_node.getChildren(): # only save the nodes on the active build plate @@ -145,6 +150,22 @@ class ThreeMFWriter(MeshWriter): model_relation_element = ET.SubElement(relations_element, "Relationship", Target = "/3D/3dmodel.model", Id = "rel0", Type = "http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel") savitar_scene = Savitar.Scene() + + metadata_to_store = CuraApplication.getInstance().getController().getScene().getMetaData() + + for key, value in metadata_to_store.items(): + savitar_scene.setMetaDataEntry(key, value) + + current_time_string = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + if "Application" not in metadata_to_store: + # This might sound a bit strange, but this field should store the original application that created + # the 3mf. So if it was already set, leave it to whatever it was. + savitar_scene.setMetaDataEntry("Application", CuraApplication.getInstance().getApplicationDisplayName()) + if "CreationDate" not in metadata_to_store: + savitar_scene.setMetaDataEntry("CreationDate", current_time_string) + + savitar_scene.setMetaDataEntry("ModificationDate", current_time_string) + transformation_matrix = Matrix() transformation_matrix._data[1, 1] = 0 transformation_matrix._data[1, 2] = -1 diff --git a/resources/definitions/trimaker_cosmosII.def.json b/resources/definitions/trimaker_cosmosII.def.json new file mode 100644 index 0000000000..45072df1b1 --- /dev/null +++ b/resources/definitions/trimaker_cosmosII.def.json @@ -0,0 +1,198 @@ +{ + "version": 2, + "name": "Trimaker Cosmos II", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Trimaker", + "manufacturer": "Trimaker", + "file_formats": "text/x-gcode", + "platform": "trimaker_cosmosII_platform.stl", + "platform_offset": [-110.5, -28.3, 134], + + "has_machine_quality": true, + "preferred_quality_type": "normal", + "preferred_material": "redd_pla", + + "has_materials": true, + "machine_extruder_trains": {"0": "trimaker_cosmosII_extruder"}, + "exclude_materials": [ + "chromatik_pla", + "dsm_arnitel2045_175", + "dsm_novamid1070_175", + "emotiontech_abs", + "emotiontech_absx", + "emotiontech_asax", + "emotiontech_bvoh", + "emotiontech_hips", + "emotiontech_petg", + "emotiontech_pla", + "emotiontech_pva-m", + "emotiontech_pva-oks", + "emotiontech_pva-s", + "emotiontech_tpu98a", + "eSUN_PETG_Black", + "eSUN_PETG_Grey", + "eSUN_PETG_Purple", + "eSUN_PLA_PRO_Black", + "eSUN_PLA_PRO_Grey", + "eSUN_PLA_PRO_Purple", + "eSUN_PLA_PRO_White", + "fabtotum_abs", + "fabtotum_nylon", + "fabtotum_pla", + "fabtotum_tpu", + "fiberlogy_hd_pla", + "filo3d_pla", + "filo3d_pla_green", + "filo3d_pla_red", + "generic_abs_175", + "generic_bam", + "generic_cffcpe", + "generic_cffpa", + "generic_cpe", + "generic_cpe_175", + "generic_cpe_plus", + "generic_gffcpe", + "generic_gffpa", + "generic_hips", + "generic_hips_175", + "generic_nylon", + "generic_nylon_175", + "generic_pc", + "generic_pc_175", + "generic_petg", + "generic_petg_175", + "generic_pla", + "generic_pla_175", + "generic_pp", + "generic_pva", + "generic_pva_175", + "generic_tough_pla", + "generic_tpu", + "generic_tpu_175", + "imade3d_petg_175", + "imade3d_pla_175", + "innofill_innoflex60_175", + "leapfrog_abs_natural", + "leapfrog_epla_natural", + "leapfrog_pva_natural", + "octofiber_pla", + "polyflex_pla", + "polymax_pla", + "polyplus_pla", + "polywood_pla", + "structur3d_dap100silicone", + "tizyx_abs", + "tizyx_flex", + "tizyx_petg", + "tizyx_pla", + "tizyx_pla_bois", + "tizyx_pva", + "ultimaker_abs_black", + "ultimaker_abs_blue", + "ultimaker_abs_green", + "ultimaker_abs_grey", + "ultimaker_abs_orange", + "ultimaker_abs_pearl-gold", + "ultimaker_abs_red", + "ultimaker_abs_silver-metallic", + "ultimaker_abs_white", + "ultimaker_abs_yellow", + "ultimaker_bam", + "ultimaker_cpe_black", + "ultimaker_cpe_blue", + "ultimaker_cpe_dark-grey", + "ultimaker_cpe_green", + "ultimaker_cpe_light-grey", + "ultimaker_cpe_plus_black", + "ultimaker_cpe_plus_transparent", + "ultimaker_cpe_plus_white", + "ultimaker_cpe_red", + "ultimaker_cpe_transparent", + "ultimaker_cpe_white", + "ultimaker_cpe_yellow", + "ultimaker_nylon_black", + "ultimaker_nylon_transparent", + "ultimaker_pc_black", + "ultimaker_pc_transparent", + "ultimaker_pc_white", + "ultimaker_pla_black", + "ultimaker_pla_blue", + "ultimaker_pla_green", + "ultimaker_pla_magenta", + "ultimaker_pla_orange", + "ultimaker_pla_pearl-white", + "ultimaker_pla_red", + "ultimaker_pla_silver-metallic", + "ultimaker_pla_transparent", + "ultimaker_pla_white", + "ultimaker_pla_yellow", + "ultimaker_pp_transparent", + "ultimaker_pva", + "ultimaker_tough_pla_black", + "ultimaker_tough_pla_green", + "ultimaker_tough_pla_red", + "ultimaker_tough_pla_white", + "ultimaker_tpu_black", + "ultimaker_tpu_blue", + "ultimaker_tpu_red", + "ultimaker_tpu_white", + "verbatim_bvoh_175", + "Vertex_Delta_ABS", + "Vertex_Delta_PET", + "Vertex_Delta_PLA", + "Vertex_Delta_PLA_Glitter", + "Vertex_Delta_PLA_Mat", + "Vertex_Delta_PLA_Satin", + "Vertex_Delta_PLA_Wood", + "Vertex_Delta_TPU", + "zyyx_pro_flex", + "zyyx_pro_pla" + ] + }, + + "overrides": { + + "machine_name": {"default_value": "Trimaker Cosmos II"}, + "machine_width": {"default_value": 200}, + "machine_depth": {"default_value": 200}, + "machine_height": {"default_value": 200}, + + "layer_height": {"default_value": 0.2}, + "material_flow": {"value": 100}, + "xy_offset": {"default_value": 0}, + "xy_offset_layer_0": {"value": -0.1}, + "wall_thickness": {"value": "line_width * 3" }, + "top_bottom_thickness": {"value": "layer_height * 6"}, + "infill_sparse_density": {"default_value": 25}, + "infill_pattern": {"value": "'grid'"}, + "infill_sparse_thickness": {"value": "resolveOrValue('layer_height')"}, + "default_material_bed_temperature": {"default_value": 60}, + "default_material_print_temperature": {"default_value": 200}, + "speed_print": {"default_value": 45}, + "speed_travel": {"value": "speed_print if magic_spiralize else 100"}, + "speed_wall_0": {"value": 35}, + "speed_wall_x": {"value": 45}, + "retraction_enable": {"default_value": true}, + "retraction_amount": {"default_value": 1}, + "retraction_speed": {"default_value": 45}, + "cool_fan_enabled": {"default_value": true}, + "cool_fan_speed": {"value": "100.0 if cool_fan_enabled else 0.0"}, + "support_enable": {"default_value": true}, + "support_type": {"default_value": "everywhere"}, + "support_angle": {"default_value": 50}, + "support_pattern": {"default_value": "zigzag"}, + "support_z_distance": {"default_value": 0.17}, + "support_xy_distance": {"default_value": 0.7}, + "adhesion_type": {"default_value": "skirt"}, + + "gantry_height": {"value": 2}, + "machine_start_gcode": {"default_value": ";Start GCode - Cosmos II - 3.x.x_SEGcTK_1.1\n M104 S120; Comienzo a calentar extrusor\n G21; Unidades en mm\n G90; absolute positioning\n M82; set extruder to absolute mode\n M107; Apagar FAN\n G28; Home\n M190 S{material_bed_temperature_layer_0}\n G29; Senso la cama\n M500\n G1 F5000 X0.5 Y0.5\n M109 S{material_print_temperature}\n M900 K0.04\n G1 F200 Z10\n G92 E0; Defino cero en la posición del actual del extrusor\n G1 F200 X0.5 Y0.5 Z0.300; Posiciono antes de hacer una línea\n G1 F900 X0.5 Y51.5 E2.56436; Hago una línea\n "}, + "machine_end_gcode": {"default_value": ";CODIGO FINAL\n M107; Fan off\n G90; Set to absolute positioning\n G1 X0 Y0 Z201; Get extruder out of way\n G92 E0; Reset extruder position\n G1 E-1; Reduce filament pressure\n G92 E0; Reset extruder position again\n M140 S0; Disable heated bed\n M104 S0; Disable extruder\n M84; Turn steppers off"}, + "machine_heated_bed": {"default_value": true}, + "material_diameter": {"default_value": 1.75}, + "machine_center_is_zero": {"default_value": false} + + } +} diff --git a/resources/definitions/trimaker_nebula.def.json b/resources/definitions/trimaker_nebula.def.json new file mode 100644 index 0000000000..46e57f96e5 --- /dev/null +++ b/resources/definitions/trimaker_nebula.def.json @@ -0,0 +1,198 @@ +{ + "version": 2, + "name": "Trimaker Nebula", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Trimaker", + "manufacturer": "Trimaker", + "file_formats": "text/x-gcode", + "platform": "trimaker_nebula_platform.stl", + + "has_machine_quality": true, + "preferred_quality_type": "normal", + "preferred_material": "redd_pla", + + "platform_offset": [-117.5, -40, 147.5], + "has_materials": true, + "machine_extruder_trains": {"0": "trimaker_nebula_extruder"}, + "exclude_materials": [ + "chromatik_pla", + "dsm_arnitel2045_175", + "dsm_novamid1070_175", + "emotiontech_abs", + "emotiontech_absx", + "emotiontech_asax", + "emotiontech_bvoh", + "emotiontech_hips", + "emotiontech_petg", + "emotiontech_pla", + "emotiontech_pva-m", + "emotiontech_pva-oks", + "emotiontech_pva-s", + "emotiontech_tpu98a", + "eSUN_PETG_Black", + "eSUN_PETG_Grey", + "eSUN_PETG_Purple", + "eSUN_PLA_PRO_Black", + "eSUN_PLA_PRO_Grey", + "eSUN_PLA_PRO_Purple", + "eSUN_PLA_PRO_White", + "fabtotum_abs", + "fabtotum_nylon", + "fabtotum_pla", + "fabtotum_tpu", + "fiberlogy_hd_pla", + "filo3d_pla", + "filo3d_pla_green", + "filo3d_pla_red", + "generic_abs_175", + "generic_bam", + "generic_cffcpe", + "generic_cffpa", + "generic_cpe", + "generic_cpe_175", + "generic_cpe_plus", + "generic_gffcpe", + "generic_gffpa", + "generic_hips", + "generic_hips_175", + "generic_nylon", + "generic_nylon_175", + "generic_pc", + "generic_pc_175", + "generic_petg", + "generic_petg_175", + "generic_pla", + "generic_pla_175", + "generic_pp", + "generic_pva", + "generic_pva_175", + "generic_tough_pla", + "generic_tpu", + "generic_tpu_175", + "imade3d_petg_175", + "imade3d_pla_175", + "innofill_innoflex60_175", + "leapfrog_abs_natural", + "leapfrog_epla_natural", + "leapfrog_pva_natural", + "octofiber_pla", + "polyflex_pla", + "polymax_pla", + "polyplus_pla", + "polywood_pla", + "structur3d_dap100silicone", + "tizyx_abs", + "tizyx_flex", + "tizyx_petg", + "tizyx_pla", + "tizyx_pla_bois", + "tizyx_pva", + "ultimaker_abs_black", + "ultimaker_abs_blue", + "ultimaker_abs_green", + "ultimaker_abs_grey", + "ultimaker_abs_orange", + "ultimaker_abs_pearl-gold", + "ultimaker_abs_red", + "ultimaker_abs_silver-metallic", + "ultimaker_abs_white", + "ultimaker_abs_yellow", + "ultimaker_bam", + "ultimaker_cpe_black", + "ultimaker_cpe_blue", + "ultimaker_cpe_dark-grey", + "ultimaker_cpe_green", + "ultimaker_cpe_light-grey", + "ultimaker_cpe_plus_black", + "ultimaker_cpe_plus_transparent", + "ultimaker_cpe_plus_white", + "ultimaker_cpe_red", + "ultimaker_cpe_transparent", + "ultimaker_cpe_white", + "ultimaker_cpe_yellow", + "ultimaker_nylon_black", + "ultimaker_nylon_transparent", + "ultimaker_pc_black", + "ultimaker_pc_transparent", + "ultimaker_pc_white", + "ultimaker_pla_black", + "ultimaker_pla_blue", + "ultimaker_pla_green", + "ultimaker_pla_magenta", + "ultimaker_pla_orange", + "ultimaker_pla_pearl-white", + "ultimaker_pla_red", + "ultimaker_pla_silver-metallic", + "ultimaker_pla_transparent", + "ultimaker_pla_white", + "ultimaker_pla_yellow", + "ultimaker_pp_transparent", + "ultimaker_pva", + "ultimaker_tough_pla_black", + "ultimaker_tough_pla_green", + "ultimaker_tough_pla_red", + "ultimaker_tough_pla_white", + "ultimaker_tpu_black", + "ultimaker_tpu_blue", + "ultimaker_tpu_red", + "ultimaker_tpu_white", + "verbatim_bvoh_175", + "Vertex_Delta_ABS", + "Vertex_Delta_PET", + "Vertex_Delta_PLA", + "Vertex_Delta_PLA_Glitter", + "Vertex_Delta_PLA_Mat", + "Vertex_Delta_PLA_Satin", + "Vertex_Delta_PLA_Wood", + "Vertex_Delta_TPU", + "zyyx_pro_flex", + "zyyx_pro_pla" + ] + }, + + "overrides": { + + "machine_name": {"default_value": "Trimaker Nebula"}, + "machine_width": {"default_value": 230}, + "machine_depth": {"default_value": 230}, + "machine_height": {"default_value": 260}, + + "layer_height": {"default_value": 0.2}, + "material_flow": {"value": 100}, + "xy_offset": {"default_value": 0}, + "xy_offset_layer_0": {"value": -0.1}, + "wall_thickness": {"value": "line_width * 3" }, + "top_bottom_thickness": {"value": "layer_height * 6"}, + "infill_sparse_density": {"default_value": 25}, + "infill_pattern": {"value": "'grid'"}, + "infill_sparse_thickness": {"value": "resolveOrValue('layer_height')"}, + "default_material_bed_temperature": {"default_value": 60}, + "default_material_print_temperature": {"default_value": 200}, + "speed_print": {"default_value": 45}, + "speed_travel": {"value": "speed_print if magic_spiralize else 100"}, + "speed_wall_0": {"value": 35}, + "speed_wall_x": {"value": 45}, + "retraction_enable": {"default_value": true}, + "retraction_amount": {"default_value": 1}, + "retraction_speed": {"default_value": 45}, + "cool_fan_enabled": {"default_value": true}, + "cool_fan_speed": {"value": "100.0 if cool_fan_enabled else 0.0"}, + "support_enable": {"default_value": true}, + "support_type": {"default_value": "everywhere"}, + "support_angle": {"default_value": 50}, + "support_pattern": {"default_value": "zigzag"}, + "support_z_distance": {"default_value": 0.17}, + "support_xy_distance": {"default_value": 0.7}, + "adhesion_type": {"default_value": "skirt"}, + + "gantry_height": {"value": 2}, + "machine_start_gcode": {"default_value": ";Trimaker Nebula Start Code\n G21; Unidades en mm\n G90; Posicion absoluta\n M82; Extrusor en modo absoluto\n M107; Fan apagado\n G28 X Y Z; Enviamos a home a todos los ejes\n M900 K=0; Linear advance desactivado\n M104 S110; Precalentamos el extrusor hasta 110 grados\n M190 S{material_bed_temperature_layer_0}; Calentamos cama y esperamos\n M109 S{material_print_temperature}; Calentamos extrusor y esperamos\n G92 E0; E=0\n G1 F200 X0.5 Y0.5 Z0.300\n G1 F900 X0.5 Y51.5 E2.56436; Hacemos una linea para limpiar extrusor\n"}, + "machine_end_gcode": {"default_value": ";Trimaker Nebula End Code\n M107; Apagamos fan\n G90\n G92 E0\n G1 X0 Y200\n G91\n G1 Z5\n G92 E0\n M140 S0; Enfriamos\n M104 S0; Enfriamos\n M84\n G90\n M117 Impresion finalizada\n M300 S440 P700\n"}, + "machine_heated_bed": {"default_value": true}, + "material_diameter": {"default_value": 1.75}, + "machine_center_is_zero": {"default_value": false} + + } +} diff --git a/resources/extruders/trimaker_cosmosII_extruder.def.json b/resources/extruders/trimaker_cosmosII_extruder.def.json new file mode 100644 index 0000000000..87c9394d96 --- /dev/null +++ b/resources/extruders/trimaker_cosmosII_extruder.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "trimaker_cosmosII", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/trimaker_nebula_extruder.def.json b/resources/extruders/trimaker_nebula_extruder.def.json new file mode 100644 index 0000000000..6dbd251edc --- /dev/null +++ b/resources/extruders/trimaker_nebula_extruder.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "trimaker_nebula", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/meshes/trimaker_cosmosII_platform.stl b/resources/meshes/trimaker_cosmosII_platform.stl new file mode 100644 index 0000000000..dadebf5e81 Binary files /dev/null and b/resources/meshes/trimaker_cosmosII_platform.stl differ diff --git a/resources/meshes/trimaker_nebula_platform.stl b/resources/meshes/trimaker_nebula_platform.stl new file mode 100644 index 0000000000..f4f4c7b0be Binary files /dev/null and b/resources/meshes/trimaker_nebula_platform.stl differ diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index bb7b5ac19c..7772cc041a 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -691,6 +691,9 @@ UM.MainWindow function handleOpenFiles(selectedMultipleFiles, hasProjectFile, fileUrlList, projectFileUrlList) { + // Make sure the files opened through the openFilesIncludingProjectDialog are added to the recent files list + openFilesIncludingProjectsDialog.addToRecent = true; + // we only allow opening one project file if (selectedMultipleFiles && hasProjectFile) { @@ -717,6 +720,7 @@ UM.MainWindow { // ask whether to open as project or as models askOpenAsProjectOrModelsDialog.fileUrl = projectFile; + askOpenAsProjectOrModelsDialog.addToRecent = true; askOpenAsProjectOrModelsDialog.show(); } } @@ -776,6 +780,7 @@ UM.MainWindow onOpenProjectFile: { askOpenAsProjectOrModelsDialog.fileUrl = project_file; + askOpenAsProjectOrModelsDialog.addToRecent = add_to_recent_files; askOpenAsProjectOrModelsDialog.show(); } } diff --git a/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml b/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml index 8c29fc7845..ba0d3fb6ca 100644 --- a/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml +++ b/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml @@ -29,6 +29,7 @@ UM.Dialog modality: Qt.WindowModal property var fileUrl + property var addToRecent: true //Whether to add this file to the recent files list after reading it. // load the entire project function loadProjectFile() { @@ -37,8 +38,7 @@ UM.Dialog UM.Preferences.setValue("cura/choice_on_open_project", "open_as_project") } - var addToRecent = UM.WorkspaceFileHandler.getAddToRecentFilesHint(base.fileUrl); - UM.WorkspaceFileHandler.readLocalFile(base.fileUrl, addToRecent); + UM.WorkspaceFileHandler.readLocalFile(base.fileUrl, base.addToRecent); base.hide() } @@ -50,7 +50,7 @@ UM.Dialog UM.Preferences.setValue("cura/choice_on_open_project", "open_as_model") } - CuraApplication.readLocalFile(base.fileUrl, "open_as_model") + CuraApplication.readLocalFile(base.fileUrl, "open_as_model", base.addToRecent) base.hide() } diff --git a/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml b/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml index 2ba8a409ef..3f1900c66b 100644 --- a/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml +++ b/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml @@ -28,19 +28,19 @@ UM.Dialog modality: Qt.WindowModal property var fileUrls: [] + property var addToRecent: true property int spacerHeight: 10 * screenScaleFactor function loadProjectFile(projectFile) { - var addToRecent = UM.WorkspaceFileHandler.getAddToRecentFilesHint(projectFile); - UM.WorkspaceFileHandler.readLocalFile(projectFile, addToRecent); + UM.WorkspaceFileHandler.readLocalFile(projectFile, base.addToRecent); } function loadModelFiles(fileUrls) { for (var i in fileUrls) { - CuraApplication.readLocalFile(fileUrls[i], "open_as_model"); + CuraApplication.readLocalFile(fileUrls[i], "open_as_model", base.addToRecent); } } diff --git a/resources/quality/trimaker_cosmosII/trimaker_cosmosII_fast.inst.cfg b/resources/quality/trimaker_cosmosII/trimaker_cosmosII_fast.inst.cfg new file mode 100644 index 0000000000..76b2004487 --- /dev/null +++ b/resources/quality/trimaker_cosmosII/trimaker_cosmosII_fast.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Fast +definition = trimaker_cosmosII + +[metadata] +setting_version = 16 +type = quality +quality_type = fast +weight = 1 +global_quality = True + +[values] +layer_height = 0.3 +speed_print = 60 \ No newline at end of file diff --git a/resources/quality/trimaker_cosmosII/trimaker_cosmosII_normal.inst.cfg b/resources/quality/trimaker_cosmosII/trimaker_cosmosII_normal.inst.cfg new file mode 100644 index 0000000000..9c6d8a1426 --- /dev/null +++ b/resources/quality/trimaker_cosmosII/trimaker_cosmosII_normal.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Normal +definition = trimaker_cosmosII + +[metadata] +setting_version = 16 +type = quality +quality_type = normal +weight = 0 +global_quality = True + +[values] +layer_height = 0.2 +speed_print = 45 diff --git a/resources/quality/trimaker_cosmosII/trimaker_cosmosII_slow.inst.cfg b/resources/quality/trimaker_cosmosII/trimaker_cosmosII_slow.inst.cfg new file mode 100644 index 0000000000..c1074f44a6 --- /dev/null +++ b/resources/quality/trimaker_cosmosII/trimaker_cosmosII_slow.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Slow +definition = trimaker_cosmosII + +[metadata] +setting_version = 16 +type = quality +quality_type = slow +weight = -1 +global_quality = True + +[values] +layer_height = 0.1 +speed_print = 30 \ No newline at end of file diff --git a/resources/quality/trimaker_nebula/trimaker_nebula_fast.inst.cfg b/resources/quality/trimaker_nebula/trimaker_nebula_fast.inst.cfg new file mode 100644 index 0000000000..9ea35c1ffc --- /dev/null +++ b/resources/quality/trimaker_nebula/trimaker_nebula_fast.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Fast +definition = trimaker_nebula + +[metadata] +setting_version = 16 +type = quality +quality_type = fast +weight = 1 +global_quality = True + +[values] +layer_height = 0.3 +speed_print = 60 \ No newline at end of file diff --git a/resources/quality/trimaker_nebula/trimaker_nebula_normal.inst.cfg b/resources/quality/trimaker_nebula/trimaker_nebula_normal.inst.cfg new file mode 100644 index 0000000000..05bb132f0e --- /dev/null +++ b/resources/quality/trimaker_nebula/trimaker_nebula_normal.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Normal +definition = trimaker_nebula + +[metadata] +setting_version = 16 +type = quality +quality_type = normal +weight = 0 +global_quality = True + +[values] +layer_height = 0.2 +speed_print = 45 diff --git a/resources/quality/trimaker_nebula/trimaker_nebula_slow.inst.cfg b/resources/quality/trimaker_nebula/trimaker_nebula_slow.inst.cfg new file mode 100644 index 0000000000..cee4fd8360 --- /dev/null +++ b/resources/quality/trimaker_nebula/trimaker_nebula_slow.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Slow +definition = trimaker_nebula + +[metadata] +setting_version = 16 +type = quality +quality_type = slow +weight = -1 +global_quality = True + +[values] +layer_height = 0.1 +speed_print = 30 \ No newline at end of file diff --git a/run_mypy.py b/run_mypy.py index ec0583d43f..4486085064 100644 --- a/run_mypy.py +++ b/run_mypy.py @@ -73,7 +73,7 @@ def main(): for i, returncode in enumerate(pool.imap(partial(call, shell=True), commands)): if returncode != 0: - print("\nCommand %s failed checking. :(" % commands[i]) + print("\nCommand {command} failed checking (code {errcode}). :(".format(command = commands[i], errcode = returncode)) success_code = 1 if success_code: print("MYPY check was completed, but did not pass")