mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-05-20 01:29:04 +08:00
Merge branch 'feature_send_extruder_settings' of github.com:Ultimaker/Cura
This commit is contained in:
commit
1db74b00fd
@ -191,9 +191,8 @@ class ExtruderManager(QObject):
|
|||||||
container_registry.addContainer(container_stack)
|
container_registry.addContainer(container_stack)
|
||||||
|
|
||||||
## Generates extruders for a specific machine.
|
## Generates extruders for a specific machine.
|
||||||
def getMachineExtruders(self, machine_definition):
|
def getMachineExtruders(self, machine_id):
|
||||||
container_registry = UM.Settings.ContainerRegistry.getInstance()
|
container_registry = UM.Settings.ContainerRegistry.getInstance()
|
||||||
machine_id = machine_definition.getId()
|
|
||||||
if not machine_id in self._extruder_trains:
|
if not machine_id in self._extruder_trains:
|
||||||
UM.Logger.log("w", "Tried to get the extruder trains for machine %s, which doesn't exist.", machine_id)
|
UM.Logger.log("w", "Tried to get the extruder trains for machine %s, which doesn't exist.", machine_id)
|
||||||
return
|
return
|
||||||
|
@ -5,12 +5,20 @@ package cura.proto;
|
|||||||
message ObjectList
|
message ObjectList
|
||||||
{
|
{
|
||||||
repeated Object objects = 1;
|
repeated Object objects = 1;
|
||||||
repeated Setting settings = 2;
|
repeated Setting settings = 2; // meshgroup settings (for one-at-a-time printing)
|
||||||
}
|
}
|
||||||
|
|
||||||
message Slice
|
message Slice
|
||||||
{
|
{
|
||||||
repeated ObjectList object_lists = 1;
|
repeated ObjectList object_lists = 1; // The meshgroups to be printed one after another
|
||||||
|
SettingList global_settings = 2; // The global settings used for the whole print job
|
||||||
|
repeated Extruder extruders = 3; // The settings sent to each extruder object
|
||||||
|
}
|
||||||
|
|
||||||
|
message Extruder
|
||||||
|
{
|
||||||
|
int32 id = 1;
|
||||||
|
SettingList settings = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Object
|
message Object
|
||||||
@ -29,10 +37,10 @@ message Progress
|
|||||||
|
|
||||||
message Layer {
|
message Layer {
|
||||||
int32 id = 1;
|
int32 id = 1;
|
||||||
float height = 2;
|
float height = 2; // Z position
|
||||||
float thickness = 3;
|
float thickness = 3; // height of a single layer
|
||||||
|
|
||||||
repeated Polygon polygons = 4;
|
repeated Polygon polygons = 4; // layer data
|
||||||
}
|
}
|
||||||
|
|
||||||
message Polygon {
|
message Polygon {
|
||||||
@ -48,19 +56,19 @@ message Polygon {
|
|||||||
MoveCombingType = 8;
|
MoveCombingType = 8;
|
||||||
MoveRetractionType = 9;
|
MoveRetractionType = 9;
|
||||||
}
|
}
|
||||||
Type type = 1;
|
Type type = 1; // Type of move
|
||||||
bytes points = 2;
|
bytes points = 2; // The points of the polygon, or two points if only a line segment (Currently only line segments are used)
|
||||||
float line_width = 3;
|
float line_width = 3; // The width of the line being laid down
|
||||||
}
|
}
|
||||||
|
|
||||||
message GCodeLayer {
|
message GCodeLayer {
|
||||||
bytes data = 2;
|
bytes data = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ObjectPrintTime {
|
message ObjectPrintTime { // The print time for the whole print and material estimates for the first extruder
|
||||||
int64 id = 1;
|
int64 id = 1;
|
||||||
float time = 2;
|
float time = 2; // Total time estimate
|
||||||
float material_amount = 3;
|
float material_amount = 3; // material used in the first extruder
|
||||||
}
|
}
|
||||||
|
|
||||||
message SettingList {
|
message SettingList {
|
||||||
@ -68,13 +76,13 @@ message SettingList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
message Setting {
|
message Setting {
|
||||||
string name = 1;
|
string name = 1; // Internal key to signify a setting
|
||||||
|
|
||||||
bytes value = 2;
|
bytes value = 2; // The value of the setting
|
||||||
}
|
}
|
||||||
|
|
||||||
message GCodePrefix {
|
message GCodePrefix {
|
||||||
bytes data = 2;
|
bytes data = 2; // Header string to be prenpended before the rest of the gcode sent from the engine
|
||||||
}
|
}
|
||||||
|
|
||||||
message SlicingFinished {
|
message SlicingFinished {
|
||||||
|
@ -145,8 +145,7 @@ class CuraEngineBackend(Backend):
|
|||||||
self.slicingStarted.emit()
|
self.slicingStarted.emit()
|
||||||
|
|
||||||
slice_message = self._socket.createMessage("cura.proto.Slice")
|
slice_message = self._socket.createMessage("cura.proto.Slice")
|
||||||
settings_message = self._socket.createMessage("cura.proto.SettingList")
|
self._start_slice_job = StartSliceJob.StartSliceJob(slice_message)
|
||||||
self._start_slice_job = StartSliceJob.StartSliceJob(slice_message, settings_message)
|
|
||||||
self._start_slice_job.start()
|
self._start_slice_job.start()
|
||||||
self._start_slice_job.finished.connect(self._onStartSliceCompleted)
|
self._start_slice_job.finished.connect(self._onStartSliceCompleted)
|
||||||
|
|
||||||
@ -205,7 +204,6 @@ class CuraEngineBackend(Backend):
|
|||||||
return
|
return
|
||||||
|
|
||||||
# Preparation completed, send it to the backend.
|
# Preparation completed, send it to the backend.
|
||||||
self._socket.sendMessage(job.getSettingsMessage())
|
|
||||||
self._socket.sendMessage(job.getSliceMessage())
|
self._socket.sendMessage(job.getSliceMessage())
|
||||||
|
|
||||||
## Listener for when the scene has changed.
|
## Listener for when the scene has changed.
|
||||||
|
@ -15,6 +15,7 @@ from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
|
|||||||
from UM.Settings.Validator import ValidatorState
|
from UM.Settings.Validator import ValidatorState
|
||||||
|
|
||||||
from cura.OneAtATimeIterator import OneAtATimeIterator
|
from cura.OneAtATimeIterator import OneAtATimeIterator
|
||||||
|
from cura.ExtruderManager import ExtruderManager
|
||||||
|
|
||||||
class StartJobResult(IntEnum):
|
class StartJobResult(IntEnum):
|
||||||
Finished = 1
|
Finished = 1
|
||||||
@ -37,17 +38,13 @@ class GcodeStartEndFormatter(Formatter):
|
|||||||
|
|
||||||
## Job class that builds up the message of scene data to send to CuraEngine.
|
## Job class that builds up the message of scene data to send to CuraEngine.
|
||||||
class StartSliceJob(Job):
|
class StartSliceJob(Job):
|
||||||
def __init__(self, slice_message, settings_message):
|
def __init__(self, slice_message):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
self._scene = Application.getInstance().getController().getScene()
|
self._scene = Application.getInstance().getController().getScene()
|
||||||
self._slice_message = slice_message
|
self._slice_message = slice_message
|
||||||
self._settings_message = settings_message
|
|
||||||
self._is_cancelled = False
|
self._is_cancelled = False
|
||||||
|
|
||||||
def getSettingsMessage(self):
|
|
||||||
return self._settings_message
|
|
||||||
|
|
||||||
def getSliceMessage(self):
|
def getSliceMessage(self):
|
||||||
return self._slice_message
|
return self._slice_message
|
||||||
|
|
||||||
@ -131,6 +128,9 @@ class StartSliceJob(Job):
|
|||||||
|
|
||||||
self._buildGlobalSettingsMessage(stack)
|
self._buildGlobalSettingsMessage(stack)
|
||||||
|
|
||||||
|
for extruder_stack in ExtruderManager.getInstance().getMachineExtruders(stack.getBottom().getId()):
|
||||||
|
self._buildExtruderMessage(extruder_stack)
|
||||||
|
|
||||||
for group in object_groups:
|
for group in object_groups:
|
||||||
group_message = self._slice_message.addRepeatedMessage("object_lists")
|
group_message = self._slice_message.addRepeatedMessage("object_lists")
|
||||||
if group[0].getParent().callDecoration("isGroup"):
|
if group[0].getParent().callDecoration("isGroup"):
|
||||||
@ -170,6 +170,15 @@ class StartSliceJob(Job):
|
|||||||
Logger.logException("w", "Unable to do token replacement on start/end gcode")
|
Logger.logException("w", "Unable to do token replacement on start/end gcode")
|
||||||
return str(value).encode("utf-8")
|
return str(value).encode("utf-8")
|
||||||
|
|
||||||
|
def _buildExtruderMessage(self, stack):
|
||||||
|
message = self._slice_message.addRepeatedMessage("extruders")
|
||||||
|
message.id = int(stack.getMetaDataEntry("position"))
|
||||||
|
for key in stack.getAllKeys():
|
||||||
|
setting = message.getMessage("settings").addRepeatedMessage("settings")
|
||||||
|
setting.name = key
|
||||||
|
setting.value = str(stack.getProperty(key, "value")).encode("utf-8")
|
||||||
|
Job.yieldThread()
|
||||||
|
|
||||||
## Sends all global settings to the engine.
|
## Sends all global settings to the engine.
|
||||||
#
|
#
|
||||||
# The settings are taken from the global stack. This does not include any
|
# The settings are taken from the global stack. This does not include any
|
||||||
@ -185,7 +194,7 @@ class StartSliceJob(Job):
|
|||||||
settings["material_print_temp_prepend"] = "{material_print_temperature}" not in start_gcode
|
settings["material_print_temp_prepend"] = "{material_print_temperature}" not in start_gcode
|
||||||
|
|
||||||
for key, value in settings.items(): #Add all submessages for each individual setting.
|
for key, value in settings.items(): #Add all submessages for each individual setting.
|
||||||
setting_message = self._settings_message.addRepeatedMessage("settings")
|
setting_message = self._slice_message.getMessage("global_settings").addRepeatedMessage("settings")
|
||||||
setting_message.name = key
|
setting_message.name = key
|
||||||
if key == "machine_start_gcode" or key == "machine_end_gcode": #If it's a g-code message, use special formatting.
|
if key == "machine_start_gcode" or key == "machine_end_gcode": #If it's a g-code message, use special formatting.
|
||||||
setting_message.value = self._expandGcodeTokens(key, value, settings)
|
setting_message.value = self._expandGcodeTokens(key, value, settings)
|
||||||
@ -193,21 +202,10 @@ class StartSliceJob(Job):
|
|||||||
setting_message.value = str(value).encode("utf-8")
|
setting_message.value = str(value).encode("utf-8")
|
||||||
|
|
||||||
def _handlePerObjectSettings(self, node, message):
|
def _handlePerObjectSettings(self, node, message):
|
||||||
profile = node.callDecoration("getProfile")
|
stack = node.callDecoration("getStack")
|
||||||
if profile:
|
if stack:
|
||||||
for key, value in profile.getAllSettingValues().items():
|
for key in stack.getAllKeys():
|
||||||
setting = message.addRepeatedMessage("settings")
|
setting = message.addRepeatedMessage("settings")
|
||||||
setting.name = key
|
setting.name = key
|
||||||
setting.value = str(value).encode()
|
setting.value = str(stack.getProperty(key, "value")).encode("utf-8")
|
||||||
|
|
||||||
Job.yieldThread()
|
|
||||||
|
|
||||||
object_settings = node.callDecoration("getAllSettingValues")
|
|
||||||
if not object_settings:
|
|
||||||
return
|
|
||||||
for key, value in object_settings.items():
|
|
||||||
setting = message.addRepeatedMessage("settings")
|
|
||||||
setting.name = key
|
|
||||||
setting.value = str(value).encode()
|
|
||||||
|
|
||||||
Job.yieldThread()
|
Job.yieldThread()
|
Loading…
x
Reference in New Issue
Block a user