Merge branch '2.3'

This commit is contained in:
Tim Kuipers 2016-10-21 16:20:52 +02:00
commit 86d682daae
10 changed files with 170 additions and 70 deletions

View file

@ -474,6 +474,32 @@ class MachineManager(QObject):
return result return result
## Gets the layer height of the currently active quality profile.
#
# This is indicated together with the name of the active quality profile.
#
# \return The layer height of the currently active quality profile. If
# there is no quality profile, this returns 0.
@pyqtProperty(float, notify=activeQualityChanged)
def activeQualityLayerHeight(self):
if not self._global_container_stack:
return 0
quality_changes = self._global_container_stack.findContainer({"type": "quality_changes"})
if quality_changes:
value = self._global_container_stack.getRawProperty("layer_height", "value", skip_until_container = quality_changes.getId())
if isinstance(value, UM.Settings.SettingFunction):
value = value(self._global_container_stack)
return value
quality = self._global_container_stack.findContainer({"type": "quality"})
if quality:
value = self._global_container_stack.getRawProperty("layer_height", "value", skip_until_container = quality.getId())
if isinstance(value, UM.Settings.SettingFunction):
value = value(self._global_container_stack)
return value
return 0 #No quality profile.
## Get the Material ID associated with the currently active material ## Get the Material ID associated with the currently active material
# \returns MaterialID (string) if found, empty string otherwise # \returns MaterialID (string) if found, empty string otherwise
@pyqtProperty(str, notify=activeQualityChanged) @pyqtProperty(str, notify=activeQualityChanged)
@ -687,7 +713,7 @@ class MachineManager(QObject):
# Get quality container and optionally the quality_changes container. # Get quality container and optionally the quality_changes container.
if container_type == "quality": if container_type == "quality":
new_quality_settings_list = self._determineQualityAndQualityChangesForQualityType(quality_type) new_quality_settings_list = self.determineQualityAndQualityChangesForQualityType(quality_type)
elif container_type == "quality_changes": elif container_type == "quality_changes":
new_quality_settings_list = self._determineQualityAndQualityChangesForQualityChanges(quality_name) new_quality_settings_list = self._determineQualityAndQualityChangesForQualityChanges(quality_name)
else: else:
@ -723,7 +749,7 @@ class MachineManager(QObject):
# #
# \param quality_name \type{str} the name of the quality. # \param quality_name \type{str} the name of the quality.
# \return \type{List[Dict]} with keys "stack", "quality" and "quality_changes". # \return \type{List[Dict]} with keys "stack", "quality" and "quality_changes".
def _determineQualityAndQualityChangesForQualityType(self, quality_type): def determineQualityAndQualityChangesForQualityType(self, quality_type):
quality_manager = QualityManager.getInstance() quality_manager = QualityManager.getInstance()
result = [] result = []
empty_quality_changes = self._empty_quality_changes_container empty_quality_changes = self._empty_quality_changes_container

View file

@ -1,18 +1,23 @@
# Copyright (c) 2016 Ultimaker B.V. # Copyright (c) 2016 Ultimaker B.V.
# Uranium is released under the terms of the AGPLv3 or higher. # Cura is released under the terms of the AGPLv3 or higher.
from PyQt5.QtCore import Qt
from UM.Application import Application from UM.Application import Application
from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Settings.Models.InstanceContainersModel import InstanceContainersModel from UM.Settings.Models.InstanceContainersModel import InstanceContainersModel
from cura.QualityManager import QualityManager from cura.QualityManager import QualityManager
from cura.Settings.ExtruderManager import ExtruderManager from cura.Settings.ExtruderManager import ExtruderManager
from cura.Settings.MachineManager import MachineManager
## QML Model for listing the current list of valid quality profiles. ## QML Model for listing the current list of valid quality profiles.
# #
class ProfilesModel(InstanceContainersModel): class ProfilesModel(InstanceContainersModel):
LayerHeightRole = Qt.UserRole + 1001
def __init__(self, parent = None): def __init__(self, parent = None):
super().__init__(parent) super().__init__(parent)
self.addRoleName(self.LayerHeightRole, "layer_height")
Application.getInstance().globalContainerStackChanged.connect(self._update) Application.getInstance().globalContainerStackChanged.connect(self._update)
@ -40,3 +45,52 @@ class ProfilesModel(InstanceContainersModel):
# The actual list of quality profiles come from the first extruder in the extruder list. # The actual list of quality profiles come from the first extruder in the extruder list.
return QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack, return QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack,
extruder_stacks) extruder_stacks)
## Re-computes the items in this model, and adds the layer height role.
def _recomputeItems(self):
#Some globals that we can re-use.
global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack is None:
return
container_registry = ContainerRegistry.getInstance()
machine_manager = Application.getInstance().getMachineManager()
unit = global_container_stack.getBottom().getProperty("layer_height", "unit")
for item in super()._recomputeItems():
profile = container_registry.findContainers(id = item["id"])
if not profile:
item["layer_height"] = "" #Can't update a profile that is unknown.
yield item
continue
#Easy case: This profile defines its own layer height.
profile = profile[0]
if profile.hasProperty("layer_height", "value"):
item["layer_height"] = str(profile.getProperty("layer_height", "value")) + unit
yield item
continue
#Quality-changes profile that has no value for layer height. Get the corresponding quality profile and ask that profile.
quality_type = profile.getMetaDataEntry("quality_type", None)
if quality_type:
quality_results = machine_manager.determineQualityAndQualityChangesForQualityType(quality_type)
for quality_result in quality_results:
if quality_result["stack"] is global_container_stack:
quality = quality_result["quality"]
break
else: #No global container stack in the results:
quality = quality_results[0]["quality"] #Take any of the extruders.
if quality and quality.hasProperty("layer_height", "value"):
item["layer_height"] = str(quality.getProperty("layer_height", "value")) + unit
yield item
continue
#Quality has no value for layer height either. Get the layer height from somewhere lower in the stack.
skip_until_container = global_container_stack.findContainer({"type": "material"})
if not skip_until_container: #No material in stack.
skip_until_container = global_container_stack.findContainer({"type": "variant"})
if not skip_until_container: #No variant in stack.
skip_until_container = global_container_stack.getBottom()
item["layer_height"] = str(global_container_stack.getRawProperty("layer_height", "value", skip_until_container = skip_until_container.getId())) + unit #Fall through to the currently loaded material.
yield item

