From 1f5a18d7d75d89de3add89b4e13a1ffe5d825d8c Mon Sep 17 00:00:00 2001 From: Saumya Jain Date: Wed, 8 May 2024 14:31:33 +0200 Subject: [PATCH 01/14] added resolve function to take the values from material profiles --- resources/definitions/fdmprinter.def.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 6f9b4de7fdc..35fd6df843d 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6180,6 +6180,7 @@ "type": "bool", "default_value": false, "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "resolve": "any(extruderValues('raft_remove_inside_corners'))", "settable_per_mesh": false, "settable_per_extruder": false, "children": From 22c17c68acef57c9ad3753c9f319904ae5c56dbb Mon Sep 17 00:00:00 2001 From: Frederic Meeuwissen <13856291+Frederic98@users.noreply.github.com> Date: Wed, 8 May 2024 16:26:07 +0200 Subject: [PATCH 02/14] Create um_f4_global_Fast_Quality.inst.cfg --- .../um_f4_global_Fast_Quality.inst.cfg | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 resources/quality/ultimaker_factor4/um_f4_global_Fast_Quality.inst.cfg diff --git a/resources/quality/ultimaker_factor4/um_f4_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_global_Fast_Quality.inst.cfg new file mode 100644 index 00000000000..44783fa7881 --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_global_Fast_Quality.inst.cfg @@ -0,0 +1,15 @@ +[general] +definition = ultimaker_factor4 +name = Normal +version = 4 + +[metadata] +global_quality = True +quality_type = fast +setting_version = 23 +type = quality +weight = -1 + +[values] +layer_height = =round(0.15 * material_shrinkage_percentage_z / 100, 5) + From 674d28a37198e5512357357843a8f38f100d820b Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 14 May 2024 10:03:12 +0200 Subject: [PATCH 03/14] Add resolve functions for raft_*_remove_inside_corners settings --- resources/definitions/fdmprinter.def.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 35fd6df843d..5a91188eee3 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6193,6 +6193,7 @@ "value": "raft_remove_inside_corners", "default_value": false, "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "resolve": "any(extruderValues('raft_base_remove_inside_corners'))", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -6204,6 +6205,7 @@ "value": "raft_remove_inside_corners", "default_value": false, "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "resolve": "any(extruderValues('raft_interface_remove_inside_corners'))", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -6215,6 +6217,7 @@ "value": "raft_remove_inside_corners", "default_value": false, "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "resolve": "any(extruderValues('raft_surface_remove_inside_corners'))", "settable_per_mesh": false, "settable_per_extruder": false } From b75f168c555f9e963bf195b48fbad812b25ac743 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 14 May 2024 14:54:00 +0200 Subject: [PATCH 04/14] Fix wrong placement of objects children when saving to 3MF We now ignore the auto-centering of meshes for children objects, because it messes up with their relative position with their parent. Only the top-level objects needs to be centered, the children will follow. CURA-11902 --- plugins/3MFWriter/ThreeMFWriter.py | 33 ++++++++++++++++++------------ 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py index d33f0e374a8..1459806045b 100644 --- a/plugins/3MFWriter/ThreeMFWriter.py +++ b/plugins/3MFWriter/ThreeMFWriter.py @@ -96,7 +96,8 @@ def setStoreArchive(self, store_archive): @staticmethod def _convertUMNodeToSavitarNode(um_node, transformation = Matrix(), - exported_settings: Optional[Dict[str, Set[str]]] = None): + exported_settings: Optional[Dict[str, Set[str]]] = None, + center_mesh = False): """Convenience function that converts an Uranium SceneNode object to a SavitarSceneNode :returns: Uranium Scene node. @@ -111,16 +112,21 @@ def _convertUMNodeToSavitarNode(um_node, savitar_node = Savitar.SceneNode() savitar_node.setName(um_node.getName()) - node_matrix = Matrix() + node_matrix = um_node.getLocalTransformation() mesh_data = um_node.getMeshData() - # compensate for original center position, if object(s) is/are not around its zero position - if mesh_data is not None: - extents = mesh_data.getExtents() - if extents is not None: - # We use a different coordinate space while writing, so flip Z and Y - center_vector = Vector(extents.center.x, extents.center.z, extents.center.y) - node_matrix.setByTranslation(center_vector) - node_matrix.multiply(um_node.getLocalTransformation()) + + if center_mesh: + node_matrix = Matrix() + # compensate for original center position, if object(s) is/are not around its zero position + if mesh_data is not None: + extents = mesh_data.getExtents() + if extents is not None: + # We use a different coordinate space while writing, so flip Z and Y + center_vector = Vector(extents.center.x, extents.center.y, extents.center.z) + node_matrix.setByTranslation(center_vector) + node_matrix.multiply(um_node.getLocalTransformation()) + else: + node_matrix = um_node.getLocalTransformation() matrix_string = ThreeMFWriter._convertMatrixToString(node_matrix.preMultiply(transformation)) @@ -147,7 +153,7 @@ def _convertUMNodeToSavitarNode(um_node, for key in changed_setting_keys: savitar_node.setSetting("cura:" + key, str(stack.getProperty(key, "value"))) else: - # We want to export only the specified settings + # We want to export only the specified settings if um_node.getName() in exported_settings: model_exported_settings = exported_settings[um_node.getName()] @@ -283,7 +289,8 @@ def write(self, stream, nodes, mode = MeshWriter.OutputMode.BinaryMode, export_s for root_child in node.getChildren(): savitar_node = ThreeMFWriter._convertUMNodeToSavitarNode(root_child, transformation_matrix, - exported_model_settings) + exported_model_settings, + center_mesh = True) if savitar_node: savitar_scene.addSceneNode(savitar_node) else: @@ -442,7 +449,7 @@ def _createSnapshot(self): def sceneNodesToString(scene_nodes: [SceneNode]) -> str: savitar_scene = Savitar.Scene() for scene_node in scene_nodes: - savitar_node = ThreeMFWriter._convertUMNodeToSavitarNode(scene_node) + savitar_node = ThreeMFWriter._convertUMNodeToSavitarNode(scene_node, center_mesh = True) savitar_scene.addSceneNode(savitar_node) parser = Savitar.ThreeMFParser() scene_string = parser.sceneToString(savitar_scene) From 2e5e43291ee08efe136c7e4463cd009eeaa5f80e Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 14 May 2024 16:27:16 +0200 Subject: [PATCH 05/14] Fix missing error message when slicing with disabled extruder Following the removal of the get/setMessage methods in the Job class, the StartSliceJob has not been updated and still used them. We now use a specific variable for storing the disabled extruders and properly display them. CURA-11904 --- plugins/CuraEngineBackend/CuraEngineBackend.py | 2 +- plugins/CuraEngineBackend/StartSliceJob.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index c73dee2fb08..dd7987bc42f 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -544,7 +544,7 @@ def _onStartSliceCompleted(self, job: StartSliceJob) -> None: if job.getResult() == StartJobResult.ObjectsWithDisabledExtruder: self._error_message = Message(catalog.i18nc("@info:status", - "Unable to slice because there are objects associated with disabled Extruder %s.") % job.getMessage(), + "Unable to slice because there are objects associated with disabled Extruder %s.") % job.getAssociatedDisabledExtruders(), title = catalog.i18nc("@info:title", "Unable to slice"), message_type = Message.MessageType.WARNING) self._error_message.show() diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 3a1d7ce4315..9caadbdff69 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -146,6 +146,7 @@ def __init__(self, slice_message: Arcus.PythonMessage) -> None: self._slice_message: Arcus.PythonMessage = slice_message self._is_cancelled: bool = False self._build_plate_number: Optional[int] = None + self._associated_disabled_extruders: Optional[str] = None # cache for all setting values from all stacks (global & extruder) for the current machine self._all_extruders_settings: Optional[Dict[str, Any]] = None @@ -153,6 +154,9 @@ def __init__(self, slice_message: Arcus.PythonMessage) -> None: def getSliceMessage(self) -> Arcus.PythonMessage: return self._slice_message + def getAssociatedDisabledExtruders(self) -> Optional[str]: + return self._associated_disabled_extruders + def setBuildPlate(self, build_plate_number: int) -> None: self._build_plate_number = build_plate_number @@ -334,7 +338,7 @@ def run(self) -> None: if has_model_with_disabled_extruders: self.setResult(StartJobResult.ObjectsWithDisabledExtruder) associated_disabled_extruders = {p + 1 for p in associated_disabled_extruders} - self.setMessage(", ".join(map(str, sorted(associated_disabled_extruders)))) + self._associated_disabled_extruders = ", ".join(map(str, sorted(associated_disabled_extruders))) return # There are cases when there is nothing to slice. This can happen due to one at a time slicing not being From 3fbc91112376d51498d93440c3a0df4d12fb4817 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 15 May 2024 09:09:29 +0200 Subject: [PATCH 06/14] Remove useless variable declaration The node_matrix is defined in the following if whatever the condition, so there is no need to define it first. CURA-11902 --- plugins/3MFWriter/ThreeMFWriter.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py index 1459806045b..5a9fa487fc9 100644 --- a/plugins/3MFWriter/ThreeMFWriter.py +++ b/plugins/3MFWriter/ThreeMFWriter.py @@ -112,7 +112,6 @@ def _convertUMNodeToSavitarNode(um_node, savitar_node = Savitar.SceneNode() savitar_node.setName(um_node.getName()) - node_matrix = um_node.getLocalTransformation() mesh_data = um_node.getMeshData() if center_mesh: From 86ccddbb1d00eb121506095e21c46148aa688c33 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Fri, 17 May 2024 09:56:49 +0200 Subject: [PATCH 07/14] Change `value` to `resolve` CURA-11912 --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 5a91188eee3..f10ad98e4bb 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6821,7 +6821,7 @@ "label": "Prime Tower Type", "description": "How to generate the prime tower:
  • Normal: create a bucket in which secondary materials are primed
  • Interleaved: create a prime tower as sparse as possible. This will save time and filament, but is only possible if the used materials adhere to each other
", "type": "enum", - "value": "'interleaved' if (all(material_type_var == extruderValues('material_type')[0] for material_type_var in extruderValues('material_type')) and all(material_brand_var == extruderValues('material_brand')[0] for material_brand_var in extruderValues('material_brand'))) else 'normal'", + "resolve": "'interleaved' if (all(material_type_var == extruderValues('material_type')[0] for material_type_var in extruderValues('material_type')) and all(material_brand_var == extruderValues('material_brand')[0] for material_brand_var in extruderValues('material_brand'))) else 'normal'", "options": { "normal": "Normal", From 5af225ec2197b9a86608a1ae5df6d26b1c5647cc Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 23 May 2024 14:45:56 +0200 Subject: [PATCH 08/14] Set version 5.7.2 --- conandata.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/conandata.yml b/conandata.yml index 0edeed3306f..84251d72081 100644 --- a/conandata.yml +++ b/conandata.yml @@ -1,9 +1,9 @@ -version: "5.7.1" +version: "5.7.2" requirements: - - "uranium/5.7.0" - - "curaengine/5.7.1" - - "cura_binary_data/5.7.1" - - "fdm_materials/5.7.1" + - "uranium/5.7.2" + - "curaengine/5.7.2" + - "cura_binary_data/5.7.2" + - "fdm_materials/5.7.2" - "curaengine_plugin_gradual_flow/0.1.0-beta.3" - "dulcificum/0.2.0-alpha.0" - "pysavitar/5.3.0" From a3d70e9429877700ad0d09b2593ad24b59292a29 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 27 May 2024 16:26:26 +0200 Subject: [PATCH 09/14] Allow setting interleaved prime tower base on material CURA-11931 --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index f10ad98e4bb..adfe2b05ddb 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6821,7 +6821,7 @@ "label": "Prime Tower Type", "description": "How to generate the prime tower:
  • Normal: create a bucket in which secondary materials are primed
  • Interleaved: create a prime tower as sparse as possible. This will save time and filament, but is only possible if the used materials adhere to each other
", "type": "enum", - "resolve": "'interleaved' if (all(material_type_var == extruderValues('material_type')[0] for material_type_var in extruderValues('material_type')) and all(material_brand_var == extruderValues('material_brand')[0] for material_brand_var in extruderValues('material_brand'))) else 'normal'", + "resolve": "'interleaved' if all(mode == 'interleaved' for mode in extruderValues('prime_tower_mode')) else 'interleaved' if (all(material_type_var == extruderValues('material_type')[0] for material_type_var in extruderValues('material_type')) and all(material_brand_var == extruderValues('material_brand')[0] for material_brand_var in extruderValues('material_brand'))) else 'normal'", "options": { "normal": "Normal", From e863eee1561ac8e8169d7a1c13455be2f06b5478 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 30 May 2024 09:18:08 +0200 Subject: [PATCH 10/14] Disable wait for temperature for UltiMaker printers Previously the material_print_temp_prepend and material_print_temp_wait were ignored for Griffin-flavored printers. Now we do handle them because we want the prepend, but we don't want the wait so disable it. --- resources/definitions/ultimaker.def.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/definitions/ultimaker.def.json b/resources/definitions/ultimaker.def.json index 3821fdefd6c..614f88242df 100644 --- a/resources/definitions/ultimaker.def.json +++ b/resources/definitions/ultimaker.def.json @@ -80,6 +80,7 @@ "maximum_value_warning": "120", "minimum_value": "0" }, + "material_print_temp_wait": { "value": false }, "material_print_temperature": { "minimum_value": "0" }, "material_standby_temperature": { From 219543dd4324ffd1ec012b1e58b3ac858814efb3 Mon Sep 17 00:00:00 2001 From: wawanbreton Date: Thu, 30 May 2024 07:19:37 +0000 Subject: [PATCH 11/14] Applied printer-linter format --- resources/definitions/ultimaker.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/ultimaker.def.json b/resources/definitions/ultimaker.def.json index 614f88242df..97bb099ea47 100644 --- a/resources/definitions/ultimaker.def.json +++ b/resources/definitions/ultimaker.def.json @@ -80,7 +80,7 @@ "maximum_value_warning": "120", "minimum_value": "0" }, - "material_print_temp_wait": { "value": false }, + "material_print_temp_wait": { "value": false }, "material_print_temperature": { "minimum_value": "0" }, "material_standby_temperature": { From 11f2be15f420d1aa67668291956bcbf06fe6e168 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 30 May 2024 09:54:47 +0200 Subject: [PATCH 12/14] Updated Changelog for Cura 5.7.2 --- resources/texts/change_log.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/resources/texts/change_log.txt b/resources/texts/change_log.txt index 18833038966..4d3fce3a662 100644 --- a/resources/texts/change_log.txt +++ b/resources/texts/change_log.txt @@ -1,3 +1,13 @@ +[5.7.2] + +* Bugfixes +- Fixed a bug where modifier meshes and support meshes were not loaded in the correct position, should resolve https://github.com/Ultimaker/Cura/issues/18761 (and https://github.com/5axes/SpoonAntiWarping/issues/8) +- Primeblobs were not printed for a second extruder +- Interleaved prime tower can now be printed with a raft +- Improved behaviors for start temperature for multiple extruders +- Improved preheating logic when using a raft with multiple extruders +- Enabled Raft Remove Inside Corners and Prime Tower Mode to be shipped with a material profile + [5.7.1] * Introducing the UltiMaker Factor 4 From 044cc00c5c99895bb59eb3e99aa5c8407059903a Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Wed, 12 Jun 2024 13:29:23 +0200 Subject: [PATCH 13/14] Dependencies: Update attrs, as twisted depends on newer. --- requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 3024096234c..ba2b2927e05 100644 --- a/requirements.txt +++ b/requirements.txt @@ -206,9 +206,9 @@ chardet==3.0.4 \ idna==2.8 \ --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c -attrs==21.2.0 \ - --hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \ - --hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb +attrs==21.3.0 \ + --hash=sha256:8f7335278dedd26b58c38e006338242cc0977f06d51579b2b8b87b9b33bff66c \ + --hash=sha256:50f3c9b216dc9021042f71b392859a773b904ce1a029077f58f6598272432045 requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 From af267af13608870024d6c8b5e15e6a92c9cfa68a Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Wed, 12 Jun 2024 14:06:35 +0200 Subject: [PATCH 14/14] Dependencies: Update incremental, as twisted depends on newer. --- requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index ba2b2927e05..c55e282fa52 100644 --- a/requirements.txt +++ b/requirements.txt @@ -222,9 +222,9 @@ constantly==15.1.0 \ hyperlink==21.0.0 \ --hash=sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b \ --hash=sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4 -incremental==21.3.0 \ - --hash=sha256:02f5de5aff48f6b9f665d99d48bfc7ec03b6e3943210de7cfc88856d755d6f57 \ - --hash=sha256:92014aebc6a20b78a8084cdd5645eeaa7f74b8933f70fa3ada2cfbd1e3b54321 +incremental==22.10.0 \ + --hash=sha256:b864a1f30885ee72c5ac2835a761b8fe8aa9c28b9395cacf27286602688d3e51 \ + --hash=sha256:912feeb5e0f7e0188e6f42241d2f450002e11bbc0937c65865045854c24c0bd0 zope.interface==5.4.0 \ --hash=sha256:0f91b5b948686659a8e28b728ff5e74b1be6bf40cb04704453617e5f1e945ef3 \ --hash=sha256:3c02411a3b62668200910090a0dff17c0b25aaa36145082a5a6adf08fa281e54 \