diff --git a/conandata.yml b/conandata.yml index 2cceca52c7..ecd873dff3 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) 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__}") 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 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)