mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-06-30 22:55:12 +08:00
User settings are now properly proposed for export
CURA-11561
This commit is contained in:
parent
2aef33f521
commit
8ad4ab90a8
@ -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()
|
||||||
|
@ -130,4 +130,6 @@ UM.Dialog
|
|||||||
}
|
}
|
||||||
|
|
||||||
buttonSpacing: UM.Theme.getSize("wide_margin").width
|
buttonSpacing: UM.Theme.getSize("wide_margin").width
|
||||||
|
|
||||||
|
onClosing: manager.notifyClosed()
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
@ -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'))
|
|
Loading…
x
Reference in New Issue
Block a user