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

This commit is contained in:
Jaime van Kessel 2018-03-19 13:15:52 +01:00
commit cc2ad9dec0
18 changed files with 48 additions and 48 deletions

View File

@ -498,8 +498,10 @@ class MaterialManager(QObject):
# Ensure all settings are saved. # Ensure all settings are saved.
self._application.saveSettings() self._application.saveSettings()
global_stack = self._application.getGlobalContainerStack() machine_manager = self._application.getMachineManager()
approximate_diameter = str(round(global_stack.getProperty("material_diameter", "value"))) extruder_stack = machine_manager.activeStack
approximate_diameter = str(extruder_stack.approximateMaterialDiameter)
root_material_id = "generic_pla" root_material_id = "generic_pla"
root_material_id = self.getRootMaterialIDForDiameter(root_material_id, approximate_diameter) root_material_id = self.getRootMaterialIDForDiameter(root_material_id, approximate_diameter)
material_group = self.getMaterialGroup(root_material_id) material_group = self.getMaterialGroup(root_material_id)

View File

@ -41,7 +41,7 @@ class CuraSceneNode(SceneNode):
# Use the support extruder instead of the active extruder if this is a support_mesh # Use the support extruder instead of the active extruder if this is a support_mesh
if per_mesh_stack: if per_mesh_stack:
if per_mesh_stack.getProperty("support_mesh", "value"): if per_mesh_stack.getProperty("support_mesh", "value"):
return extruders[int(global_container_stack.getProperty("support_extruder_nr", "value"))] return extruders[int(global_container_stack.getExtruderPositionValueWithDefault("support_extruder_nr"))]
# It's only set if you explicitly choose an extruder # It's only set if you explicitly choose an extruder
extruder_id = self.callDecoration("getActiveExtruder") extruder_id = self.callDecoration("getActiveExtruder")

View File

@ -8,6 +8,7 @@ from typing import Any, Optional
from PyQt5.QtCore import pyqtProperty, pyqtSignal, QObject from PyQt5.QtCore import pyqtProperty, pyqtSignal, QObject
from UM.FlameProfiler import pyqtSlot from UM.FlameProfiler import pyqtSlot
from UM.Application import Application
from UM.Decorators import override from UM.Decorators import override
from UM.Logger import Logger from UM.Logger import Logger
from UM.Settings.ContainerStack import ContainerStack, InvalidContainerStackError from UM.Settings.ContainerStack import ContainerStack, InvalidContainerStackError
@ -314,6 +315,13 @@ class CuraContainerStack(ContainerStack):
return cls._findInstanceContainerDefinitionId(definitions[0]) return cls._findInstanceContainerDefinitionId(definitions[0])
## getProperty for extruder positions, with translation from -1 to default extruder number
def getExtruderPositionValueWithDefault(self, key):
value = self.getProperty(key, "value")
if value == -1:
value = int(Application.getInstance().getMachineManager().defaultExtruderPosition)
return value
## private: ## private:
# Private helper class to keep track of container positions and their types. # Private helper class to keep track of container positions and their types.

View File

@ -5,6 +5,7 @@ from typing import Any, TYPE_CHECKING, Optional
from PyQt5.QtCore import pyqtProperty, pyqtSignal from PyQt5.QtCore import pyqtProperty, pyqtSignal
from UM.Application import Application
from UM.Decorators import override from UM.Decorators import override
from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase
from UM.Settings.ContainerStack import ContainerStack from UM.Settings.ContainerStack import ContainerStack
@ -111,6 +112,8 @@ class ExtruderStack(CuraContainerStack):
limit_to_extruder = super().getProperty(key, "limit_to_extruder", context) limit_to_extruder = super().getProperty(key, "limit_to_extruder", context)
if limit_to_extruder is not None: if limit_to_extruder is not None:
if limit_to_extruder == -1:
limit_to_extruder = int(Application.getInstance().getMachineManager().defaultExtruderPosition)
limit_to_extruder = str(limit_to_extruder) limit_to_extruder = str(limit_to_extruder)
if (limit_to_extruder is not None and limit_to_extruder != "-1") and self.getMetaDataEntry("position") != str(limit_to_extruder): if (limit_to_extruder is not None and limit_to_extruder != "-1") and self.getMetaDataEntry("position") != str(limit_to_extruder):
if str(limit_to_extruder) in self.getNextStack().extruders: if str(limit_to_extruder) in self.getNextStack().extruders:

