From ee23e2cf675cbfb2ebe27fd98bee562b0cebd7ed Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Mon, 11 Mar 2024 11:01:53 +0100 Subject: [PATCH 1/5] Add native CAD plugin to Enterprise edition The native CAD plugin has been added to the requirements and reference copy operations in the Conan data file and Conan file script. Now the native CAD plugin will only be included if the enterprise build flag is set. This ensures that unnecessary dependencies are not brought into non-enterprise builds. --- conandata.yml | 9 +++++++++ conanfile.py | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/conandata.yml b/conandata.yml index 0d0452ebbe..86e56e22c2 100644 --- a/conandata.yml +++ b/conandata.yml @@ -9,6 +9,7 @@ requirements: - "pysavitar/5.3.0" - "pynest2d/5.3.0" - "curaengine_grpc_definitions/0.2.0" + - "native_cad_plugin/2.0.0" requirements_internal: - "fdm_materials/(latest)@internal/testing" - "cura_private_data/(latest)@internal/testing" @@ -41,6 +42,14 @@ pyinstaller: package: "curaengine_plugin_gradual_flow" src: "res/bundled_packages" dst: "share/cura/resources/bundled_packages" + native_cad_plugin: + package: "native_cad_plugin" + src: "res/plugins/NativeCADplugin" + dst: "share/cura/plugins/NativeCADplugin" + native_cad_plugin_bundled: + package: "native_cad_plugin" + src: "res/bundled_packages" + dst: "share/cura/resources/bundled_packages" cura_resources: package: "cura" src: "resources" diff --git a/conanfile.py b/conanfile.py index ca6b4eabd0..2eebeee991 100644 --- a/conanfile.py +++ b/conanfile.py @@ -231,6 +231,8 @@ class CuraConan(ConanFile): else: src_path = os.path.join(self.source_folder, data["src"]) else: + if data["package"] not in self.deps_cpp_info.deps: + continue src_path = os.path.join(self.deps_cpp_info[data["package"]].rootpath, data["src"]) elif "root" in data: # get the paths relative from the install folder src_path = os.path.join(self.install_folder, data["root"], data["src"]) @@ -343,6 +345,8 @@ class CuraConan(ConanFile): for req in self.conan_data["requirements"]: if self._internal and "fdm_materials" in req: continue + if not self._enterprise and "native_cad_plugin" in req: + continue self.requires(req) if self._internal: for req in self.conan_data["requirements_internal"]: @@ -393,6 +397,12 @@ class CuraConan(ConanFile): copy(self, "*", curaengine_plugin_gradual_flow.bindirs[0], self.source_folder, keep_path = False) copy(self, "bundled_*.json", curaengine_plugin_gradual_flow.resdirs[1], str(self.source_path.joinpath("resources", "bundled_packages")), keep_path = False) + if self._enterprise: + rmdir(self, str(self.source_path.joinpath("plugins", "NativeCADplugin"))) + curaengine_plugin_gradual_flow = self.dependencies["native_cad_plugin"].cpp_info + copy(self, "*", curaengine_plugin_gradual_flow.resdirs[0], str(self.source_path.joinpath("plugins", "NativeCADplugin")), keep_path = True) + copy(self, "bundled_*.json", curaengine_plugin_gradual_flow.resdirs[1], str(self.source_path.joinpath("resources", "bundled_packages")), keep_path = False) + # Copy resources of cura_binary_data cura_binary_data = self.dependencies["cura_binary_data"].cpp_info copy(self, "*", cura_binary_data.resdirs[0], str(self._share_dir.joinpath("cura")), keep_path = True) From 1046b24ee5880279953bb87801fcf144ed8babf1 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Wed, 20 Mar 2024 11:14:16 +0100 Subject: [PATCH 2/5] Fix crash in similation view CURA-11758 --- plugins/SimulationView/SimulationPass.py | 3 ++- plugins/SimulationView/SimulationView.py | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/SimulationView/SimulationPass.py b/plugins/SimulationView/SimulationPass.py index f779224203..080b02bd9e 100644 --- a/plugins/SimulationView/SimulationPass.py +++ b/plugins/SimulationView/SimulationPass.py @@ -153,7 +153,8 @@ class SimulationPass(RenderPass): # In the current layer, we show just the indicated paths if layer == self._layer_view._current_layer_num: # We look for the position of the head, searching the point of the current path - index = int(self._layer_view.getCurrentPath()) if self._layer_view.getCurrentPath() else 0 + index = int(self._layer_view.getCurrentPath()) if not math.isnan( + self._layer_view.getCurrentPath()) else 0 for polygon in layer_data.getLayer(layer).polygons: # The size indicates all values in the two-dimension array, and the second dimension is # always size 3 because we have 3D points. diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py index 2573c84cb9..10b68edaa0 100644 --- a/plugins/SimulationView/SimulationView.py +++ b/plugins/SimulationView/SimulationView.py @@ -1,5 +1,6 @@ # Copyright (c) 2021 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +import math import sys from PyQt6.QtCore import Qt @@ -216,7 +217,8 @@ class SimulationView(CuraView): Logger.warn( f"Binary search error (out of bounds): index {i}: left value {left_value} right value {right_value} and current time is {self._current_time}") - fractional_value = (self._current_time - left_value) / (right_value - left_value) + segment_duration = right_value - left_value + fractional_value = 0.0 if segment_duration == 0.0 else (self._current_time - left_value) / segment_duration self.setPath(i + fractional_value) From 0de9884295d00e4c9909da73fe1f428eb6aabb3d Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 20 Mar 2024 11:17:47 +0100 Subject: [PATCH 3/5] Tiny syntax fix --- conandata.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conandata.yml b/conandata.yml index 86e56e22c2..6d80830561 100644 --- a/conandata.yml +++ b/conandata.yml @@ -9,7 +9,7 @@ requirements: - "pysavitar/5.3.0" - "pynest2d/5.3.0" - "curaengine_grpc_definitions/0.2.0" - - "native_cad_plugin/2.0.0" + - "native_cad_plugin/2.0.0" requirements_internal: - "fdm_materials/(latest)@internal/testing" - "cura_private_data/(latest)@internal/testing" From 9662aefa37b749b0725007240dc524e1b63eccda Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Wed, 20 Mar 2024 13:34:41 +0100 Subject: [PATCH 4/5] Revert "Update model data handling in 3MFReader plugin" This reverts commit 4da17d643d91cb10b0185770c550dfc0f147e38f. --- plugins/3MFReader/WorkspaceDialog.py | 4 ++++ plugins/3MFReader/WorkspaceDialog.qml | 9 +-------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/plugins/3MFReader/WorkspaceDialog.py b/plugins/3MFReader/WorkspaceDialog.py index bc4581b749..c3e4187652 100644 --- a/plugins/3MFReader/WorkspaceDialog.py +++ b/plugins/3MFReader/WorkspaceDialog.py @@ -362,6 +362,10 @@ class WorkspaceDialog(QObject): def exportedSettingModel(self): return self._exported_settings_model + @pyqtProperty("QVariantList", notify=exportedSettingModelChanged) + def exportedSettingModelItems(self): + return self._exported_settings_model.items + @pyqtProperty(int, notify=exportedSettingModelChanged) def exportedSettingModelRowCount(self): return self._exported_settings_model.rowCount() diff --git a/plugins/3MFReader/WorkspaceDialog.qml b/plugins/3MFReader/WorkspaceDialog.qml index febd082a4c..d7e776411f 100644 --- a/plugins/3MFReader/WorkspaceDialog.qml +++ b/plugins/3MFReader/WorkspaceDialog.qml @@ -209,16 +209,9 @@ UM.Dialog { id: tableModel headers: ["category", "label", "value"] - rows: manager.exportedSettingModel.items + rows: manager.exportedSettingModelItems } } - - property var modelRows: manager.exportedSettingModel.items - onModelRowsChanged: - { - tableModel.clear() - tableModel.rows = modelRows - } } comboboxVisible: manager.qualityChangesConflict From 35d3ff2b5c23dcc92c72fcb1fdeacbfcf4ece870 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Wed, 20 Mar 2024 13:35:24 +0100 Subject: [PATCH 5/5] Only emit model once when all items have been added CURA-11720 --- plugins/3MFReader/SpecificSettingsModel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/3MFReader/SpecificSettingsModel.py b/plugins/3MFReader/SpecificSettingsModel.py index ec4a68e337..af203ad759 100644 --- a/plugins/3MFReader/SpecificSettingsModel.py +++ b/plugins/3MFReader/SpecificSettingsModel.py @@ -41,7 +41,7 @@ class SpecificSettingsModel(ListModel): "label": stack.getProperty(setting, "label"), "value": value }) - self.modelChanged.emit() + self.modelChanged.emit() def _update(self): Logger.debug(f"Updating {self.__class__.__name__}")