User settings are now properly proposed for export

CURA-11561
This commit is contained in:
Erwan MATHIEU 2024-01-31 09:26:49 +01:00
parent 2aef33f521
commit 8ad4ab90a8
6 changed files with 114 additions and 46 deletions

View File

@ -1,7 +1,7 @@
# Copyright (c) 2024 Ultimaker B.V. # Copyright (c) 2024 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher. # Cura is released under the terms of the LGPLv3 or higher.
from PyQt6.QtCore import pyqtSignal, QObject, pyqtProperty, QCoreApplication, QUrl from PyQt6.QtCore import pyqtSignal, QObject, pyqtProperty, QCoreApplication, QUrl, pyqtSlot
from PyQt6.QtGui import QDesktopServices from PyQt6.QtGui import QDesktopServices
from typing import List, Optional, Dict, cast from typing import List, Optional, Dict, cast
@ -26,6 +26,8 @@ i18n_catalog = i18nCatalog("cura")
class PCBDialog(QObject): class PCBDialog(QObject):
finished = pyqtSignal()
def __init__(self, parent = None) -> None: def __init__(self, parent = None) -> None:
super().__init__(parent) super().__init__(parent)
@ -35,3 +37,7 @@ class PCBDialog(QObject):
def show(self) -> None: def show(self) -> None:
self._view.show() self._view.show()
@pyqtSlot()
def notifyClosed(self):
self.finished.emit()

View File

@ -130,4 +130,6 @@ UM.Dialog
} }
buttonSpacing: UM.Theme.getSize("wide_margin").width buttonSpacing: UM.Theme.getSize("wide_margin").width
onClosing: manager.notifyClosed()
} }

View File

@ -64,4 +64,8 @@ class PCBWriter(MeshWriter):
def _write(self, stream, nodes, mode): def _write(self, stream, nodes, mode):
self._config_dialog = PCBDialog() self._config_dialog = PCBDialog()
self._config_dialog.finished.connect(self._onDialogClosed)
self._config_dialog.show() self._config_dialog.show()
def _onDialogClosed(self):
self._main_thread_lock.release()

View File

@ -1,11 +1,7 @@
# Copyright (c) 2024 Ultimaker B.V. # Copyright (c) 2024 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher. # Cura is released under the terms of the LGPLv3 or higher.
from PyQt6.QtCore import Qt, QObject, pyqtProperty from PyQt6.QtCore import QObject, pyqtProperty
from UM.FlameProfiler import pyqtSlot
from UM.Application import Application
from UM.Qt.ListModel import ListModel
from UM.Logger import Logger
class SettingsExport(QObject): class SettingsExport(QObject):

View File

@ -3,13 +3,7 @@
from enum import IntEnum from enum import IntEnum
from PyQt6.QtCore import Qt, QObject, pyqtProperty, pyqtEnum from PyQt6.QtCore import QObject, pyqtProperty, pyqtEnum
from UM.FlameProfiler import pyqtSlot
from UM.Application import Application
from UM.Qt.ListModel import ListModel
from UM.Logger import Logger
from .SettingExport import SettingsExport
class SettingsExportGroup(QObject): class SettingsExportGroup(QObject):

View File

