SettingsExportModel.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. # Copyright (c) 2024 Ultimaker B.V.
  2. # Cura is released under the terms of the LGPLv3 or higher.
  3. from PyQt6.QtCore import QObject, pyqtProperty
  4. from .SettingsExportGroup import SettingsExportGroup
  5. from .SettingExport import SettingsExport
  6. from cura.CuraApplication import CuraApplication
  7. from UM.Settings.SettingDefinition import SettingDefinition
  8. from cura.Settings.ExtruderManager import ExtruderManager
  9. class SettingsExportModel(QObject):
  10. EXPORTABLE_SETTINGS = {'infill_sparse_density',
  11. 'adhesion_type',
  12. 'support_enable',
  13. 'infill_pattern',
  14. 'support_type',
  15. 'support_structure',
  16. 'support_angle',
  17. 'support_infill_rate',
  18. 'ironing_enabled',
  19. 'fill_outline_gaps',
  20. 'coasting_enable',
  21. 'skin_monotonic',
  22. 'z_seam_position',
  23. 'infill_before_walls',
  24. 'ironing_only_highest_layer',
  25. 'xy_offset',
  26. 'adaptive_layer_height_enabled',
  27. 'brim_gap',
  28. 'support_offset',
  29. 'brim_outside_only',
  30. 'magic_spiralize',
  31. 'slicing_tolerance',
  32. 'outer_inset_first',
  33. 'magic_fuzzy_skin_outside_only',
  34. 'conical_overhang_enabled',
  35. 'min_infill_area',
  36. 'small_hole_max_size',
  37. 'magic_mesh_surface_mode',
  38. 'carve_multiple_volumes',
  39. 'meshfix_union_all_remove_holes',
  40. 'support_tree_rest_preference',
  41. 'small_feature_max_length',
  42. 'draft_shield_enabled',
  43. 'brim_smart_ordering',
  44. 'ooze_shield_enabled',
  45. 'bottom_skin_preshrink',
  46. 'skin_edge_support_thickness',
  47. 'alternate_carve_order',
  48. 'top_skin_preshrink',
  49. 'interlocking_enable'}
  50. def __init__(self, parent = None):
  51. super().__init__(parent)
  52. self._settings_groups = []
  53. application = CuraApplication.getInstance()
  54. # Display global settings
  55. global_stack = application.getGlobalContainerStack()
  56. self._settings_groups.append(SettingsExportGroup("Global settings",
  57. SettingsExportGroup.Category.Global,
  58. self._exportSettings(global_stack)))
  59. # Display per-extruder settings
  60. extruders_stacks = ExtruderManager.getInstance().getUsedExtruderStacks()
  61. for extruder_stack in extruders_stacks:
  62. color = ""
  63. if extruder_stack.material:
  64. color = extruder_stack.material.getMetaDataEntry("color_code")
  65. self._settings_groups.append(SettingsExportGroup("Extruder settings",
  66. SettingsExportGroup.Category.Extruder,
  67. self._exportSettings(extruder_stack),
  68. extruder_index=extruder_stack.position,
  69. extruder_color=color))
  70. # Display per-model settings
  71. scene_root = application.getController().getScene().getRoot()
  72. for scene_node in scene_root.getChildren():
  73. per_model_stack = scene_node.callDecoration("getStack")
  74. if per_model_stack is not None:
  75. self._settings_groups.append(SettingsExportGroup("Model settings",
  76. SettingsExportGroup.Category.Model,
  77. self._exportSettings(per_model_stack),
  78. scene_node.getName()))
  79. @pyqtProperty(list, constant=True)
  80. def settingsGroups(self):
  81. return self._settings_groups
  82. @staticmethod
  83. def _exportSettings(settings_stack):
  84. user_settings_container = settings_stack.getTop()
  85. user_keys = user_settings_container.getAllKeys()
  86. settings_export = []
  87. for setting_to_export in user_keys.intersection(SettingsExportModel.EXPORTABLE_SETTINGS):
  88. label = settings_stack.getProperty(setting_to_export, "label")
  89. value = settings_stack.getProperty(setting_to_export, "value")
  90. setting_type = settings_stack.getProperty(setting_to_export, "type")
  91. if setting_type is not None:
  92. # This is not very good looking, but will do for now
  93. value = SettingDefinition.settingValueToString(setting_type, value)
  94. else:
  95. value = str(value)
  96. settings_export.append(SettingsExport(label, value))
  97. return settings_export