Merge branch '3.0'

This commit is contained in:
Ghostkeeper 2017-10-06 10:00:19 +02:00
commit 7e00914e38
No known key found for this signature in database
GPG key ID: C5F96EE2BC0F7E75
6 changed files with 82 additions and 24 deletions

View file

@ -754,17 +754,6 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
) )
return return
# Check if we're already writing
if not self._write_finished:
self._error_message = Message(
i18n_catalog.i18nc("@info:status",
"Sending new jobs (temporarily) blocked, still sending the previous print job."))
self._error_message.show()
return
# Indicate we're starting a new write action, is set back to True in the startPrint() method
self._write_finished = False
self.startPrint() self.startPrint()
def _configurationMismatchMessageCallback(self, button): def _configurationMismatchMessageCallback(self, button):
@ -855,6 +844,18 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
# This function can fail to actually start a print due to not being authenticated or another print already # This function can fail to actually start a print due to not being authenticated or another print already
# being in progress. # being in progress.
def startPrint(self): def startPrint(self):
# Check if we're already writing
if not self._write_finished:
self._error_message = Message(
i18n_catalog.i18nc("@info:status",
"Sending new jobs (temporarily) blocked, still sending the previous print job."))
self._error_message.show()
return
# Indicate we're starting a new write action, is set back to True at the end of this method
self._write_finished = False
try: try:
self._send_gcode_start = time() self._send_gcode_start = time()
self._progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to printer"), 0, False, -1, i18n_catalog.i18nc("@info:title", "Sending Data")) self._progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to printer"), 0, False, -1, i18n_catalog.i18nc("@info:title", "Sending Data"))

View file

@ -3,6 +3,7 @@
import configparser #To parse preference files. import configparser #To parse preference files.
import io #To serialise the preference files afterwards. import io #To serialise the preference files afterwards.
import os
from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this. from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this.
@ -93,6 +94,41 @@ class VersionUpgrade27to30(VersionUpgrade):
parser.write(output) parser.write(output)
return [filename], [output.getvalue()] return [filename], [output.getvalue()]
## Upgrades the given quality changes container file from version 2.7 to 3.0.
#
# \param serialised The serialised form of the container file.
# \param filename The name of the file to upgrade.
def upgradeQualityChangesContainer(self, serialised, filename):
parser = configparser.ConfigParser(interpolation=None)
parser.read_string(serialised)
# Update the skin pre-shrink settings:
# - Remove the old ones
# - Do not add the new ones. The default values will be used for them.
if parser.has_section("values"):
for remove_key in ["expand_skins_into_infill", "expand_upper_skins", "expand_lower_skins"]:
if remove_key in parser["values"]:
del parser["values"][remove_key]
for each_section in ("general", "metadata"):
if not parser.has_section(each_section):
parser.add_section(each_section)
# Set the definition to "ultimaker2" for Ultimaker 2 quality changes
if not parser.has_section("general"):
parser.add_section("general")
if os.path.basename(filename).startswith("ultimaker2_"):
parser["general"]["definition"] = "ultimaker2"
# Update version numbers
parser["general"]["version"] = "2"
parser["metadata"]["setting_version"] = "3"
# Re-serialise the file.
output = io.StringIO()
parser.write(output)
return [filename], [output.getvalue()]
## Upgrades the given instance container file from version 2.7 to 3.0. ## Upgrades the given instance container file from version 2.7 to 3.0.
# #
# \param serialised The serialised form of the container file. # \param serialised The serialised form of the container file.

View file

@ -14,7 +14,7 @@ def getMetaData():
("machine_stack", 3000002): ("machine_stack", 3000003, upgrade.upgradeStack), ("machine_stack", 3000002): ("machine_stack", 3000003, upgrade.upgradeStack),
("extruder_train", 3000002): ("extruder_train", 3000003, upgrade.upgradeStack), ("extruder_train", 3000002): ("extruder_train", 3000003, upgrade.upgradeStack),
("quality_changes", 2000002): ("quality_changes", 2000003, upgrade.upgradeOtherContainer), ("quality_changes", 2000002): ("quality_changes", 2000003, upgrade.upgradeQualityChangesContainer),
("user", 2000002): ("user", 2000003, upgrade.upgradeOtherContainer), ("user", 2000002): ("user", 2000003, upgrade.upgradeOtherContainer),
("quality", 2000002): ("quality", 2000003, upgrade.upgradeOtherContainer), ("quality", 2000002): ("quality", 2000003, upgrade.upgradeOtherContainer),
("definition_changes", 2000002): ("definition_changes", 2000003, upgrade.upgradeOtherContainer), ("definition_changes", 2000002): ("definition_changes", 2000003, upgrade.upgradeOtherContainer),

View file

@ -393,12 +393,19 @@ Item
anchors.leftMargin: (infillSlider.value / infillSlider.stepSize) * (infillSlider.width / (infillSlider.maximumValue / infillSlider.stepSize)) - 10 * screenScaleFactor anchors.leftMargin: (infillSlider.value / infillSlider.stepSize) * (infillSlider.width / (infillSlider.maximumValue / infillSlider.stepSize)) - 10 * screenScaleFactor
anchors.right: parent.right anchors.right: parent.right
text: infillSlider.value + "%" text: parseInt(infillDensity.properties.value) + "%"
horizontalAlignment: Text.AlignLeft horizontalAlignment: Text.AlignLeft
color: infillSlider.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") color: infillSlider.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable")
} }
// We use a binding to make sure that after manually setting infillSlider.value it is still bound to the property provider
Binding {
target: infillSlider
property: "value"
value: parseInt(infillDensity.properties.value)
}
Slider Slider
{ {
id: infillSlider id: infillSlider
@ -413,7 +420,7 @@ Item
minimumValue: 0 minimumValue: 0
maximumValue: 100 maximumValue: 100
stepSize: (parseInt(infillDensity.properties.value) % 10 == 0) ? 10 : 1 stepSize: 1
tickmarksEnabled: true tickmarksEnabled: true
// disable slider when gradual support is enabled // disable slider when gradual support is enabled
@ -423,8 +430,20 @@ Item
value: parseInt(infillDensity.properties.value) value: parseInt(infillDensity.properties.value)
onValueChanged: { onValueChanged: {
// Don't round the value if it's already the same
if (parseInt(infillDensity.properties.value) == infillSlider.value) {
return
}
// Round the slider value to the nearest multiple of 10 (simulate step size of 10)
var roundedSliderValue = Math.round(infillSlider.value / 10) * 10
// Update the slider value to represent the rounded value
infillSlider.value = roundedSliderValue
// Explicitly cast to string to make sure the value passed to Python is an integer. // Explicitly cast to string to make sure the value passed to Python is an integer.
infillDensity.setPropertyValue("value", String(parseInt(infillSlider.value))) infillDensity.setPropertyValue("value", String(roundedSliderValue))
} }
style: SliderStyle style: SliderStyle
@ -454,7 +473,7 @@ Item
// check if a tick should be shown based on it's index and wether the infill density is a multiple of 10 (slider step size) // check if a tick should be shown based on it's index and wether the infill density is a multiple of 10 (slider step size)
function shouldShowTick (index) { function shouldShowTick (index) {
if ((parseInt(infillDensity.properties.value) % 10 == 0) || (index % 10 == 0)) { if (index % 10 == 0) {
return true return true
} }
return false return false
@ -548,11 +567,17 @@ Item
hoverEnabled: true hoverEnabled: true
enabled: true enabled: true
property var previousInfillDensity: parseInt(infillDensity.properties.value)
onClicked: { onClicked: {
// Restore to 90% only when enabling gradual infill // Set to 90% only when enabling gradual infill
if (parseInt(infillSteps.properties.value) == 0) { if (parseInt(infillSteps.properties.value) == 0) {
infillDensity.setPropertyValue("value", 90) previousInfillDensity = parseInt(infillDensity.properties.value)
infillDensity.setPropertyValue("value", String(90))
} else {
infillDensity.setPropertyValue("value", String(previousInfillDensity))
} }
infillSteps.setPropertyValue("value", (parseInt(infillSteps.properties.value) == 0) ? 5 : 0) infillSteps.setPropertyValue("value", (parseInt(infillSteps.properties.value) == 0) ? 5 : 0)
} }
@ -891,7 +916,6 @@ Item
UM.SettingPropertyProvider UM.SettingPropertyProvider
{ {
id: platformAdhesionType id: platformAdhesionType
containerStackId: Cura.MachineManager.activeMachineId containerStackId: Cura.MachineManager.activeMachineId
key: "adhesion_type" key: "adhesion_type"
watchedProperties: [ "value", "enabled" ] watchedProperties: [ "value", "enabled" ]
@ -901,7 +925,6 @@ Item
UM.SettingPropertyProvider UM.SettingPropertyProvider
{ {
id: supportEnabled id: supportEnabled
containerStackId: Cura.MachineManager.activeMachineId containerStackId: Cura.MachineManager.activeMachineId
key: "support_enable" key: "support_enable"
watchedProperties: [ "value", "enabled", "description" ] watchedProperties: [ "value", "enabled", "description" ]
@ -911,7 +934,6 @@ Item
UM.SettingPropertyProvider UM.SettingPropertyProvider
{ {
id: machineExtruderCount id: machineExtruderCount
containerStackId: Cura.MachineManager.activeMachineId containerStackId: Cura.MachineManager.activeMachineId
key: "machine_extruder_count" key: "machine_extruder_count"
watchedProperties: [ "value" ] watchedProperties: [ "value" ]
@ -921,7 +943,6 @@ Item
UM.SettingPropertyProvider UM.SettingPropertyProvider
{ {
id: supportExtruderNr id: supportExtruderNr
containerStackId: Cura.MachineManager.activeMachineId containerStackId: Cura.MachineManager.activeMachineId
key: "support_extruder_nr" key: "support_extruder_nr"
watchedProperties: [ "value" ] watchedProperties: [ "value" ]

View file

@ -39,7 +39,7 @@ retraction_hop_only_when_collides = True
skin_overlap = 20 skin_overlap = 20
speed_layer_0 = 20 speed_layer_0 = 20
speed_print = 50 speed_print = 50
speed_topbottom = =math.ceil(speed_print * 65 / 50) speed_topbottom = =math.ceil(speed_print * 40 / 50)
speed_travel = 250 speed_travel = 250
speed_wall = =math.ceil(speed_print * 50 / 50) speed_wall = =math.ceil(speed_print * 50 / 50)
speed_wall_0 = =math.ceil(speed_wall * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 40 / 50)

View file

@ -39,7 +39,7 @@ retraction_hop_only_when_collides = True
skin_overlap = 20 skin_overlap = 20
speed_layer_0 = 20 speed_layer_0 = 20
speed_print = 45 speed_print = 45
speed_topbottom = =math.ceil(speed_print * 55 / 45) speed_topbottom = =math.ceil(speed_print * 35 / 45)
speed_travel = 250 speed_travel = 250
speed_wall = =math.ceil(speed_print * 45 / 45) speed_wall = =math.ceil(speed_print * 45 / 45)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45) speed_wall_0 = =math.ceil(speed_wall * 35 / 45)