View File

@ -7,6 +7,7 @@ from typing import Any, Dict, Optional
from PyQt5.QtCore import pyqtProperty from PyQt5.QtCore import pyqtProperty
from UM.Application import Application
from UM.Decorators import override from UM.Decorators import override
from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase
@ -104,6 +105,8 @@ class GlobalStack(CuraContainerStack):
# Handle the "limit_to_extruder" property. # Handle the "limit_to_extruder" property.
limit_to_extruder = super().getProperty(key, "limit_to_extruder", context) limit_to_extruder = super().getProperty(key, "limit_to_extruder", context)
if limit_to_extruder is not None: if limit_to_extruder is not None:
if limit_to_extruder == -1:
limit_to_extruder = int(Application.getInstance().getMachineManager().defaultExtruderPosition)
limit_to_extruder = str(limit_to_extruder) limit_to_extruder = str(limit_to_extruder)
if limit_to_extruder is not None and limit_to_extruder != "-1" and limit_to_extruder in self._extruders: if limit_to_extruder is not None and limit_to_extruder != "-1" and limit_to_extruder in self._extruders:
if super().getProperty(key, "settable_per_extruder", context): if super().getProperty(key, "settable_per_extruder", context):

View File

@ -1227,7 +1227,7 @@ class MachineManager(QObject):
self._updateQualityWithMaterial() self._updateQualityWithMaterial()
@pyqtSlot(str, "QVariant") @pyqtSlot(str, "QVariant")
def setVariantGroup(self, position, container_node): def setVariant(self, position, container_node):
position = str(position) position = str(position)
self.blurSettings.emit() self.blurSettings.emit()
with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue):

View File

@ -3,13 +3,14 @@ from typing import Any, Optional
from UM.Application import Application from UM.Application import Application
from UM.Decorators import override from UM.Decorators import override
from UM.Settings.Interfaces import PropertyEvaluationContext from UM.Settings.Interfaces import PropertyEvaluationContext
from UM.Settings.ContainerStack import ContainerStack
from UM.Settings.SettingInstance import InstanceState from UM.Settings.SettingInstance import InstanceState
from .CuraContainerStack import CuraContainerStack
class PerObjectContainerStack(ContainerStack):
@override(ContainerStack) class PerObjectContainerStack(CuraContainerStack):
@override(CuraContainerStack)
def getProperty(self, key: str, property_name: str, context: Optional[PropertyEvaluationContext] = None) -> Any: def getProperty(self, key: str, property_name: str, context: Optional[PropertyEvaluationContext] = None) -> Any:
if context is None: if context is None:
context = PropertyEvaluationContext() context = PropertyEvaluationContext()
@ -51,8 +52,8 @@ class PerObjectContainerStack(ContainerStack):
context.popContainer() context.popContainer()
return result return result
@override(ContainerStack) @override(CuraContainerStack)
def setNextStack(self, stack: ContainerStack): def setNextStack(self, stack: CuraContainerStack):
super().setNextStack(stack) super().setNextStack(stack)
# trigger signal to re-evaluate all default settings # trigger signal to re-evaluate all default settings

View File

