mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-05-01 08:14:22 +08:00
Merge branch 'master' of github.com:Ultimaker/Cura
This commit is contained in:
commit
38a07d75c7
@ -27,6 +27,7 @@ from UM.Settings.Validator import Validator
|
|||||||
from UM.Message import Message
|
from UM.Message import Message
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
from UM.Workspace.WorkspaceReader import WorkspaceReader
|
from UM.Workspace.WorkspaceReader import WorkspaceReader
|
||||||
|
from UM.Platform import Platform
|
||||||
|
|
||||||
from UM.Operations.AddSceneNodeOperation import AddSceneNodeOperation
|
from UM.Operations.AddSceneNodeOperation import AddSceneNodeOperation
|
||||||
from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation
|
from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation
|
||||||
@ -725,7 +726,9 @@ class CuraApplication(QtApplication):
|
|||||||
else:
|
else:
|
||||||
# Default
|
# Default
|
||||||
self.getController().setActiveTool("TranslateTool")
|
self.getController().setActiveTool("TranslateTool")
|
||||||
if Preferences.getInstance().getValue("view/center_on_select"):
|
|
||||||
|
# Hack: QVector bindings are broken on PyQt 5.7.1 on Windows. This disables it being called at all.
|
||||||
|
if Preferences.getInstance().getValue("view/center_on_select") and not Platform.isWindows():
|
||||||
self._center_after_select = True
|
self._center_after_select = True
|
||||||
else:
|
else:
|
||||||
if self.getController().getActiveTool():
|
if self.getController().getActiveTool():
|
||||||
|
@ -619,64 +619,67 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
|
|||||||
self._gcode = getattr(Application.getInstance().getController().getScene(), "gcode_list")
|
self._gcode = getattr(Application.getInstance().getController().getScene(), "gcode_list")
|
||||||
|
|
||||||
print_information = Application.getInstance().getPrintInformation()
|
print_information = Application.getInstance().getPrintInformation()
|
||||||
|
|
||||||
# Check if print cores / materials are loaded at all. Any failure in these results in an Error.
|
|
||||||
for index in range(0, self._num_extruders):
|
|
||||||
if print_information.materialLengths[index] != 0:
|
|
||||||
if self._json_printer_state["heads"][0]["extruders"][index]["hotend"]["id"] == "":
|
|
||||||
Logger.log("e", "No cartridge loaded in slot %s, unable to start print", index + 1)
|
|
||||||
self._error_message = Message(
|
|
||||||
i18n_catalog.i18nc("@info:status", "Unable to start a new print job. No PrinterCore loaded in slot {0}".format(index + 1)))
|
|
||||||
self._error_message.show()
|
|
||||||
return
|
|
||||||
if self._json_printer_state["heads"][0]["extruders"][index]["active_material"]["guid"] == "":
|
|
||||||
Logger.log("e", "No material loaded in slot %s, unable to start print", index + 1)
|
|
||||||
self._error_message = Message(
|
|
||||||
i18n_catalog.i18nc("@info:status",
|
|
||||||
"Unable to start a new print job. No material loaded in slot {0}".format(index + 1)))
|
|
||||||
self._error_message.show()
|
|
||||||
return
|
|
||||||
|
|
||||||
warnings = [] # There might be multiple things wrong. Keep a list of all the stuff we need to warn about.
|
warnings = [] # There might be multiple things wrong. Keep a list of all the stuff we need to warn about.
|
||||||
|
|
||||||
for index in range(0, self._num_extruders):
|
# Only check for mistakes if there is material length information.
|
||||||
# Check if there is enough material. Any failure in these results in a warning.
|
if print_information.materialLengths:
|
||||||
material_length = self._json_printer_state["heads"][0]["extruders"][index]["active_material"]["length_remaining"]
|
# Check if print cores / materials are loaded at all. Any failure in these results in an Error.
|
||||||
if material_length != -1 and print_information.materialLengths[index] > material_length:
|
for index in range(0, self._num_extruders):
|
||||||
Logger.log("w", "Printer reports that there is not enough material left for extruder %s. We need %s and the printer has %s", index + 1, print_information.materialLengths[index], material_length)
|
if print_information.materialLengths[index] != 0:
|
||||||
warnings.append(i18n_catalog.i18nc("@label", "Not enough material for spool {0}.").format(index+1))
|
if self._json_printer_state["heads"][0]["extruders"][index]["hotend"]["id"] == "":
|
||||||
|
Logger.log("e", "No cartridge loaded in slot %s, unable to start print", index + 1)
|
||||||
|
self._error_message = Message(
|
||||||
|
i18n_catalog.i18nc("@info:status", "Unable to start a new print job. No PrinterCore loaded in slot {0}".format(index + 1)))
|
||||||
|
self._error_message.show()
|
||||||
|
return
|
||||||
|
if self._json_printer_state["heads"][0]["extruders"][index]["active_material"]["guid"] == "":
|
||||||
|
Logger.log("e", "No material loaded in slot %s, unable to start print", index + 1)
|
||||||
|
self._error_message = Message(
|
||||||
|
i18n_catalog.i18nc("@info:status",
|
||||||
|
"Unable to start a new print job. No material loaded in slot {0}".format(index + 1)))
|
||||||
|
self._error_message.show()
|
||||||
|
return
|
||||||
|
|
||||||
# Check if the right cartridges are loaded. Any failure in these results in a warning.
|
for index in range(0, self._num_extruders):
|
||||||
extruder_manager = cura.Settings.ExtruderManager.ExtruderManager.getInstance()
|
# Check if there is enough material. Any failure in these results in a warning.
|
||||||
if print_information.materialLengths[index] != 0:
|
material_length = self._json_printer_state["heads"][0]["extruders"][index]["active_material"]["length_remaining"]
|
||||||
variant = extruder_manager.getExtruderStack(index).findContainer({"type": "variant"})
|
if material_length != -1 and print_information.materialLengths[index] > material_length:
|
||||||
core_name = self._json_printer_state["heads"][0]["extruders"][index]["hotend"]["id"]
|
Logger.log("w", "Printer reports that there is not enough material left for extruder %s. We need %s and the printer has %s", index + 1, print_information.materialLengths[index], material_length)
|
||||||
if variant:
|
warnings.append(i18n_catalog.i18nc("@label", "Not enough material for spool {0}.").format(index+1))
|
||||||
if variant.getName() != core_name:
|
|
||||||
Logger.log("w", "Extruder %s has a different Cartridge (%s) as Cura (%s)", index + 1, core_name, variant.getName())
|
|
||||||
warnings.append(i18n_catalog.i18nc("@label", "Different print core (Cura: {0}, Printer: {1}) selected for extruder {2}".format(variant.getName(), core_name, index + 1)))
|
|
||||||
|
|
||||||
material = extruder_manager.getExtruderStack(index).findContainer({"type": "material"})
|
# Check if the right cartridges are loaded. Any failure in these results in a warning.
|
||||||
if material:
|
extruder_manager = cura.Settings.ExtruderManager.ExtruderManager.getInstance()
|
||||||
remote_material_guid = self._json_printer_state["heads"][0]["extruders"][index]["active_material"]["guid"]
|
if print_information.materialLengths[index] != 0:
|
||||||
if material.getMetaDataEntry("GUID") != remote_material_guid:
|
variant = extruder_manager.getExtruderStack(index).findContainer({"type": "variant"})
|
||||||
Logger.log("w", "Extruder %s has a different material (%s) as Cura (%s)", index + 1,
|
core_name = self._json_printer_state["heads"][0]["extruders"][index]["hotend"]["id"]
|
||||||
remote_material_guid,
|
if variant:
|
||||||
material.getMetaDataEntry("GUID"))
|
if variant.getName() != core_name:
|
||||||
|
Logger.log("w", "Extruder %s has a different Cartridge (%s) as Cura (%s)", index + 1, core_name, variant.getName())
|
||||||
|
warnings.append(i18n_catalog.i18nc("@label", "Different print core (Cura: {0}, Printer: {1}) selected for extruder {2}".format(variant.getName(), core_name, index + 1)))
|
||||||
|
|
||||||
remote_materials = UM.Settings.ContainerRegistry.ContainerRegistry.getInstance().findInstanceContainers(type = "material", GUID = remote_material_guid, read_only = True)
|
material = extruder_manager.getExtruderStack(index).findContainer({"type": "material"})
|
||||||
remote_material_name = "Unknown"
|
if material:
|
||||||
if remote_materials:
|
remote_material_guid = self._json_printer_state["heads"][0]["extruders"][index]["active_material"]["guid"]
|
||||||
remote_material_name = remote_materials[0].getName()
|
if material.getMetaDataEntry("GUID") != remote_material_guid:
|
||||||
warnings.append(i18n_catalog.i18nc("@label", "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}").format(material.getName(), remote_material_name, index + 1))
|
Logger.log("w", "Extruder %s has a different material (%s) as Cura (%s)", index + 1,
|
||||||
|
remote_material_guid,
|
||||||
|
material.getMetaDataEntry("GUID"))
|
||||||
|
|
||||||
try:
|
remote_materials = UM.Settings.ContainerRegistry.ContainerRegistry.getInstance().findInstanceContainers(type = "material", GUID = remote_material_guid, read_only = True)
|
||||||
is_offset_calibrated = self._json_printer_state["heads"][0]["extruders"][index]["hotend"]["offset"]["state"] == "valid"
|
remote_material_name = "Unknown"
|
||||||
except KeyError: # Older versions of the API don't expose the offset property, so we must asume that all is well.
|
if remote_materials:
|
||||||
is_offset_calibrated = True
|
remote_material_name = remote_materials[0].getName()
|
||||||
|
warnings.append(i18n_catalog.i18nc("@label", "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}").format(material.getName(), remote_material_name, index + 1))
|
||||||
|
|
||||||
if not is_offset_calibrated:
|
try:
|
||||||
warnings.append(i18n_catalog.i18nc("@label", "Print core {0} is not properly calibrated. XY calibration needs to be performed on the printer.").format(index + 1))
|
is_offset_calibrated = self._json_printer_state["heads"][0]["extruders"][index]["hotend"]["offset"]["state"] == "valid"
|
||||||
|
except KeyError: # Older versions of the API don't expose the offset property, so we must asume that all is well.
|
||||||
|
is_offset_calibrated = True
|
||||||
|
|
||||||
|
if not is_offset_calibrated:
|
||||||
|
warnings.append(i18n_catalog.i18nc("@label", "Print core {0} is not properly calibrated. XY calibration needs to be performed on the printer.").format(index + 1))
|
||||||
|
else:
|
||||||
|
Logger.log("w", "There was no material usage found. No check to match used material with machine is done.")
|
||||||
|
|
||||||
if warnings:
|
if warnings:
|
||||||
text = i18n_catalog.i18nc("@label", "Are you sure you wish to print with the selected configuration?")
|
text = i18n_catalog.i18nc("@label", "Are you sure you wish to print with the selected configuration?")
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
"machine_extruder_end_pos_x": { "default_value": 213 },
|
"machine_extruder_end_pos_x": { "default_value": 213 },
|
||||||
"machine_extruder_end_pos_y": { "default_value": 207 },
|
"machine_extruder_end_pos_y": { "default_value": 207 },
|
||||||
"machine_nozzle_head_distance": { "default_value": 2.7 },
|
"machine_nozzle_head_distance": { "default_value": 2.7 },
|
||||||
"extruder_prime_pos_x": { "default_value": 170 },
|
"extruder_prime_pos_x": { "default_value": 9 },
|
||||||
"extruder_prime_pos_y": { "default_value": 6 },
|
"extruder_prime_pos_y": { "default_value": 6 },
|
||||||
"extruder_prime_pos_z": { "default_value": 2 }
|
"extruder_prime_pos_z": { "default_value": 2 }
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
"machine_extruder_end_pos_x": { "default_value": 213 },
|
"machine_extruder_end_pos_x": { "default_value": 213 },
|
||||||
"machine_extruder_end_pos_y": { "default_value": 189 },
|
"machine_extruder_end_pos_y": { "default_value": 189 },
|
||||||
"machine_nozzle_head_distance": { "default_value": 4.2 },
|
"machine_nozzle_head_distance": { "default_value": 4.2 },
|
||||||
"extruder_prime_pos_x": { "default_value": 182 },
|
"extruder_prime_pos_x": { "default_value": 222 },
|
||||||
"extruder_prime_pos_y": { "default_value": 6 },
|
"extruder_prime_pos_y": { "default_value": 6 },
|
||||||
"extruder_prime_pos_z": { "default_value": 2 }
|
"extruder_prime_pos_z": { "default_value": 2 }
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
"machine_extruder_end_pos_x": { "default_value": 213 },
|
"machine_extruder_end_pos_x": { "default_value": 213 },
|
||||||
"machine_extruder_end_pos_y": { "default_value": 207 },
|
"machine_extruder_end_pos_y": { "default_value": 207 },
|
||||||
"machine_nozzle_head_distance": { "default_value": 2.7 },
|
"machine_nozzle_head_distance": { "default_value": 2.7 },
|
||||||
"extruder_prime_pos_x": { "default_value": 170 },
|
"extruder_prime_pos_x": { "default_value": 9 },
|
||||||
"extruder_prime_pos_y": { "default_value": 6 },
|
"extruder_prime_pos_y": { "default_value": 6 },
|
||||||
"extruder_prime_pos_z": { "default_value": 2 }
|
"extruder_prime_pos_z": { "default_value": 2 }
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
"machine_extruder_end_pos_x": { "default_value": 213 },
|
"machine_extruder_end_pos_x": { "default_value": 213 },
|
||||||
"machine_extruder_end_pos_y": { "default_value": 189 },
|
"machine_extruder_end_pos_y": { "default_value": 189 },
|
||||||
"machine_nozzle_head_distance": { "default_value": 4.2 },
|
"machine_nozzle_head_distance": { "default_value": 4.2 },
|
||||||
"extruder_prime_pos_x": { "default_value": 182 },
|
"extruder_prime_pos_x": { "default_value": 222 },
|
||||||
"extruder_prime_pos_y": { "default_value": 6 },
|
"extruder_prime_pos_y": { "default_value": 6 },
|
||||||
"extruder_prime_pos_z": { "default_value": 2 }
|
"extruder_prime_pos_z": { "default_value": 2 }
|
||||||
}
|
}
|
||||||
|
@ -259,6 +259,7 @@ UM.PreferencesPage
|
|||||||
text: catalog.i18nc("@action:button","Center camera when item is selected");
|
text: catalog.i18nc("@action:button","Center camera when item is selected");
|
||||||
checked: boolCheck(UM.Preferences.getValue("view/center_on_select"))
|
checked: boolCheck(UM.Preferences.getValue("view/center_on_select"))
|
||||||
onClicked: UM.Preferences.setValue("view/center_on_select", checked)
|
onClicked: UM.Preferences.setValue("view/center_on_select", checked)
|
||||||
|
enabled: Qt.platform.os != "windows" // Hack: disable the feature on windows as it's broken for pyqt 5.7.1.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user