@ -1,49 +1,115 @@
# Copyright (c) 2024 Ultimaker B.V. # Copyright (c) 2024 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher. # Cura is released under the terms of the LGPLv3 or higher.
from PyQt6.QtCore import QObject, Qt, pyqtProperty from PyQt6.QtCore import QObject, pyqtProperty
from UM.FlameProfiler import pyqtSlot
from UM.Application import Application
from UM.Qt.ListModel import ListModel
from UM.Logger import Logger
from .SettingsExportGroup import SettingsExportGroup from .SettingsExportGroup import SettingsExportGroup
from .SettingExport import SettingsExport from .SettingExport import SettingsExport
from cura.CuraApplication import CuraApplication
from UM.Settings.SettingDefinition import SettingDefinition
from cura.Settings.ExtruderManager import ExtruderManager
class SettingsExportModel(QObject): class SettingsExportModel(QObject):
EXPORTABLE_SETTINGS = {'infill_sparse_density',
'adhesion_type',
'support_enable',
'infill_pattern',
'support_type',
'support_structure',
'support_angle',
'support_infill_rate',
'ironing_enabled',
'fill_outline_gaps',
'coasting_enable',
'skin_monotonic',
'z_seam_position',
'infill_before_walls',
'ironing_only_highest_layer',
'xy_offset',
'adaptive_layer_height_enabled',
'brim_gap',
'support_offset',
'brim_outside_only',
'magic_spiralize',
'slicing_tolerance',
'outer_inset_first',
'magic_fuzzy_skin_outside_only',
'conical_overhang_enabled',
'min_infill_area',
'small_hole_max_size',
'magic_mesh_surface_mode',
'carve_multiple_volumes',
'meshfix_union_all_remove_holes',
'support_tree_rest_preference',
'small_feature_max_length',
'draft_shield_enabled',
'brim_smart_ordering',
'ooze_shield_enabled',
'bottom_skin_preshrink',
'skin_edge_support_thickness',
'alternate_carve_order',
'top_skin_preshrink',
'interlocking_enable'}
def __init__(self, parent = None): def __init__(self, parent = None):
super().__init__(parent) super().__init__(parent)
self._settingsGroups = [] self._settings_groups = []
self._updateSettingsExportGroups()
application = CuraApplication.getInstance()
# Display global settings
global_stack = application.getGlobalContainerStack()
self._settings_groups.append(SettingsExportGroup("Global settings",
SettingsExportGroup.Category.Global,
self._exportSettings(global_stack)))
# Display per-extruder settings
extruders_stacks = ExtruderManager.getInstance().getUsedExtruderStacks()
for extruder_stack in extruders_stacks:
color = ""
if extruder_stack.material:
color = extruder_stack.material.getMetaDataEntry("color_code")
self._settings_groups.append(SettingsExportGroup("Extruder settings",
SettingsExportGroup.Category.Extruder,
self._exportSettings(extruder_stack),
extruder_index=extruder_stack.position,
extruder_color=color))
# Display per-model settings
scene_root = application.getController().getScene().getRoot()
for scene_node in scene_root.getChildren():
per_model_stack = scene_node.callDecoration("getStack")
if per_model_stack is not None:
self._settings_groups.append(SettingsExportGroup("Model settings",
SettingsExportGroup.Category.Model,
self._exportSettings(per_model_stack),
scene_node.getName()))
@pyqtProperty(list, constant=True) @pyqtProperty(list, constant=True)
def settingsGroups(self): def settingsGroups(self):
return self._settingsGroups return self._settings_groups
def _updateSettingsExportGroups(self): @staticmethod
self._settingsGroups.append(SettingsExportGroup("Global settings", def _exportSettings(settings_stack):
SettingsExportGroup.Category.Global, user_settings_container = settings_stack.getTop()
[SettingsExport("Generate Support", "Enabled"), user_keys = user_settings_container.getAllKeys()
SettingsExport("Support Type", "Tree")]))
self._settingsGroups.append(SettingsExportGroup("Extruder settings", settings_export = []
SettingsExportGroup.Category.Extruder,
[SettingsExport("Brim Width", "0.7mm")], for setting_to_export in user_keys.intersection(SettingsExportModel.EXPORTABLE_SETTINGS):
extruder_index=1, label = settings_stack.getProperty(setting_to_export, "label")
extruder_color='#ff0000')) value = settings_stack.getProperty(setting_to_export, "value")
self._settingsGroups.append(SettingsExportGroup("Extruder settings",
SettingsExportGroup.Category.Extruder, setting_type = settings_stack.getProperty(setting_to_export, "type")
[], if setting_type is not None:
extruder_index=8, # This is not very good looking, but will do for now
extruder_color='#008fff')) value = SettingDefinition.settingValueToString(setting_type, value)
self._settingsGroups.append(SettingsExportGroup("Model settings", else:
SettingsExportGroup.Category.Model, value = str(value)
[SettingsExport("Brim Width", "20.0 mm"),
SettingsExport("Z Hop when retracted", "Disabled")], settings_export.append(SettingsExport(label, value))
'hypercube.stl'))
self._settingsGroups.append(SettingsExportGroup("Model settings", return settings_export
SettingsExportGroup.Category.Model,
[SettingsExport("Walls Thickness", "3.0 mm"),
SettingsExport("Enable Ironing", "Enabled")],
'homer-simpson.stl'))