@ -3,7 +3,6 @@
import copy import copy
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.Scene.SceneNodeDecorator import SceneNodeDecorator from UM.Scene.SceneNodeDecorator import SceneNodeDecorator
from UM.Signal import Signal, signalemitter from UM.Signal import Signal, signalemitter
from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.InstanceContainer import InstanceContainer
@ -33,9 +32,11 @@ class SettingOverrideDecorator(SceneNodeDecorator):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self._stack = PerObjectContainerStack(stack_id = "per_object_stack_" + str(id(self))) self._stack = PerObjectContainerStack(container_id = "per_object_stack_" + str(id(self)))
self._stack.setDirty(False) # This stack does not need to be saved. self._stack.setDirty(False) # This stack does not need to be saved.
self._stack.addContainer(InstanceContainer(container_id = "SettingOverrideInstanceContainer")) user_container = InstanceContainer(container_id = "SettingOverrideInstanceContainer")
user_container.addMetaDataEntry("type", "user")
self._stack.userChanges = user_container
self._extruder_stack = ExtruderManager.getInstance().getExtruderStack(0).getId() self._extruder_stack = ExtruderManager.getInstance().getExtruderStack(0).getId()
self._is_non_printing_mesh = False self._is_non_printing_mesh = False

View File

@ -146,7 +146,7 @@ class SliceInfo(Extension):
model_stack = node.callDecoration("getStack") model_stack = node.callDecoration("getStack")
if model_stack: if model_stack:
model_settings["support_enabled"] = model_stack.getProperty("support_enable", "value") model_settings["support_enabled"] = model_stack.getProperty("support_enable", "value")
model_settings["support_extruder_nr"] = int(model_stack.getProperty("support_extruder_nr", "value")) model_settings["support_extruder_nr"] = int(model_stack.getExtruderPositionValueWithDefault("support_extruder_nr"))
# Mesh modifiers; # Mesh modifiers;
model_settings["infill_mesh"] = model_stack.getProperty("infill_mesh", "value") model_settings["infill_mesh"] = model_stack.getProperty("infill_mesh", "value")
@ -177,7 +177,7 @@ class SliceInfo(Extension):
# Support settings # Support settings
print_settings["support_enabled"] = global_container_stack.getProperty("support_enable", "value") print_settings["support_enabled"] = global_container_stack.getProperty("support_enable", "value")
print_settings["support_extruder_nr"] = int(global_container_stack.getProperty("support_extruder_nr", "value")) print_settings["support_extruder_nr"] = int(global_container_stack.getExtruderPositionValueWithDefault("support_extruder_nr"))
# Platform adhesion settings # Platform adhesion settings
print_settings["adhesion_type"] = global_container_stack.getProperty("adhesion_type", "value") print_settings["adhesion_type"] = global_container_stack.getProperty("adhesion_type", "value")

View File

@ -62,7 +62,7 @@ class SolidView(View):
global_container_stack = Application.getInstance().getGlobalContainerStack() global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack: if global_container_stack:
support_extruder_nr = global_container_stack.getProperty("support_extruder_nr", "value") support_extruder_nr = global_container_stack.getExtruderPositionValueWithDefault("support_extruder_nr")
support_angle_stack = Application.getInstance().getExtruderManager().getExtruderStack(support_extruder_nr) support_angle_stack = Application.getInstance().getExtruderManager().getExtruderStack(support_extruder_nr)
if support_angle_stack is not None and Preferences.getInstance().getValue("view/show_overhang"): if support_angle_stack is not None and Preferences.getInstance().getValue("view/show_overhang"):
@ -89,7 +89,7 @@ class SolidView(View):
# Use the support extruder instead of the active extruder if this is a support_mesh # Use the support extruder instead of the active extruder if this is a support_mesh
if per_mesh_stack: if per_mesh_stack:
if per_mesh_stack.getProperty("support_mesh", "value"): if per_mesh_stack.getProperty("support_mesh", "value"):
extruder_index = int(global_container_stack.getProperty("support_extruder_nr", "value")) extruder_index = int(global_container_stack.getExtruderPositionValueWithDefault("support_extruder_nr"))
try: try:
material_color = self._extruders_model.getItem(extruder_index)["color"] material_color = self._extruders_model.getItem(extruder_index)["color"]