View file

@ -1,3 +1,13 @@
[2.3.1]
*Layer Height in Profile Selection
The layer height of each profile is now shown in the profile selection menu.
*Bug fixes
Upgrading from version 2.1 on OSX works again.
You can import g-code from related machines as profile.
Fixed inheritance taking from the wrong extruder.
Moved z-hop and extruder selection settings to a better category.
[2.3.0] [2.3.0]
*Speed improvements *Speed improvements

View file

@ -17,7 +17,7 @@ Menu
MenuItem MenuItem
{ {
text: model.name text: model.name + " - " + model.layer_height
checkable: true checkable: true
checked: Cura.MachineManager.activeQualityChangesId == "empty_quality_changes" && Cura.MachineManager.activeQualityType == model.metadata.quality_type checked: Cura.MachineManager.activeQualityChangesId == "empty_quality_changes" && Cura.MachineManager.activeQualityType == model.metadata.quality_type
exclusiveGroup: group exclusiveGroup: group
@ -40,7 +40,7 @@ Menu
MenuItem MenuItem
{ {
text: model.name text: model.name + " - " + model.layer_height
checkable: true checkable: true
checked: Cura.MachineManager.globalQualityId == model.id checked: Cura.MachineManager.globalQualityId == model.id
exclusiveGroup: group exclusiveGroup: group

View file

@ -285,7 +285,16 @@ Column
ToolButton ToolButton
{ {
id: globalProfileSelection id: globalProfileSelection
text: Cura.MachineManager.activeQualityName text: {
var result = Cura.MachineManager.activeQualityName;
if (Cura.MachineManager.activeQualityLayerHeight > 0) {
result += " <font color=\"" + UM.Theme.getColor("text_detail") + "\">";
result += " - ";
result += Cura.MachineManager.activeQualityLayerHeight + "mm";
result += "</font>";
}
return result;
}
enabled: !extrudersList.visible || base.currentExtruderIndex > -1 enabled: !extrudersList.visible || base.currentExtruderIndex > -1
width: parent.width * 0.55 + UM.Theme.getSize("default_margin").width width: parent.width * 0.55 + UM.Theme.getSize("default_margin").width

View file

@ -25,7 +25,7 @@ acceleration_wall_x = =acceleration_wall
adhesion_type = brim adhesion_type = brim
brim_width = 7 brim_width = 7
cool_fan_full_at_height = =layer_height_0 + 4 * layer_height cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
cool_fan_speed = 50 cool_fan_speed = 5
cool_fan_speed_max = 100 cool_fan_speed_max = 100
cool_min_layer_time = 5 cool_min_layer_time = 5
cool_min_speed = 5 cool_min_speed = 5

View file

@ -25,7 +25,7 @@ acceleration_wall_x = =acceleration_wall
adhesion_type = brim adhesion_type = brim
brim_width = 7 brim_width = 7
cool_fan_full_at_height = =layer_height_0 + 4 * layer_height cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
cool_fan_speed = 50 cool_fan_speed = 5
cool_fan_speed_max = 100 cool_fan_speed_max = 100
cool_min_layer_time = 5 cool_min_layer_time = 5
cool_min_speed = 7 cool_min_speed = 7

View file

@ -25,7 +25,7 @@ acceleration_wall_x = =acceleration_wall
adhesion_type = brim adhesion_type = brim
brim_width = 7 brim_width = 7
cool_fan_full_at_height = =layer_height_0 + 4 * layer_height cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
cool_fan_speed = 50 cool_fan_speed = 5
cool_fan_speed_max = 100 cool_fan_speed_max = 100
cool_min_layer_time = 5 cool_min_layer_time = 5
cool_min_speed = 12 cool_min_speed = 12

View file

@ -25,7 +25,7 @@ acceleration_wall_x = =acceleration_wall
adhesion_type = brim adhesion_type = brim
brim_width = 7 brim_width = 7
cool_fan_full_at_height = =layer_height_0 + 4 * layer_height cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
cool_fan_speed = 50 cool_fan_speed = 5
cool_fan_speed_max = 100 cool_fan_speed_max = 100
cool_min_layer_time = 5 cool_min_layer_time = 5
cool_min_speed = 5 cool_min_speed = 5

View file

@ -52,6 +52,7 @@
"secondary": [245, 245, 245, 255], "secondary": [245, 245, 245, 255],
"text": [24, 41, 77, 255], "text": [24, 41, 77, 255],
"text_detail": [174, 174, 174, 128],
"text_link": [12, 169, 227, 255], "text_link": [12, 169, 227, 255],
"text_inactive": [174, 174, 174, 255], "text_inactive": [174, 174, 174, 255],
"text_hover": [70, 84, 113, 255], "text_hover": [70, 84, 113, 255],