Merge branch 'master' of github.com:Ultimaker/Cura

This commit is contained in:
Jack Ha 2016-09-29 14:09:54 +02:00
commit 8934555bd6
11 changed files with 109 additions and 54 deletions

View file

@ -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"]

View file

@ -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")

View file

@ -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:

View file

@ -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

View file

@ -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()

View file

@ -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().

View 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

View file

@ -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

View file

@ -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))

View file

@ -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
}, },

View file

@ -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