diff --git a/cura/CuraContainerRegistry.py b/cura/CuraContainerRegistry.py
index 2ecb22d670..af7ca2e87e 100644
--- a/cura/CuraContainerRegistry.py
+++ b/cura/CuraContainerRegistry.py
@@ -53,7 +53,7 @@ class CuraContainerRegistry(ContainerRegistry):
def _containerExists(self, container_type, container_name):
container_class = ContainerStack if container_type == "machine" else InstanceContainer
- return self.findContainers(container_class, id = container_name, type = container_type) or \
+ return self.findContainers(container_class, id = container_name, type = container_type, ignore_case = True) or \
self.findContainers(container_class, name = container_name, type = container_type)
## Exports an profile to a file
diff --git a/cura/ExtruderManager.py b/cura/ExtruderManager.py
index 5d0ad612cf..e937714d85 100644
--- a/cura/ExtruderManager.py
+++ b/cura/ExtruderManager.py
@@ -22,7 +22,7 @@ class ExtruderManager(QObject):
def __init__(self, parent = None):
super().__init__(parent)
self._extruder_trains = { } #Per machine, a dictionary of extruder container stack IDs.
- self._active_extruder_index = 0
+ self._active_extruder_index = -1
UM.Application.getInstance().globalContainerStackChanged.connect(self._addCurrentMachineExtruders)
## Gets the unique identifier of the currently active extruder stack.
@@ -66,6 +66,10 @@ class ExtruderManager(QObject):
self._active_extruder_index = index
self.activeExtruderChanged.emit()
+ @pyqtProperty(int, notify = activeExtruderChanged)
+ def activeExtruderIndex(self):
+ return self._active_extruder_index
+
def getActiveExtruderStack(self):
global_container_stack = UM.Application.getInstance().getGlobalContainerStack()
if global_container_stack:
diff --git a/cura/MachineManagerModel.py b/cura/MachineManagerModel.py
index 7aa99e1b09..e5c2989362 100644
--- a/cura/MachineManagerModel.py
+++ b/cura/MachineManagerModel.py
@@ -4,6 +4,7 @@
from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal
from UM.Application import Application
from UM.Preferences import Preferences
+from UM.Logger import Logger
import UM.Settings
from UM.Settings.Validator import ValidatorState
@@ -51,6 +52,7 @@ class MachineManagerModel(QObject):
active_machine_id = Preferences.getInstance().getValue("cura/active_machine")
+ self._printer_output_devices = []
Application.getInstance().getOutputDeviceManager().outputDevicesChanged.connect(self._onOutputDevicesChanged)
if active_machine_id != "":
@@ -72,8 +74,52 @@ class MachineManagerModel(QObject):
outputDevicesChanged = pyqtSignal()
def _onOutputDevicesChanged(self):
+ for printer_output_device in self._printer_output_devices:
+ printer_output_device.hotendIdChanged.disconnect(self._onHotendIdChanged)
+ printer_output_device.materialIdChanged.disconnect(self._onMaterialIdChanged)
+
+ self._printer_output_devices.clear()
+
+ for printer_output_device in Application.getInstance().getOutputDeviceManager().getOutputDevices():
+ if isinstance(printer_output_device, PrinterOutputDevice):
+ self._printer_output_devices.append(printer_output_device)
+ printer_output_device.hotendIdChanged.connect(self._onHotendIdChanged)
+ printer_output_device.materialIdChanged.connect(self._onMaterialIdChanged)
+
self.outputDevicesChanged.emit()
+ @pyqtProperty("QVariantList", notify = outputDevicesChanged)
+ def printerOutputDevices(self):
+ return self._printer_output_devices
+
+ def _onHotendIdChanged(self, index, hotend_id):
+ if not self._global_container_stack:
+ return
+
+ containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(type = "variant", definition = self._global_container_stack.getBottom().getId(), name = hotend_id)
+ if containers:
+ Logger.log("d", "Setting hotend variant of hotend %d to %s" % (index, containers[0].getId()))
+ ExtruderManager.ExtruderManager.getInstance().setActiveExtruderIndex(index)
+ self.setActiveVariant(containers[0].getId())
+
+ def _onMaterialIdChanged(self, index, material_id):
+ # TODO: fix this
+ if not self._global_container_stack:
+ return
+
+ definition_id = "fdmprinter"
+ if self._global_container_stack.getMetaDataEntry("has_machine_materials", False):
+ definition_id = self._global_container_stack.getBottom().getId()
+
+ containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(type = "material", definition = definition_id, GUID = material_id)
+ if containers:
+ Logger.log("d", "Setting material of hotend %d to %s" % (index, containers[0].getId()))
+ ExtruderManager.ExtruderManager.getInstance().setActiveExtruderIndex(index)
+ self.setActiveMaterial(containers[0].getId())
+ else:
+ Logger.log("w", "No material definition found for printer definition %s and GUID %s" % (definition_id, material_id))
+
+
def _onGlobalPropertyChanged(self, key, property_name):
if property_name == "value":
self.globalValueChanged.emit()
@@ -165,9 +211,6 @@ class MachineManagerModel(QObject):
Application.getInstance().setGlobalContainerStack(new_global_stack)
- @pyqtProperty("QVariantList", notify = outputDevicesChanged)
- def printerOutputDevices(self):
- return [printer_output_device for printer_output_device in Application.getInstance().getOutputDeviceManager().getOutputDevices() if isinstance(printer_output_device, PrinterOutputDevice)]
## Create a name that is not empty and unique
# \param container_type \type{string} Type of the container (machine, quality, ...)
diff --git a/cura/MultiMaterialDecorator.py b/cura/MultiMaterialDecorator.py
index c702ecef13..5fee777309 100644
--- a/cura/MultiMaterialDecorator.py
+++ b/cura/MultiMaterialDecorator.py
@@ -5,4 +5,7 @@ class MultiMaterialDecorator(SceneNodeDecorator):
super().__init__()
def isMultiMaterial(self):
- return True
\ No newline at end of file
+ return True
+
+ def __deepcopy__(self, memo):
+ return MultiMaterialDecorator()
\ No newline at end of file
diff --git a/cura/PrinterOutputDevice.py b/cura/PrinterOutputDevice.py
index 7f6e51e1fd..212ed86ab3 100644
--- a/cura/PrinterOutputDevice.py
+++ b/cura/PrinterOutputDevice.py
@@ -24,6 +24,8 @@ class PrinterOutputDevice(QObject, OutputDevice):
self._num_extruders = 1
self._hotend_temperatures = [0] * self._num_extruders
self._target_hotend_temperatures = [0] * self._num_extruders
+ self._material_ids = [""] * self._num_extruders
+ self._hotend_ids = [""] * self._num_extruders
self._progress = 0
self._head_x = 0
self._head_y = 0
@@ -57,6 +59,12 @@ class PrinterOutputDevice(QObject, OutputDevice):
# Signal to be emitted when head position is changed (x,y,z)
headPositionChanged = pyqtSignal()
+ # Signal to be emitted when either of the material ids is changed
+ materialIdChanged = pyqtSignal(int, str, arguments = ["index", "id"])
+
+ # Signal to be emitted when either of the hotend ids is changed
+ hotendIdChanged = pyqtSignal(int, str, arguments = ["index", "id"])
+
# Signal that is emitted every time connection state is changed.
# it also sends it's own device_id (for convenience sake)
connectionStateChanged = pyqtSignal(str)
@@ -212,6 +220,34 @@ class PrinterOutputDevice(QObject, OutputDevice):
self._hotend_temperatures[index] = temperature
self.hotendTemperaturesChanged.emit()
+ @pyqtProperty("QVariantList", notify = materialIdChanged)
+ def materialIds(self):
+ return self._material_ids
+
+ ## Protected setter for the current material id.
+ # /param index Index of the extruder
+ # /param material_id id of the material
+ def _setMaterialId(self, index, material_id):
+ if material_id and material_id != "" and material_id != self._material_ids[index]:
+ Logger.log("d", "Setting material id of hotend %d to %s" % (index, material_id))
+ self._material_ids[index] = material_id
+ self.materialIdChanged.emit(index, material_id)
+
+
+ @pyqtProperty("QVariantList", notify = hotendIdChanged)
+ def hotendIds(self):
+ return self._hotend_ids
+
+ ## Protected setter for the current hotend id.
+ # /param index Index of the extruder
+ # /param hotend_id id of the hotend
+ def _setHotendId(self, index, hotend_id):
+ if hotend_id and hotend_id != "" and hotend_id != self._hotend_ids[index]:
+ Logger.log("d", "Setting hotend id of hotend %d to %s" % (index, hotend_id))
+ self._hotend_ids[index] = hotend_id
+ self.hotendIdChanged.emit(index, hotend_id)
+
+
## Attempt to establish connection
def connect(self):
raise NotImplementedError("connect needs to be implemented")
diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py
index 9e37fa9049..40729eb48b 100644
--- a/plugins/CuraEngineBackend/CuraEngineBackend.py
+++ b/plugins/CuraEngineBackend/CuraEngineBackend.py
@@ -127,13 +127,15 @@ class CuraEngineBackend(Backend):
## Perform a slice of the scene.
def slice(self):
+ if not self._enabled or not self._global_container_stack: #We shouldn't be slicing.
+ # try again in a short time
+ self._change_timer.start()
+ return
+
self.printDurationMessage.emit(0, [0])
self._stored_layer_data = []
- if not self._enabled or not self._global_container_stack: #We shouldn't be slicing.
- return
-
if self._slicing: #We were already slicing. Stop the old job.
self._terminate()
diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py
index 2751173a1c..487b077d2b 100644
--- a/plugins/SliceInfoPlugin/SliceInfo.py
+++ b/plugins/SliceInfoPlugin/SliceInfo.py
@@ -45,74 +45,79 @@ class SliceInfo(Extension):
Preferences.getInstance().setValue("info/asked_send_slice_info", True)
def _onWriteStarted(self, output_device):
- if not Preferences.getInstance().getValue("info/send_slice_info"):
- Logger.log("d", "'info/send_slice_info' is turned off.")
- return # Do nothing, user does not want to send data
-
- global_container_stack = Application.getInstance().getGlobalContainerStack()
-
- # Get total material used (in mm^3)
- print_information = Application.getInstance().getPrintInformation()
- material_radius = 0.5 * global_container_stack.getProperty("material_diameter", "value")
-
- # TODO: Send material per extruder instead of mashing it on a pile
- material_used = math.pi * material_radius * material_radius * sum(print_information.materialAmounts) #Volume of all materials used
-
- # Get model information (bounding boxes, hashes and transformation matrix)
- models_info = []
- for node in DepthFirstIterator(Application.getInstance().getController().getScene().getRoot()):
- if type(node) is SceneNode and node.getMeshData() and node.getMeshData().getVertices() is not None:
- if not getattr(node, "_outside_buildarea", False):
- model_info = {}
- model_info["hash"] = node.getMeshData().getHash()
- model_info["bounding_box"] = {}
- model_info["bounding_box"]["minimum"] = {}
- model_info["bounding_box"]["minimum"]["x"] = node.getBoundingBox().minimum.x
- model_info["bounding_box"]["minimum"]["y"] = node.getBoundingBox().minimum.y
- model_info["bounding_box"]["minimum"]["z"] = node.getBoundingBox().minimum.z
-
- model_info["bounding_box"]["maximum"] = {}
- model_info["bounding_box"]["maximum"]["x"] = node.getBoundingBox().maximum.x
- model_info["bounding_box"]["maximum"]["y"] = node.getBoundingBox().maximum.y
- model_info["bounding_box"]["maximum"]["z"] = node.getBoundingBox().maximum.z
- model_info["transformation"] = str(node.getWorldTransformation().getData())
-
- models_info.append(model_info)
-
- # Bundle the collected data
- submitted_data = {
- "processor": platform.processor(),
- "machine": platform.machine(),
- "platform": platform.platform(),
- "settings": global_container_stack.serialize(), # global_container with references on used containers
- "version": Application.getInstance().getVersion(),
- "modelhash": "None",
- "printtime": print_information.currentPrintTime.getDisplayString(),
- "filament": material_used,
- "language": Preferences.getInstance().getValue("general/language"),
- "materials_profiles ": {}
- }
- for container in global_container_stack.getContainers():
- container_id = container.getId()
- try:
- container_serialized = container.serialize()
- except NotImplementedError:
- Logger.log("w", "Container %s could not be serialized!", container_id)
- continue
-
- if container_serialized:
- submitted_data["settings_%s" %(container_id)] = container_serialized # This can be anything, eg. INI, JSON, etc.
- else:
- Logger.log("i", "No data found in %s to be serialized!", container_id)
-
- # Convert data to bytes
- submitted_data = urllib.parse.urlencode(submitted_data)
- binary_data = submitted_data.encode("utf-8")
-
- # Submit data
try:
- f = urllib.request.urlopen(self.info_url, data = binary_data, timeout = 1)
- Logger.log("i", "Sent anonymous slice info to %s", self.info_url)
- f.close()
- except Exception as e:
- Logger.logException("e", e)
+ if not Preferences.getInstance().getValue("info/send_slice_info"):
+ Logger.log("d", "'info/send_slice_info' is turned off.")
+ return # Do nothing, user does not want to send data
+
+ global_container_stack = Application.getInstance().getGlobalContainerStack()
+
+ # Get total material used (in mm^3)
+ print_information = Application.getInstance().getPrintInformation()
+ material_radius = 0.5 * global_container_stack.getProperty("material_diameter", "value")
+
+ # TODO: Send material per extruder instead of mashing it on a pile
+ material_used = math.pi * material_radius * material_radius * sum(print_information.materialAmounts) #Volume of all materials used
+
+ # Get model information (bounding boxes, hashes and transformation matrix)
+ models_info = []
+ for node in DepthFirstIterator(Application.getInstance().getController().getScene().getRoot()):
+ if type(node) is SceneNode and node.getMeshData() and node.getMeshData().getVertices() is not None:
+ if not getattr(node, "_outside_buildarea", False):
+ model_info = {}
+ model_info["hash"] = node.getMeshData().getHash()
+ model_info["bounding_box"] = {}
+ model_info["bounding_box"]["minimum"] = {}
+ model_info["bounding_box"]["minimum"]["x"] = node.getBoundingBox().minimum.x
+ model_info["bounding_box"]["minimum"]["y"] = node.getBoundingBox().minimum.y
+ model_info["bounding_box"]["minimum"]["z"] = node.getBoundingBox().minimum.z
+
+ model_info["bounding_box"]["maximum"] = {}
+ model_info["bounding_box"]["maximum"]["x"] = node.getBoundingBox().maximum.x
+ model_info["bounding_box"]["maximum"]["y"] = node.getBoundingBox().maximum.y
+ model_info["bounding_box"]["maximum"]["z"] = node.getBoundingBox().maximum.z
+ model_info["transformation"] = str(node.getWorldTransformation().getData())
+
+ models_info.append(model_info)
+
+ # Bundle the collected data
+ submitted_data = {
+ "processor": platform.processor(),
+ "machine": platform.machine(),
+ "platform": platform.platform(),
+ "settings": global_container_stack.serialize(), # global_container with references on used containers
+ "version": Application.getInstance().getVersion(),
+ "modelhash": "None",
+ "printtime": print_information.currentPrintTime.getDisplayString(),
+ "filament": material_used,
+ "language": Preferences.getInstance().getValue("general/language"),
+ "materials_profiles ": {}
+ }
+ for container in global_container_stack.getContainers():
+ container_id = container.getId()
+ try:
+ container_serialized = container.serialize()
+ except NotImplementedError:
+ Logger.log("w", "Container %s could not be serialized!", container_id)
+ continue
+
+ if container_serialized:
+ submitted_data["settings_%s" %(container_id)] = container_serialized # This can be anything, eg. INI, JSON, etc.
+ else:
+ Logger.log("i", "No data found in %s to be serialized!", container_id)
+
+ # Convert data to bytes
+ submitted_data = urllib.parse.urlencode(submitted_data)
+ binary_data = submitted_data.encode("utf-8")
+
+ # Submit data
+ try:
+ f = urllib.request.urlopen(self.info_url, data = binary_data, timeout = 1)
+ Logger.log("i", "Sent anonymous slice info to %s", self.info_url)
+ f.close()
+ except Exception as e:
+ Logger.logException("e", "An exception occurred while trying to send slice information")
+ except:
+ # We really can't afford to have a mistake here, as this would break the sending of g-code to a device
+ # (Either saving or directly to a printer). The functionality of the slice data is not *that* important.
+ pass
\ No newline at end of file
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index 2938604eed..da3dfa2bde 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -37,9 +37,8 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
self._connect_thread = threading.Thread(target = self._connect)
self._connect_thread.daemon = True
- self._end_stop_thread = threading.Thread(target = self._pollEndStop)
- self._end_stop_thread.daemon = True
- self._poll_endstop = -1
+ self._end_stop_thread = None
+ self._poll_endstop = False
# The baud checking is done by sending a number of m105 commands to the printer and waiting for a readable
# response. If the baudrate is correct, this should make sense, else we get giberish.
@@ -221,13 +220,17 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
@pyqtSlot()
def startPollEndstop(self):
- if self._poll_endstop == -1:
+ if not self._poll_endstop:
self._poll_endstop = True
+ if self._end_stop_thread is None:
+ self._end_stop_thread = threading.Thread(target=self._pollEndStop)
+ self._end_stop_thread.daemon = True
self._end_stop_thread.start()
@pyqtSlot()
def stopPollEndstop(self):
self._poll_endstop = False
+ self._end_stop_thread = None
def _pollEndStop(self):
while self._connection_state == ConnectionState.connected and self._poll_endstop:
diff --git a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py
index 3f739a8629..fc10c217a0 100644
--- a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py
+++ b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py
@@ -152,7 +152,7 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin, Extension):
"ultimaker_original_plus" : "MarlinUltimaker-UMOP-{baudrate}.hex",
"ultimaker2" : "MarlinUltimaker2.hex",
"ultimaker2_go" : "MarlinUltimaker2go.hex",
- "ultimaker2plus" : "MarlinUltimaker2plus.hex",
+ "ultimaker2_plus" : "MarlinUltimaker2plus.hex",
"ultimaker2_extended" : "MarlinUltimaker2extended.hex",
"ultimaker2_extended_plus" : "MarlinUltimaker2extended-plus.hex",
}
diff --git a/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py b/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py
index f13257e8a9..201e415e15 100644
--- a/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py
+++ b/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py
@@ -43,7 +43,6 @@ class UMOCheckupMachineAction(MachineAction):
if self._output_device is None and self._check_started:
self.startCheck()
-
def _getPrinterOutputDevices(self):
return [printer_output_device for printer_output_device in
Application.getInstance().getOutputDeviceManager().getOutputDevices() if
@@ -63,6 +62,7 @@ class UMOCheckupMachineAction(MachineAction):
self._output_device = None
self._check_started = False
+ self.checkStartedChanged.emit()
# Ensure everything is reset (and right signals are emitted again)
self._bed_test_completed = False
@@ -137,9 +137,16 @@ class UMOCheckupMachineAction(MachineAction):
self._z_min_endstop_test_completed = True
self.onZMinEndstopTestCompleted.emit()
+ checkStartedChanged = pyqtSignal()
+
+ @pyqtProperty(bool, notify = checkStartedChanged)
+ def checkStarted(self):
+ return self._check_started
+
@pyqtSlot()
def startCheck(self):
self._check_started = True
+ self.checkStartedChanged.emit()
output_devices = self._getPrinterOutputDevices()
if output_devices:
self._output_device = output_devices[0]
@@ -150,7 +157,7 @@ class UMOCheckupMachineAction(MachineAction):
self._output_device.bedTemperatureChanged.connect(self._onBedTemperatureChanged)
self._output_device.hotendTemperaturesChanged.connect(self._onHotendTemperatureChanged)
self._output_device.endstopStateChanged.connect(self._onEndstopStateChanged)
- except AttributeError: # Connection is probably not a USB connection. Something went pretty wrong if this happens.
+ except AttributeError as e: # Connection is probably not a USB connection. Something went pretty wrong if this happens.
pass
@pyqtSlot()
diff --git a/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml b/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml
index 4b25d3130d..5d5a102e7d 100644
--- a/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml
+++ b/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml
@@ -32,7 +32,7 @@ Cura.MachineAction
anchors.topMargin: UM.Theme.getSize("default_margin").height
width: parent.width
wrapMode: Text.WordWrap
- text: catalog.i18nc("@label","It's a good idea to do a few sanity checks on your Ultimaker. You can skip this step if you know your machine is functional");
+ text: catalog.i18nc("@label", "It's a good idea to do a few sanity checks on your Ultimaker. You can skip this step if you know your machine is functional");
}
Item
@@ -51,7 +51,6 @@ Cura.MachineAction
text: catalog.i18nc("@action:button","Start Printer Check");
onClicked:
{
- checkupContent.visible = true
manager.startCheck()
}
}
@@ -73,7 +72,7 @@ Cura.MachineAction
id: checkupContent
anchors.top: startStopButtons.bottom
anchors.topMargin: UM.Theme.getSize("default_margin").height
- visible: false
+ visible: manager.checkStarted
width: parent.width
height: 250
//////////////////////////////////////////////////////////
@@ -157,6 +156,7 @@ Cura.MachineAction
{
id: nozzleTempLabel
width: checkupMachineAction.leftRow
+ height: nozzleTempButton.height
anchors.left: parent.left
anchors.top: endstopZLabel.bottom
wrapMode: Text.WordWrap
@@ -175,20 +175,16 @@ Cura.MachineAction
{
id: nozzleTempButton
width: checkupMachineAction.rightRow * 0.3
- height: nozzleTemp.height
+ height: childrenRect.height
anchors.top: nozzleTempLabel.top
anchors.left: bedTempStatus.right
anchors.leftMargin: UM.Theme.getSize("default_margin").width/2
Button
{
- height: nozzleTemp.height - 2
- anchors.verticalCenter: parent.verticalCenter
- anchors.horizontalCenter: parent.horizontalCenter
text: catalog.i18nc("@action:button","Start Heating")
onClicked:
{
manager.heatupHotend()
- nozzleTempStatus.text = catalog.i18nc("@info:progress","Checking")
}
}
}
@@ -208,10 +204,11 @@ Cura.MachineAction
{
id: bedTempLabel
width: checkupMachineAction.leftRow
+ height: bedTempButton.height
anchors.left: parent.left
anchors.top: nozzleTempLabel.bottom
wrapMode: Text.WordWrap
- text: catalog.i18nc("@label","bed temperature check:")
+ text: catalog.i18nc("@label","Bed temperature check:")
}
Label
@@ -227,15 +224,12 @@ Cura.MachineAction
{
id: bedTempButton
width: checkupMachineAction.rightRow * 0.3
- height: bedTemp.height
+ height: childrenRect.height
anchors.top: bedTempLabel.top
anchors.left: bedTempStatus.right
anchors.leftMargin: UM.Theme.getSize("default_margin").width/2
Button
{
- height: bedTemp.height - 2
- anchors.verticalCenter: parent.verticalCenter
- anchors.horizontalCenter: parent.horizontalCenter
text: catalog.i18nc("@action:button","Start Heating")
onClicked:
{
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 8bdbacc4ae..50c3676540 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -455,7 +455,7 @@
},
"skin_line_width":
{
- "label": "Top/bottom Line Width",
+ "label": "Top/Bottom Line Width",
"description": "Width of a single top/bottom line.",
"unit": "mm",
"minimum_value": "0.0001",
diff --git a/resources/definitions/ultimaker2_extended.def.json b/resources/definitions/ultimaker2_extended.def.json
index cead008643..fb443365f2 100644
--- a/resources/definitions/ultimaker2_extended.def.json
+++ b/resources/definitions/ultimaker2_extended.def.json
@@ -16,7 +16,7 @@
"overrides": {
"machine_height": {
- "default_value": 315
+ "default_value": 305
}
}
}
diff --git a/resources/definitions/ultimaker2_extended_plus.def.json b/resources/definitions/ultimaker2_extended_plus.def.json
index 23b308461d..f4190be83d 100644
--- a/resources/definitions/ultimaker2_extended_plus.def.json
+++ b/resources/definitions/ultimaker2_extended_plus.def.json
@@ -15,7 +15,7 @@
"overrides": {
"machine_height": {
- "default_value": 313
+ "default_value": 305
},
"machine_show_variants": {
"default_value": true
diff --git a/resources/materials/generic_abs.xml.fdm_material b/resources/materials/generic_abs.xml.fdm_material
index 654b06d221..82b2f1f963 100644
--- a/resources/materials/generic_abs.xml.fdm_material
+++ b/resources/materials/generic_abs.xml.fdm_material
@@ -9,7 +9,7 @@ Generic PLA profile. Serves as an example file, data in this file is not correct
ABS
Generic
- 506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9
+ 60636bb4-518f-42e7-8237-fe77b194ebe0
0
#FF0000
diff --git a/resources/materials/generic_cpe.xml.fdm_material b/resources/materials/generic_cpe.xml.fdm_material
index bbe6e328d2..8ac4dd8c71 100644
--- a/resources/materials/generic_cpe.xml.fdm_material
+++ b/resources/materials/generic_cpe.xml.fdm_material
@@ -9,7 +9,7 @@ Generic PLA profile. Serves as an example file, data in this file is not correct
CPE
Generic
- 506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9
+ 12f41353-1a33-415e-8b4f-a775a6c70cc6
0
#0000FF
diff --git a/resources/qml/MonitorButton.qml b/resources/qml/MonitorButton.qml
index bbb39b188e..af163a39e2 100644
--- a/resources/qml/MonitorButton.qml
+++ b/resources/qml/MonitorButton.qml
@@ -24,7 +24,7 @@ Rectangle
return UM.Theme.getColor("status_offline")
else if(Cura.MachineManager.printerOutputDevices[0].jobState == "printing" || Cura.MachineManager.printerOutputDevices[0].jobState == "pre_print")
return UM.Theme.getColor("status_busy")
- else if(Cura.MachineManager.printerOutputDevices[0].jobState == "ready")
+ else if(Cura.MachineManager.printerOutputDevices[0].jobState == "ready" || Cura.MachineManager.printerOutputDevices[0].jobState == "")
return UM.Theme.getColor("status_ready")
else if(Cura.MachineManager.printerOutputDevices[0].jobState == "paused")
return UM.Theme.getColor("status_paused")
diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml
index 78930c8d90..d9b3b56109 100644
--- a/resources/qml/Sidebar.qml
+++ b/resources/qml/Sidebar.qml
@@ -103,7 +103,7 @@ Rectangle
return UM.Theme.getIcon("tab_monitor")
else if(Cura.MachineManager.printerOutputDevices[0].jobState == "printing" || Cura.MachineManager.printerOutputDevices[0].jobState == "pre_print")
return UM.Theme.getIcon("tab_monitor_busy")
- else if(Cura.MachineManager.printerOutputDevices[0].jobState == "ready")
+ else if(Cura.MachineManager.printerOutputDevices[0].jobState == "ready" || Cura.MachineManager.printerOutputDevices[0].jobState == "")
return UM.Theme.getIcon("tab_monitor_connected")
else if(Cura.MachineManager.printerOutputDevices[0].jobState == "paused")
return UM.Theme.getIcon("tab_monitor_paused")
diff --git a/resources/qml/SidebarHeader.qml b/resources/qml/SidebarHeader.qml
index ac6c491262..82dba70b92 100644
--- a/resources/qml/SidebarHeader.qml
+++ b/resources/qml/SidebarHeader.qml
@@ -13,7 +13,7 @@ Column
id: base;
property int totalHeightHeader: childrenRect.height
- property int currentExtruderIndex: -1;
+ property int currentExtruderIndex:ExtruderManager.activeExtruderIndex;
spacing: UM.Theme.getSize("default_margin").height
@@ -118,7 +118,7 @@ Column
{
base.currentExtruderIndex = -1;
forceActiveFocus()
- ExtruderManager.setActiveExtruderIndex(0);
+ ExtruderManager.setActiveExtruderIndex(base.currentExtruderIndex);
}
}