mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-16 03:07:53 -06:00
Merge branch 'master' of github.com:Ultimaker/Cura
This commit is contained in:
commit
8934555bd6
11 changed files with 109 additions and 54 deletions
|
@ -473,14 +473,40 @@ class BuildVolume(SceneNode):
|
||||||
self._has_errors = prime_tower_collision or prime_collision
|
self._has_errors = prime_tower_collision or prime_collision
|
||||||
self._disallowed_areas = areas
|
self._disallowed_areas = areas
|
||||||
|
|
||||||
## Private convenience function to get a setting from the adhesion extruder.
|
## Private convenience function to get a setting from the adhesion
|
||||||
def _getSettingProperty(self, setting_key, property = "value"):
|
# extruder.
|
||||||
|
#
|
||||||
|
# \param setting_key The key of the setting to get.
|
||||||
|
# \param property The property to get from the setting.
|
||||||
|
# \return The property of the specified setting in the adhesion extruder.
|
||||||
|
def _getSettingFromAdhesionExtruder(self, setting_key, property = "value"):
|
||||||
|
return self._getSettingFromExtruder(setting_key, "adhesion_extruder_nr", property)
|
||||||
|
|
||||||
|
## Private convenience function to get a setting from the support infill
|
||||||
|
# extruder.
|
||||||
|
#
|
||||||
|
# \param setting_key The key of the setting to get.
|
||||||
|
# \param property The property to get from the setting.
|
||||||
|
# \return The property of the specified setting in the support infill
|
||||||
|
# extruder.
|
||||||
|
def _getSettingFromSupportInfillExtruder(self, setting_key, property = "value"):
|
||||||
|
return self._getSettingFromExtruder(setting_key, "support_infill_extruder_nr", property)
|
||||||
|
|
||||||
|
## Helper function to get a setting from an extruder specified in another
|
||||||
|
# setting.
|
||||||
|
#
|
||||||
|
# \param setting_key The key of the setting to get.
|
||||||
|
# \param extruder_setting_key The key of the setting that specifies from
|
||||||
|
# which extruder to get the setting, if there are multiple extruders.
|
||||||
|
# \param property The property to get from the setting.
|
||||||
|
# \return The property of the specified setting in the specified extruder.
|
||||||
|
def _getSettingFromExtruder(self, setting_key, extruder_setting_key, property = "value"):
|
||||||
multi_extrusion = self._global_container_stack.getProperty("machine_extruder_count", "value") > 1
|
multi_extrusion = self._global_container_stack.getProperty("machine_extruder_count", "value") > 1
|
||||||
|
|
||||||
if not multi_extrusion:
|
if not multi_extrusion:
|
||||||
return self._global_container_stack.getProperty(setting_key, property)
|
return self._global_container_stack.getProperty(setting_key, property)
|
||||||
|
|
||||||
extruder_index = self._global_container_stack.getProperty("adhesion_extruder_nr", "value")
|
extruder_index = self._global_container_stack.getProperty(extruder_setting_key, "value")
|
||||||
|
|
||||||
if extruder_index == "-1": # If extruder index is -1 use global instead
|
if extruder_index == "-1": # If extruder index is -1 use global instead
|
||||||
return self._global_container_stack.getProperty(setting_key, property)
|
return self._global_container_stack.getProperty(setting_key, property)
|
||||||
|
@ -505,9 +531,9 @@ class BuildVolume(SceneNode):
|
||||||
|
|
||||||
adhesion_type = container_stack.getProperty("adhesion_type", "value")
|
adhesion_type = container_stack.getProperty("adhesion_type", "value")
|
||||||
if adhesion_type == "skirt":
|
if adhesion_type == "skirt":
|
||||||
skirt_distance = self._getSettingProperty("skirt_gap", "value")
|
skirt_distance = self._getSettingFromAdhesionExtruder("skirt_gap")
|
||||||
skirt_line_count = self._getSettingProperty("skirt_line_count", "value")
|
skirt_line_count = self._getSettingFromAdhesionExtruder("skirt_line_count")
|
||||||
bed_adhesion_size = skirt_distance + (skirt_line_count * self._getSettingProperty("skirt_brim_line_width", "value"))
|
bed_adhesion_size = skirt_distance + (skirt_line_count * self._getSettingFromAdhesionExtruder("skirt_brim_line_width"))
|
||||||
if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1:
|
if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1:
|
||||||
adhesion_extruder_nr = int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value"))
|
adhesion_extruder_nr = int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value"))
|
||||||
extruder_values = ExtruderManager.getInstance().getAllExtruderValues("skirt_brim_line_width")
|
extruder_values = ExtruderManager.getInstance().getAllExtruderValues("skirt_brim_line_width")
|
||||||
|
@ -515,7 +541,7 @@ class BuildVolume(SceneNode):
|
||||||
for value in extruder_values:
|
for value in extruder_values:
|
||||||
bed_adhesion_size += value
|
bed_adhesion_size += value
|
||||||
elif adhesion_type == "brim":
|
elif adhesion_type == "brim":
|
||||||
bed_adhesion_size = self._getSettingProperty("brim_line_count", "value") * self._getSettingProperty("skirt_brim_line_width", "value")
|
bed_adhesion_size = self._getSettingFromAdhesionExtruder("brim_line_count") * self._getSettingFromAdhesionExtruder("skirt_brim_line_width")
|
||||||
if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1:
|
if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1:
|
||||||
adhesion_extruder_nr = int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value"))
|
adhesion_extruder_nr = int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value"))
|
||||||
extruder_values = ExtruderManager.getInstance().getAllExtruderValues("skirt_brim_line_width")
|
extruder_values = ExtruderManager.getInstance().getAllExtruderValues("skirt_brim_line_width")
|
||||||
|
@ -523,7 +549,7 @@ class BuildVolume(SceneNode):
|
||||||
for value in extruder_values:
|
for value in extruder_values:
|
||||||
bed_adhesion_size += value
|
bed_adhesion_size += value
|
||||||
elif adhesion_type == "raft":
|
elif adhesion_type == "raft":
|
||||||
bed_adhesion_size = self._getSettingProperty("raft_margin", "value")
|
bed_adhesion_size = self._getSettingFromAdhesionExtruder("raft_margin")
|
||||||
else:
|
else:
|
||||||
raise Exception("Unknown bed adhesion type. Did you forget to update the build volume calculations for your new bed adhesion type?")
|
raise Exception("Unknown bed adhesion type. Did you forget to update the build volume calculations for your new bed adhesion type?")
|
||||||
|
|
||||||
|
@ -534,10 +560,12 @@ class BuildVolume(SceneNode):
|
||||||
farthest_shield_distance = max(farthest_shield_distance, container_stack.getProperty("ooze_shield_dist", "value"))
|
farthest_shield_distance = max(farthest_shield_distance, container_stack.getProperty("ooze_shield_dist", "value"))
|
||||||
|
|
||||||
move_from_wall_radius = 0 # Moves that start from outer wall.
|
move_from_wall_radius = 0 # Moves that start from outer wall.
|
||||||
if self._getSettingProperty("infill_wipe_dist", "value"):
|
if self._getSettingFromAdhesionExtruder("infill_wipe_dist"):
|
||||||
move_from_wall_radius = max(move_from_wall_radius, self._getSettingProperty("infill_wipe_dist", "value"))
|
move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("infill_wipe_dist"))
|
||||||
if self._getSettingProperty("travel_avoid_distance", "value"):
|
if self._getSettingFromAdhesionExtruder("travel_avoid_distance"):
|
||||||
move_from_wall_radius = max(move_from_wall_radius, self._getSettingProperty("travel_avoid_distance", "value"))
|
move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("travel_avoid_distance"))
|
||||||
|
if self._getSettingFromSupportInfillExtruder("support_offset"):
|
||||||
|
move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromSupportInfillExtruder("support_offset"))
|
||||||
|
|
||||||
#Now combine our different pieces of data to get the final border size.
|
#Now combine our different pieces of data to get the final border size.
|
||||||
border_size = max(farthest_shield_distance, move_from_wall_radius, bed_adhesion_size)
|
border_size = max(farthest_shield_distance, move_from_wall_radius, bed_adhesion_size)
|
||||||
|
@ -551,4 +579,4 @@ class BuildVolume(SceneNode):
|
||||||
_prime_settings = ["extruder_prime_pos_x", "extruder_prime_pos_y", "extruder_prime_pos_z"]
|
_prime_settings = ["extruder_prime_pos_x", "extruder_prime_pos_y", "extruder_prime_pos_z"]
|
||||||
_tower_settings = ["prime_tower_enable", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y"]
|
_tower_settings = ["prime_tower_enable", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y"]
|
||||||
_ooze_shield_settings = ["ooze_shield_enabled", "ooze_shield_dist"]
|
_ooze_shield_settings = ["ooze_shield_enabled", "ooze_shield_dist"]
|
||||||
_distance_settings = ["infill_wipe_dist", "travel_avoid_distance"]
|
_distance_settings = ["infill_wipe_dist", "travel_avoid_distance", "support_offset"]
|
||||||
|
|
|
@ -503,6 +503,7 @@ class CuraApplication(QtApplication):
|
||||||
|
|
||||||
qmlRegisterType(cura.Settings.ContainerSettingsModel, "Cura", 1, 0, "ContainerSettingsModel")
|
qmlRegisterType(cura.Settings.ContainerSettingsModel, "Cura", 1, 0, "ContainerSettingsModel")
|
||||||
qmlRegisterType(cura.Settings.ProfilesModel, "Cura", 1, 0, "ProfilesModel")
|
qmlRegisterType(cura.Settings.ProfilesModel, "Cura", 1, 0, "ProfilesModel")
|
||||||
|
qmlRegisterType(cura.Settings.ProfilesPageModel, "Cura", 1, 0, "ProfilesPageModel")
|
||||||
qmlRegisterType(cura.Settings.MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler")
|
qmlRegisterType(cura.Settings.MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler")
|
||||||
qmlRegisterType(cura.Settings.QualitySettingsModel, "Cura", 1, 0, "QualitySettingsModel")
|
qmlRegisterType(cura.Settings.QualitySettingsModel, "Cura", 1, 0, "QualitySettingsModel")
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,9 @@ class QualityManager:
|
||||||
# the current set of selected materials is used.
|
# the current set of selected materials is used.
|
||||||
# \return the matching quality containers \type{List[ContainerInstance]}
|
# \return the matching quality containers \type{List[ContainerInstance]}
|
||||||
def findQualityByQualityType(self, quality_type, machine_definition=None, material_containers=None):
|
def findQualityByQualityType(self, quality_type, machine_definition=None, material_containers=None):
|
||||||
criteria = {"type": "quality", "quality_type": quality_type}
|
criteria = {"type": "quality"}
|
||||||
|
if quality_type:
|
||||||
|
criteria["quality_type"] = quality_type
|
||||||
return self._getFilteredContainersForStack(machine_definition, material_containers, **criteria)
|
return self._getFilteredContainersForStack(machine_definition, material_containers, **criteria)
|
||||||
|
|
||||||
def _getFilteredContainers(self, **kwargs):
|
def _getFilteredContainers(self, **kwargs):
|
||||||
|
@ -63,9 +65,9 @@ class QualityManager:
|
||||||
# Fill in any default values.
|
# Fill in any default values.
|
||||||
if machine_definition is None:
|
if machine_definition is None:
|
||||||
machine_definition = UM.Application.getInstance().getGlobalContainerStack().getBottom()
|
machine_definition = UM.Application.getInstance().getGlobalContainerStack().getBottom()
|
||||||
quality_definition = machine_definition.getMetaDataEntry("quality_definition")
|
quality_definition_id = machine_definition.getMetaDataEntry("quality_definition")
|
||||||
if quality_definition is not None:
|
if quality_definition_id is not None:
|
||||||
machine_definition = UM.Settings.ContainerRegistry.getInstance().findDefinitionContainers(id=quality_definition)[0]
|
machine_definition = UM.Settings.ContainerRegistry.getInstance().findDefinitionContainers(id=quality_definition_id)[0]
|
||||||
|
|
||||||
if material_containers is None:
|
if material_containers is None:
|
||||||
active_stacks = cura.Settings.ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks()
|
active_stacks = cura.Settings.ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks()
|
||||||
|
@ -81,6 +83,8 @@ class QualityManager:
|
||||||
criteria["definition"] = definition_id
|
criteria["definition"] = definition_id
|
||||||
|
|
||||||
filter_by_material = whole_machine_definition.getMetaDataEntry("has_materials")
|
filter_by_material = whole_machine_definition.getMetaDataEntry("has_materials")
|
||||||
|
else:
|
||||||
|
criteria["definition"] = "fdmprinter"
|
||||||
|
|
||||||
# Stick the material IDs in a set
|
# Stick the material IDs in a set
|
||||||
if material_containers is None or len(material_containers) == 0:
|
if material_containers is None or len(material_containers) == 0:
|
||||||
|
|
|
@ -561,10 +561,15 @@ class ContainerManager(QObject):
|
||||||
new_name = self._container_registry.uniqueName(new_name)
|
new_name = self._container_registry.uniqueName(new_name)
|
||||||
|
|
||||||
container_registry = self._container_registry
|
container_registry = self._container_registry
|
||||||
for container in self._getFilteredContainers(name = quality_name, type = "quality_changes"):
|
|
||||||
|
containers_to_rename = self._container_registry.findInstanceContainers(type = "quality_changes", name = quality_name)
|
||||||
|
for container in containers_to_rename:
|
||||||
stack_id = container.getMetaDataEntry("extruder", global_stack.getId())
|
stack_id = container.getMetaDataEntry("extruder", global_stack.getId())
|
||||||
container_registry.renameContainer(container.getId(), new_name, self._createUniqueId(stack_id, new_name))
|
container_registry.renameContainer(container.getId(), new_name, self._createUniqueId(stack_id, new_name))
|
||||||
|
|
||||||
|
if not containers_to_rename:
|
||||||
|
UM.Logger.log("e", "Unable to rename %s, because we could not find the profile", quality_name)
|
||||||
|
|
||||||
self._machine_manager.activeQualityChanged.emit()
|
self._machine_manager.activeQualityChanged.emit()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
@ -567,9 +567,18 @@ class MachineManager(QObject):
|
||||||
[material_container])
|
[material_container])
|
||||||
if not candidate_qualities:
|
if not candidate_qualities:
|
||||||
# Fall back to normal quality
|
# Fall back to normal quality
|
||||||
new_quality_id = quality_manager.findQualityByQualityType("normal",
|
quality_containers = quality_manager.findQualityByQualityType("normal",
|
||||||
|
quality_manager.getWholeMachineDefinition(machine_definition),
|
||||||
|
[material_container])
|
||||||
|
if quality_containers:
|
||||||
|
new_quality_id = quality_containers[0].getId()
|
||||||
|
else:
|
||||||
|
# There is no normal quality for this machine/variant/material combination
|
||||||
|
quality_containers = quality_manager.findQualityByQualityType(None,
|
||||||
quality_manager.getWholeMachineDefinition(machine_definition),
|
quality_manager.getWholeMachineDefinition(machine_definition),
|
||||||
[material_container])[0].getId()
|
[material_container])
|
||||||
|
new_quality_id = quality_containers[0].getId()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if not old_quality_changes:
|
if not old_quality_changes:
|
||||||
new_quality_id = candidate_qualities[0].getId()
|
new_quality_id = candidate_qualities[0].getId()
|
||||||
|
|
|
@ -13,6 +13,8 @@ class ProfilesModel(InstanceContainersModel):
|
||||||
def __init__(self, parent = None):
|
def __init__(self, parent = None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
|
|
||||||
|
Application.getInstance().globalContainerStackChanged.connect(self._update)
|
||||||
|
|
||||||
## Fetch the list of containers to display.
|
## Fetch the list of containers to display.
|
||||||
#
|
#
|
||||||
# See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers().
|
# See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers().
|
||||||
|
|
35
cura/Settings/ProfilesPageModel.py
Normal file
35
cura/Settings/ProfilesPageModel.py
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
# Copyright (c) 2016 Ultimaker B.V.
|
||||||
|
# Uranium is released under the terms of the AGPLv3 or higher.
|
||||||
|
from UM.Application import Application
|
||||||
|
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
|
|
||||||
|
from cura.QualityManager import QualityManager
|
||||||
|
from cura.Settings.ProfilesModel import ProfilesModel
|
||||||
|
|
||||||
|
## QML Model for listing the current list of valid quality and quality changes profiles.
|
||||||
|
#
|
||||||
|
class ProfilesPageModel(ProfilesModel):
|
||||||
|
def __init__(self, parent = None):
|
||||||
|
super().__init__(parent)
|
||||||
|
|
||||||
|
## Fetch the list of containers to display.
|
||||||
|
#
|
||||||
|
# See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers().
|
||||||
|
def _fetchInstanceContainers(self):
|
||||||
|
# Fetch the list of qualities
|
||||||
|
quality_list = super()._fetchInstanceContainers()
|
||||||
|
|
||||||
|
# Fetch the list of quality changes.
|
||||||
|
quality_manager = QualityManager.getInstance()
|
||||||
|
application = Application.getInstance()
|
||||||
|
|
||||||
|
machine_definition = quality_manager.getParentMachineDefinition(application.getGlobalContainerStack().getBottom())
|
||||||
|
if machine_definition.getMetaDataEntry("has_machine_quality"):
|
||||||
|
definition_id = machine_definition.getId()
|
||||||
|
else:
|
||||||
|
definition_id = "fdmprinter"
|
||||||
|
|
||||||
|
filter_dict = { "type": "quality_changes", "extruder": None, "definition": definition_id }
|
||||||
|
quality_changes_list = ContainerRegistry.getInstance().findInstanceContainers(**filter_dict)
|
||||||
|
|
||||||
|
return quality_list + quality_changes_list
|
|
@ -13,3 +13,4 @@ from .SettingOverrideDecorator import SettingOverrideDecorator
|
||||||
from .QualitySettingsModel import QualitySettingsModel
|
from .QualitySettingsModel import QualitySettingsModel
|
||||||
from .SettingInheritanceManager import SettingInheritanceManager
|
from .SettingInheritanceManager import SettingInheritanceManager
|
||||||
from .ProfilesModel import ProfilesModel
|
from .ProfilesModel import ProfilesModel
|
||||||
|
from .ProfilesPageModel import ProfilesPageModel
|
||||||
|
|
|
@ -105,13 +105,13 @@ class Profile:
|
||||||
config.set("metadata", "variant", self._machine_variant_name)
|
config.set("metadata", "variant", self._machine_variant_name)
|
||||||
|
|
||||||
if self._settings:
|
if self._settings:
|
||||||
VersionUpgrade21to22.VersionUpgrade21to22.VersionUpgrade21to22.translateSettings(self._settings)
|
self._settings = VersionUpgrade21to22.VersionUpgrade21to22.VersionUpgrade21to22.translateSettings(self._settings)
|
||||||
config.add_section("values")
|
config.add_section("values")
|
||||||
for key, value in self._settings.items():
|
for key, value in self._settings.items():
|
||||||
config.set("values", key, str(value))
|
config.set("values", key, str(value))
|
||||||
|
|
||||||
if self._changed_settings_defaults:
|
if self._changed_settings_defaults:
|
||||||
VersionUpgrade21to22.VersionUpgrade21to22.VersionUpgrade21to22.translateSettings(self._changed_settings_defaults)
|
self._changed_settings_defaults = VersionUpgrade21to22.VersionUpgrade21to22.VersionUpgrade21to22.translateSettings(self._changed_settings_defaults)
|
||||||
config.add_section("defaults")
|
config.add_section("defaults")
|
||||||
for key, value in self._changed_settings_defaults.items():
|
for key, value in self._changed_settings_defaults.items():
|
||||||
config.set("defaults", key, str(value))
|
config.set("defaults", key, str(value))
|
||||||
|
|
|
@ -3404,7 +3404,7 @@
|
||||||
"description": "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower.",
|
"description": "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower.",
|
||||||
"type": "bool",
|
"type": "bool",
|
||||||
"enabled": "resolveOrValue('prime_tower_enable')",
|
"enabled": "resolveOrValue('prime_tower_enable')",
|
||||||
"default_value": false,
|
"default_value": true,
|
||||||
"settable_per_mesh": false,
|
"settable_per_mesh": false,
|
||||||
"settable_per_extruder": false
|
"settable_per_extruder": false
|
||||||
},
|
},
|
||||||
|
|
|
@ -15,37 +15,7 @@ UM.ManagementPage
|
||||||
title: catalog.i18nc("@title:tab", "Profiles");
|
title: catalog.i18nc("@title:tab", "Profiles");
|
||||||
property var extrudersModel: Cura.ExtrudersModel{}
|
property var extrudersModel: Cura.ExtrudersModel{}
|
||||||
|
|
||||||
model: UM.InstanceContainersModel
|
model: Cura.ProfilesPageModel { }
|
||||||
{
|
|
||||||
filterList:
|
|
||||||
{
|
|
||||||
var qualityFilter = { "type": "quality", "extruder": null };
|
|
||||||
if(Cura.MachineManager.filterQualityByMachine)
|
|
||||||
{
|
|
||||||
qualityFilter.definition = Cura.MachineManager.activeQualityDefinitionId;
|
|
||||||
if(Cura.MachineManager.hasMaterials)
|
|
||||||
{
|
|
||||||
qualityFilter.material = Cura.MachineManager.allActiveMaterialIds[Cura.MachineManager.activeMachineId];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
qualityFilter.definition = "fdmprinter";
|
|
||||||
}
|
|
||||||
|
|
||||||
var qualityChangeFilter = { "type": "quality_changes", "extruder": null };
|
|
||||||
if(Cura.MachineManager.filterQualityByMachine)
|
|
||||||
{
|
|
||||||
qualityChangeFilter.definition = Cura.MachineManager.activeQualityDefinitionId;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
qualityChangeFilter.definition = "fdmprinter";
|
|
||||||
}
|
|
||||||
|
|
||||||
return [qualityFilter, qualityChangeFilter];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
section.property: "readOnly"
|
section.property: "readOnly"
|
||||||
section.delegate: Rectangle
|
section.delegate: Rectangle
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue