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

This commit is contained in:
Jack Ha 2018-02-19 09:14:10 +01:00
commit 823ac048fa
28 changed files with 109 additions and 46 deletions

View File

@ -13,9 +13,8 @@ import ssl
import urllib.request
import urllib.error
import shutil
import sys
from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR
from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, QFile
from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QTextEdit, QGroupBox, QCheckBox, QPushButton
from UM.Application import Application
@ -23,6 +22,7 @@ from UM.Logger import Logger
from UM.View.GL.OpenGL import OpenGL
from UM.i18n import i18nCatalog
from UM.Platform import Platform
from UM.Resources import Resources
catalog = i18nCatalog("cura")
@ -91,6 +91,7 @@ class CrashHandler:
label = QLabel()
label.setText(catalog.i18nc("@label crash message", """<p><b>A fatal error has occurred.</p></b>
<p>Unfortunately, Cura encountered an unrecoverable error during start up. It was possibly caused by some incorrect configuration files. We suggest to backup and reset your configuration.</p>
<p>Your backup can be found in your Configuration folder.</p>
<p>Please send us this Crash Report to fix the problem.</p>
"""))
label.setWordWrap(True)

View File

@ -228,16 +228,23 @@ class CuraContainerRegistry(ContainerRegistry):
Logger.log("e", "Incorrect profile [%s]. Could not find global profile", file_name)
return { "status": "error",
"message": catalog.i18nc("@info:status Don't translate the XML tags <filename> or <message>!", "This profile <filename>{0}</filename> contains incorrect data, could not import it.", file_name)}
profile_definition = global_profile.getMetaDataEntry("definition")
expected_machine_definition = "fdmprinter"
# In a profile we can have the quality_definition metadata, but if not, we get the definition
profile_definition = global_profile.getMetaDataEntry("quality_definition")
if not profile_definition:
profile_definition = global_profile.getMetaDataEntry("definition")
# The expected machine definition may be the quality_definition if defined or the current definition id
expected_machine_definition = None
if parseBool(global_container_stack.getMetaDataEntry("has_machine_quality", "False")):
expected_machine_definition = global_container_stack.getMetaDataEntry("quality_definition")
if not expected_machine_definition:
expected_machine_definition = global_container_stack.definition.getId()
if not expected_machine_definition:
expected_machine_definition = global_container_stack.definition.getId()
if expected_machine_definition is not None and profile_definition is not None and profile_definition != expected_machine_definition:
Logger.log("e", "Profile [%s] is for machine [%s] but the current active machine is [%s]. Will not import the profile", file_name)
Logger.log("e", "Profile [%s] is for machine [%s] but the current active machine is [%s]. Will not import the profile", file_name, profile_definition, expected_machine_definition)
return { "status": "error",
"message": catalog.i18nc("@info:status Don't translate the XML tags <filename> or <message>!", "The machine defined in profile <filename>{0}</filename> doesn't match with your current machine, could not import it.", file_name)}
"message": catalog.i18nc("@info:status Don't translate the XML tags <filename> or <message>!", "The machine defined in profile <filename>{0}</filename> ({1}) doesn't match with your current machine ({2}), could not import it.", file_name, profile_definition, expected_machine_definition)}
name_seed = os.path.splitext(os.path.basename(file_name))[0]
new_name = self.uniqueName(name_seed)

View File

@ -559,7 +559,8 @@ class MachineManager(QObject):
def activeVariantNames(self) -> List[str]:
result = []
active_stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks()
# Just return the variants in the extruder stack(s). For the variant in the global stack, use activeVariantBuildplateName
active_stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
if active_stacks is not None:
for stack in active_stacks:
variant_container = stack.variant

View File

@ -775,6 +775,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
# Ensure a unique ID and name
stack.setMetaDataEntry("id", new_id)
# Keep same quality between extruders and global stack
stack.quality = global_stack.quality
self._container_registry.addContainer(stack)
extruder_stacks_added.append(stack)
containers_added.append(stack)

View File

@ -5,6 +5,7 @@ from UM.Mesh.MeshWriter import MeshWriter
from UM.Logger import Logger
from UM.Application import Application
from UM.Settings.InstanceContainer import InstanceContainer
from UM.Util import parseBool
from cura.Settings.ExtruderManager import ExtruderManager
@ -120,6 +121,10 @@ class GCodeWriter(MeshWriter):
if flat_global_container.getMetaDataEntry("quality_type", None) is None:
flat_global_container.addMetaDataEntry("quality_type", stack.quality.getMetaDataEntry("quality_type", "normal"))
# Ensure that quality_definition is set. (Can happen if we have empty quality changes).
if parseBool(stack.getMetaDataEntry("has_machine_quality", "False")):
flat_global_container.addMetaDataEntry("quality_definition", stack.getMetaDataEntry("quality_definition"))
serialized = flat_global_container.serialize()
data = {"global_quality": serialized}