View File

@ -32,7 +32,7 @@ Menu
} }
exclusiveGroup: group exclusiveGroup: group
onTriggered: { onTriggered: {
Cura.MachineManager.setVariantGroup(menu.extruderIndex, model.container_node); Cura.MachineManager.setVariant(menu.extruderIndex, model.container_node);
} }
} }

View File

@ -13,11 +13,8 @@ Menu
title: catalog.i18nc("@action:inmenu", "Visible Settings") title: catalog.i18nc("@action:inmenu", "Visible Settings")
property QtObject settingVisibilityPresetsModel: CuraApplication.getSettingVisibilityPresetsModel() property QtObject settingVisibilityPresetsModel: CuraApplication.getSettingVisibilityPresetsModel()
property bool showingSearchResults
property bool showingAllSettings
signal showAllSettings() signal showAllSettings()
signal showSettingVisibilityProfile()
Instantiator Instantiator
{ {
@ -43,7 +40,7 @@ Menu
MenuSeparator {} MenuSeparator {}
MenuItem MenuItem
{ {
text: catalog.i18nc("@action:inmenu", "All Settings") text: catalog.i18nc("@action:inmenu", "Show All Settings")
checkable: true checkable: true
checked: showingAllSettings checked: showingAllSettings
exclusiveGroup: group exclusiveGroup: group

View File

@ -72,11 +72,11 @@ UM.PreferencesPage
{ {
if(parent.checkedState == Qt.Unchecked || parent.checkedState == Qt.PartiallyChecked) if(parent.checkedState == Qt.Unchecked || parent.checkedState == Qt.PartiallyChecked)
{ {
definitionsModel.setAllVisible(true) definitionsModel.setAllExpandedVisible(true)
} }
else else
{ {
definitionsModel.setAllVisible(false) definitionsModel.setAllExpandedVisible(false)
} }
// After change set "Custom" option // After change set "Custom" option

View File

@ -18,7 +18,6 @@ Item
property QtObject settingVisibilityPresetsModel: CuraApplication.getSettingVisibilityPresetsModel() property QtObject settingVisibilityPresetsModel: CuraApplication.getSettingVisibilityPresetsModel()
property Action configureSettings property Action configureSettings
property bool findingSettings property bool findingSettings
property bool showingAllSettings
signal showTooltip(Item item, point location, string text) signal showTooltip(Item item, point location, string text)
signal hideTooltip() signal hideTooltip()
@ -140,21 +139,9 @@ Item
} }
menu: SettingVisibilityPresetsMenu menu: SettingVisibilityPresetsMenu
{ {
showingSearchResults: findingSettings
showingAllSettings: showingAllSettings
onShowAllSettings: onShowAllSettings:
{ {
base.showingAllSettings = true; definitionsModel.setAllVisible(true);
base.findingSettings = false;
filter.text = "";
filter.updateDefinitionModel();
}
onShowSettingVisibilityProfile:
{
base.showingAllSettings = false;
base.findingSettings = false;
filter.text = "";
filter.updateDefinitionModel(); filter.updateDefinitionModel();
} }
} }
@ -219,10 +206,6 @@ Item
findingSettings = (text.length > 0); findingSettings = (text.length > 0);
if(findingSettings != lastFindingSettings) if(findingSettings != lastFindingSettings)
{ {
if(findingSettings)
{
showingAllSettings = false;
}
updateDefinitionModel(); updateDefinitionModel();
lastFindingSettings = findingSettings; lastFindingSettings = findingSettings;
} }
@ -235,7 +218,7 @@ Item
function updateDefinitionModel() function updateDefinitionModel()
{ {
if(findingSettings || showingAllSettings) if(findingSettings)
{ {
expandedCategories = definitionsModel.expanded.slice(); expandedCategories = definitionsModel.expanded.slice();
definitionsModel.expanded = [""]; // keep categories closed while to prevent render while making settings visible one by one definitionsModel.expanded = [""]; // keep categories closed while to prevent render while making settings visible one by one
@ -558,13 +541,13 @@ Item
MenuItem MenuItem
{ {
//: Settings context menu action //: Settings context menu action
visible: !(findingSettings || showingAllSettings); visible: !findingSettings
text: catalog.i18nc("@action:menu", "Hide this setting"); text: catalog.i18nc("@action:menu", "Hide this setting");
onTriggered: onTriggered:
{ {
definitionsModel.hide(contextMenu.key); definitionsModel.hide(contextMenu.key);
// visible settings have changed, so we're no longer showing a preset // visible settings have changed, so we're no longer showing a preset
if (settingVisibilityPresetsModel.activePreset != "" && !showingAllSettings) if (settingVisibilityPresetsModel.activePreset != "")
{ {
settingVisibilityPresetsModel.setActivePreset("custom"); settingVisibilityPresetsModel.setActivePreset("custom");
} }
@ -584,7 +567,7 @@ Item
return catalog.i18nc("@action:menu", "Keep this setting visible"); return catalog.i18nc("@action:menu", "Keep this setting visible");
} }
} }
visible: (findingSettings || showingAllSettings); visible: findingSettings
onTriggered: onTriggered:
{ {
if (contextMenu.settingVisible) if (contextMenu.settingVisible)
@ -596,7 +579,7 @@ Item
definitionsModel.show(contextMenu.key); definitionsModel.show(contextMenu.key);
} }
// visible settings have changed, so we're no longer showing a preset // visible settings have changed, so we're no longer showing a preset
if (settingVisibilityPresetsModel.activePreset != "" && !showingAllSettings) if (settingVisibilityPresetsModel.activePreset != "")
{ {
settingVisibilityPresetsModel.setActivePreset("custom"); settingVisibilityPresetsModel.setActivePreset("custom");
} }

View File

@ -46,6 +46,7 @@ retraction_count_max = 25
retraction_extrusion_window = 1 retraction_extrusion_window = 1
retraction_hop = 2 retraction_hop = 2
retraction_hop_only_when_collides = True retraction_hop_only_when_collides = True
retraction_min_travel = =line_width * 2
skin_overlap = 5 skin_overlap = 5
speed_equalize_flow_enabled = True speed_equalize_flow_enabled = True
speed_layer_0 = 20 speed_layer_0 = 20

View File

@ -57,7 +57,7 @@ retraction_count_max = 15
retraction_extrusion_window = =retraction_amount retraction_extrusion_window = =retraction_amount
retraction_hop = 2 retraction_hop = 2
retraction_hop_only_when_collides = True retraction_hop_only_when_collides = True
retraction_min_travel = 5 retraction_min_travel = =line_width * 3
retraction_prime_speed = 15 retraction_prime_speed = 15
skin_overlap = 5 skin_overlap = 5
speed_layer_0 = 20 speed_layer_0 = 20

View File

@ -46,6 +46,7 @@ retraction_count_max = 25
retraction_extrusion_window = 1 retraction_extrusion_window = 1
retraction_hop = 2 retraction_hop = 2
retraction_hop_only_when_collides = True retraction_hop_only_when_collides = True
retraction_min_travel = =line_width * 2
skin_overlap = 5 skin_overlap = 5
speed_equalize_flow_enabled = True speed_equalize_flow_enabled = True
speed_layer_0 = 20 speed_layer_0 = 20

View File

@ -57,7 +57,7 @@ retraction_count_max = 15
retraction_extrusion_window = =retraction_amount retraction_extrusion_window = =retraction_amount
retraction_hop = 2 retraction_hop = 2
retraction_hop_only_when_collides = True retraction_hop_only_when_collides = True
retraction_min_travel = 5 retraction_min_travel = =line_width * 3
retraction_prime_speed = 15 retraction_prime_speed = 15
skin_overlap = 5 skin_overlap = 5
speed_layer_0 = 20 speed_layer_0 = 20