View File

@ -10,7 +10,8 @@ Item
{
id: base
property bool isUM3: Cura.MachineManager.activeQualityDefinitionId == "ultimaker3"
property string activeQualityDefinitionId: Cura.MachineManager.activeQualityDefinitionId
property bool isUM3: activeQualityDefinitionId == "ultimaker3" || activeQualityDefinitionId.match("ultimaker_") != null
property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0
property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands
property bool authenticationRequested: printerConnected && (Cura.MachineManager.printerOutputDevices[0].authenticationState == 2 || Cura.MachineManager.printerOutputDevices[0].authenticationState == 5) // AuthState.AuthenticationRequested or AuthenticationReceived.

View File

@ -90,6 +90,7 @@
"infill_overlap": { "value": "0" },
"infill_pattern": { "value": "'triangles'" },
"infill_wipe_dist": { "value": "0" },
"initial_layer_line_width_factor": { "value": "120" },
"jerk_enabled": { "value": "True" },
"jerk_layer_0": { "value": "jerk_topbottom" },
"jerk_prime_tower": { "value": "math.ceil(jerk_print * 15 / 25)" },
@ -109,7 +110,9 @@
"material_bed_temperature": { "maximum_value": "115" },
"material_bed_temperature_layer_0": { "maximum_value": "115" },
"material_standby_temperature": { "value": "100" },
"meshfix_maximum_resolution": { "value": "0.04" },
"multiple_mesh_overlap": { "value": "0" },
"optimize_wall_printing_order": { "value": "True" },
"prime_tower_enable": { "default_value": true },
"raft_airgap": { "value": "0" },
"raft_base_thickness": { "value": "0.3" },
@ -120,6 +123,7 @@
"raft_margin": { "value": "10" },
"raft_surface_layers": { "value": "1" },
"retraction_amount": { "value": "2" },
"retraction_combing": { "default_value": "noskin" },
"retraction_count_max": { "value": "10" },
"retraction_extrusion_window": { "value": "1" },
"retraction_hop": { "value": "2" },

View File

@ -1,7 +1,7 @@
// Copyright (c) 2018 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.8
import QtQuick 2.7
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import QtQuick.Layouts 1.1

View File

@ -1,7 +1,7 @@
// Copyright (c) 2018 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.8
import QtQuick 2.7
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import QtQuick.Layouts 1.1

View File

@ -1,9 +1,9 @@
// Copyright (c) 2018 Ultimaker B.V.
// Uranium is released under the terms of the LGPLv3 or higher.
import QtQuick 2.8
import QtQuick 2.7
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.1
import QtQuick.Controls 2.0
import UM 1.2 as UM

View File

@ -1,9 +1,9 @@
// Copyright (c) 2018 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.8
import QtQuick 2.7
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.1
import QtQuick.Controls 2.0
import UM 1.1 as UM
import Cura 1.0 as Cura

View File

@ -1,7 +1,7 @@
// Copyright (c) 2016 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.8
import QtQuick 2.7
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import QtQuick.Layouts 1.1

View File

@ -1,7 +1,7 @@
// Copyright (c) 2017 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.8
import QtQuick 2.7
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1

View File

@ -1,7 +1,7 @@
// Copyright (c) 2015 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.8
import QtQuick 2.7
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import QtQuick.Layouts 1.1

View File

@ -120,6 +120,31 @@ UM.Dialog
width: (parent.width / 3) | 0
}
}
Column
{
width: parent.width
visible: Cura.MachineManager.hasVariantBuildplates
Item // Spacer
{
height: spacerHeight
width: height
}
Row
{
width: parent.width
height: childrenRect.height
Label
{
text: catalog.i18nc("@action:label", "Build plate")
width: (parent.width / 3) | 0
}
Label
{
text: Cura.MachineManager.activeVariantBuildplateName
width: (parent.width / 3) | 0
}
}
}
Repeater
{

View File

@ -13,6 +13,7 @@ setting_version = 4
[values]
cool_fan_full_at_height = =layer_height_0 + 2 * layer_height
cool_fan_speed_max = =cool_fan_speed
infill_line_width = =round(line_width * 0.42 / 0.35, 2)
machine_nozzle_cool_down_speed = 0.75
machine_nozzle_heat_up_speed = 1.6
material_print_temperature = =default_material_print_temperature + 5
@ -20,9 +21,9 @@ material_standby_temperature = 100
prime_tower_enable = False
skin_overlap = 20
speed_layer_0 = 20
speed_topbottom = =math.ceil(speed_print * 35 / 70)
speed_wall = =math.ceil(speed_print * 50 / 70)
speed_wall_0 = =math.ceil(speed_wall * 35 / 50)
speed_topbottom = =math.ceil(speed_print * 40 / 70)
speed_wall = =math.ceil(speed_print * 55 / 70)
speed_wall_0 = =math.ceil(speed_wall * 45 / 50)
top_bottom_thickness = 1
wall_thickness = 1

View File

@ -13,6 +13,7 @@ setting_version = 4
[values]
cool_fan_full_at_height = =layer_height_0 + 2 * layer_height
cool_fan_speed_max = =cool_fan_speed
infill_line_width = =round(line_width * 0.42 / 0.35, 2)
machine_nozzle_cool_down_speed = 0.75
machine_nozzle_heat_up_speed = 1.6
material_standby_temperature = 100

View File

@ -14,6 +14,7 @@ setting_version = 4
cool_fan_full_at_height = =layer_height_0 + 2 * layer_height
cool_fan_speed_max = =cool_fan_speed
cool_min_speed = 10
infill_line_width = =round(line_width * 0.42 / 0.35, 2)
machine_nozzle_cool_down_speed = 0.75
machine_nozzle_heat_up_speed = 1.6
material_print_temperature = =default_material_print_temperature - 5

View File

@ -14,6 +14,7 @@ setting_version = 4
cool_fan_full_at_height = =layer_height_0 + 2 * layer_height
cool_fan_speed_max = =cool_fan_speed
cool_min_speed = 7
infill_line_width = =round(line_width * 0.42 / 0.35, 2)
machine_nozzle_cool_down_speed = 0.75
machine_nozzle_heat_up_speed = 1.6
material_standby_temperature = 100

View File

@ -18,11 +18,10 @@ cool_fan_speed_max = 100
cool_min_layer_time_fan_speed_max = 6
cool_min_speed = 4
gradual_infill_step_height = =5 * layer_height
gradual_infill_steps = 4
infill_line_width = =round(line_width * 0.38 / 0.38, 2)
infill_overlap = 0
infill_pattern = tetrahedral
infill_sparse_density = 96
infill_pattern = cross_3d
infill_sparse_density = 10
infill_wipe_dist = 0.1
jerk_enabled = True
jerk_print = 25

View File

@ -18,11 +18,10 @@ cool_fan_speed_max = 100
cool_min_layer_time_fan_speed_max = 6
cool_min_speed = 4
gradual_infill_step_height = =5 * layer_height
gradual_infill_steps = 4
infill_line_width = =round(line_width * 0.38 / 0.38, 2)
infill_overlap = 0
infill_pattern = tetrahedral
infill_sparse_density = 96
infill_pattern = cross_3d
infill_sparse_density = 10
infill_wipe_dist = 0.1
jerk_enabled = True
jerk_print = 25

View File

@ -18,11 +18,10 @@ cool_fan_speed_max = 100
cool_min_layer_time_fan_speed_max = 6
cool_min_speed = 4
gradual_infill_step_height = =5 * layer_height
gradual_infill_steps = 4
infill_line_width = =round(line_width * 0.38 / 0.38, 2)
infill_overlap = 0
infill_pattern = tetrahedral
infill_sparse_density = 96
infill_pattern = cross_3d
infill_sparse_density = 10
infill_wipe_dist = 0.1
jerk_enabled = True
jerk_print = 25

View File

@ -15,8 +15,8 @@ cool_fan_full_at_height = =layer_height_0 + 2 * layer_height
cool_fan_speed_max = =100
cool_min_speed = 2
gradual_infill_step_height = =3 * layer_height
infill_line_width = =round(line_width * 0.535 / 0.75, 2)
infill_pattern = cubic
infill_line_width = =round(line_width * 0.65 / 0.75, 2)
infill_pattern = triangles
line_width = =machine_nozzle_size * 0.9375
machine_nozzle_cool_down_speed = 0.75
machine_nozzle_heat_up_speed = 1.6
@ -25,6 +25,12 @@ material_initial_print_temperature = =max(-273.15, material_print_temperature -
material_print_temperature = =default_material_print_temperature + 10
material_standby_temperature = 100
prime_tower_enable = True
retract_at_layer_change = False
speed_print = 45
speed_topbottom = =math.ceil(speed_print * 35 / 45)
speed_wall = =math.ceil(speed_print * 40 / 45)
speed_wall_x = =speed_wall
speed_wall_0 = =math.ceil(speed_wall * 35 / 40)
support_angle = 70
support_line_width = =line_width * 0.75
support_pattern = ='triangles'

View File

@ -15,8 +15,8 @@ cool_fan_full_at_height = =layer_height_0 + 2 * layer_height
cool_fan_speed_max = =100
cool_min_speed = 2
gradual_infill_step_height = =3 * layer_height
infill_line_width = =round(line_width * 0.535 / 0.75, 2)
infill_pattern = cubic
infill_line_width = =round(line_width * 0.65 / 0.75, 2)
infill_pattern = triangles
layer_height = 0.4
line_width = =machine_nozzle_size * 0.9375
machine_nozzle_cool_down_speed = 0.75
@ -27,6 +27,12 @@ material_print_temperature = =default_material_print_temperature + 15
material_standby_temperature = 100
prime_tower_enable = True
raft_margin = 10
retract_at_layer_change = False
speed_print = 45
speed_topbottom = =math.ceil(speed_print * 35 / 45)
speed_wall = =math.ceil(speed_print * 40 / 45)
speed_wall_x = =speed_wall
speed_wall_0 = =math.ceil(speed_wall * 35 / 40)
support_angle = 70
support_line_width = =line_width * 0.75
support_pattern = ='triangles'

View File

@ -15,8 +15,8 @@ cool_fan_full_at_height = =layer_height_0 + 2 * layer_height
cool_fan_speed_max = =100
cool_min_speed = 2
gradual_infill_step_height = =3 * layer_height
infill_line_width = =round(line_width * 0.535 / 0.75, 2)
infill_pattern = cubic
infill_line_width = =round(line_width * 0.65 / 0.75, 2)
infill_pattern = triangles
layer_height = 0.3
line_width = =machine_nozzle_size * 0.9375
machine_nozzle_cool_down_speed = 0.75
@ -26,6 +26,12 @@ material_initial_print_temperature = =max(-273.15, material_print_temperature -
material_print_temperature = =default_material_print_temperature + 10
material_standby_temperature = 100
prime_tower_enable = True
retract_at_layer_change = False
speed_print = 45
speed_topbottom = =math.ceil(speed_print * 35 / 45)
speed_wall = =math.ceil(speed_print * 40 / 45)
speed_wall_x = =speed_wall
speed_wall_0 = =math.ceil(speed_wall * 35 / 40)
support_angle = 70
support_line_width = =line_width * 0.75
support_pattern = ='triangles'

View File

@ -15,11 +15,10 @@ brim_width = 8.75
cool_min_layer_time_fan_speed_max = 6
top_skin_expand_distance = =line_width * 2
gradual_infill_step_height = =4 * layer_height
gradual_infill_steps = 5
infill_before_walls = True
infill_line_width = =round(line_width * 0.7 / 0.8, 2)
infill_pattern = tetrahedral
infill_sparse_density = 80
infill_pattern = cross_3d
infill_sparse_density = 10
jerk_prime_tower = =math.ceil(jerk_print * 25 / 25)
jerk_support = =math.ceil(jerk_print * 25 / 25)
jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25)

View File

@ -15,11 +15,10 @@ brim_width = 8.75
cool_min_layer_time_fan_speed_max = 6
top_skin_expand_distance = =line_width * 2
gradual_infill_step_height = =4 * layer_height
gradual_infill_steps = 5
infill_before_walls = True
infill_line_width = =round(line_width * 0.7 / 0.8, 2)
infill_pattern = tetrahedral
infill_sparse_density = 80
infill_pattern = cross_3d
infill_sparse_density = 10
jerk_prime_tower = =math.ceil(jerk_print * 25 / 25)
jerk_support = =math.ceil(jerk_print * 25 / 25)
jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25)

View File

@ -15,11 +15,10 @@ brim_width = 8.75
cool_min_layer_time_fan_speed_max = 6
top_skin_expand_distance = =line_width * 2
gradual_infill_step_height = =4 * layer_height
gradual_infill_steps = 5
infill_before_walls = True
infill_line_width = =round(line_width * 0.7 / 0.8, 2)
infill_pattern = tetrahedral
infill_sparse_density = 80
infill_pattern = cross_3d
infill_sparse_density = 10
jerk_prime_tower = =math.ceil(jerk_print * 25 / 25)
jerk_support = =math.ceil(jerk_print * 25 / 25)
jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25)