mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-23 22:54:01 -06:00
Send settings to the slicer on change
This commit is contained in:
parent
1f365d3467
commit
a77a95eec8
2 changed files with 122 additions and 8 deletions
|
@ -9,6 +9,7 @@ from . import ProcessSlicedObjectListJob
|
||||||
from . import ProcessGCodeJob
|
from . import ProcessGCodeJob
|
||||||
|
|
||||||
import threading
|
import threading
|
||||||
|
import struct
|
||||||
|
|
||||||
class CuraEngineBackend(Backend):
|
class CuraEngineBackend(Backend):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -16,7 +17,11 @@ class CuraEngineBackend(Backend):
|
||||||
|
|
||||||
self._scene = Application.getInstance().getController().getScene()
|
self._scene = Application.getInstance().getController().getScene()
|
||||||
self._scene.sceneChanged.connect(self._onSceneChanged)
|
self._scene.sceneChanged.connect(self._onSceneChanged)
|
||||||
self._sceneChangeTimer = None
|
|
||||||
|
self._settings = Application.getInstance().getMachineSettings()
|
||||||
|
self._settings.settingChanged.connect(self._onSettingChanged)
|
||||||
|
|
||||||
|
self._changeTimer = None
|
||||||
|
|
||||||
self._message_handlers[Cura_pb2.SlicedObjectList] = self._onSlicedObjectListMessage
|
self._message_handlers[Cura_pb2.SlicedObjectList] = self._onSlicedObjectListMessage
|
||||||
self._message_handlers[Cura_pb2.Progress] = self._onProgressMessage
|
self._message_handlers[Cura_pb2.Progress] = self._onProgressMessage
|
||||||
|
@ -30,11 +35,10 @@ class CuraEngineBackend(Backend):
|
||||||
if (type(source) is not SceneNode) or (source is self._scene.getRoot()):
|
if (type(source) is not SceneNode) or (source is self._scene.getRoot()):
|
||||||
return
|
return
|
||||||
|
|
||||||
if self._sceneChangeTimer:
|
self._onChanged()
|
||||||
return
|
|
||||||
|
|
||||||
self._sceneChangeTimer = threading.Timer(1, self._sceneChangeTimerFinished)
|
def _onSettingChanged(self, setting):
|
||||||
self._sceneChangeTimer.start()
|
self._onChanged()
|
||||||
|
|
||||||
def _onSlicedObjectListMessage(self, message):
|
def _onSlicedObjectListMessage(self, message):
|
||||||
job = ProcessSlicedObjectListJob.ProcessSlicedObjectListJob(message)
|
job = ProcessSlicedObjectListJob.ProcessSlicedObjectListJob(message)
|
||||||
|
@ -59,12 +63,36 @@ class CuraEngineBackend(Backend):
|
||||||
self._socket.registerMessageType(4, Cura_pb2.GCode)
|
self._socket.registerMessageType(4, Cura_pb2.GCode)
|
||||||
self._socket.registerMessageType(5, Cura_pb2.ObjectPrintTime)
|
self._socket.registerMessageType(5, Cura_pb2.ObjectPrintTime)
|
||||||
|
|
||||||
def _sceneChangeTimerFinished(self):
|
def _onChanged(self):
|
||||||
|
if self._changeTimer:
|
||||||
|
return
|
||||||
|
|
||||||
|
self._changeTimer = threading.Timer(1, self._onChangeTimerFinished)
|
||||||
|
self._changeTimer.start()
|
||||||
|
|
||||||
|
def _onChangeTimerFinished(self):
|
||||||
objects = []
|
objects = []
|
||||||
for node in DepthFirstIterator(self._scene.getRoot()):
|
for node in DepthFirstIterator(self._scene.getRoot()):
|
||||||
if type(node) is SceneNode and node.getMeshData():
|
if type(node) is SceneNode and node.getMeshData():
|
||||||
objects.append(node)
|
objects.append(node)
|
||||||
|
|
||||||
|
if not objects:
|
||||||
|
return #No point in slicing an empty build plate
|
||||||
|
|
||||||
|
msg = Cura_pb2.SettingList()
|
||||||
|
for setting in self._settings.getAllSettings():
|
||||||
|
s = msg.settings.add()
|
||||||
|
s.name = setting.getKey()
|
||||||
|
|
||||||
|
if setting.getType() == 'float':
|
||||||
|
s.value = struct.pack('!f', setting.getValue())
|
||||||
|
elif setting.getType() == 'int' or setting.getType() == 'enum':
|
||||||
|
s.value = struct.pack('!i', setting.getValue())
|
||||||
|
|
||||||
|
self._socket.sendMessage(msg)
|
||||||
|
|
||||||
|
self._scene.acquireLock()
|
||||||
|
|
||||||
msg = Cura_pb2.ObjectList()
|
msg = Cura_pb2.ObjectList()
|
||||||
for object in objects:
|
for object in objects:
|
||||||
meshData = object.getMeshData()
|
meshData = object.getMeshData()
|
||||||
|
@ -82,6 +110,8 @@ class CuraEngineBackend(Backend):
|
||||||
#if meshData.hasIndices():
|
#if meshData.hasIndices():
|
||||||
#obj.indices = meshData.getIndicesAsByteArray()
|
#obj.indices = meshData.getIndicesAsByteArray()
|
||||||
|
|
||||||
|
self._scene.releaseLock()
|
||||||
|
|
||||||
self._socket.sendMessage(msg)
|
self._socket.sendMessage(msg)
|
||||||
|
|
||||||
self._sceneChangeTimer = None
|
self._changeTimer = None
|
||||||
|
|
86
Cura_pb2.py
86
Cura_pb2.py
|
@ -18,7 +18,7 @@ _sym_db = _symbol_database.Default()
|
||||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
DESCRIPTOR = _descriptor.FileDescriptor(
|
||||||
name='Cura.proto',
|
name='Cura.proto',
|
||||||
package='Cura',
|
package='Cura',
|
||||||
serialized_pb=_b('\n\nCura.proto\x12\x04\x43ura\"+\n\nObjectList\x12\x1d\n\x07objects\x18\x01 \x03(\x0b\x32\x0c.Cura.Object\"H\n\x06Object\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x10\n\x08vertices\x18\x02 \x01(\x0c\x12\x0f\n\x07normals\x18\x03 \x01(\x0c\x12\x0f\n\x07indices\x18\x04 \x01(\x0c\"\x1a\n\x08Progress\x12\x0e\n\x06\x61mount\x18\x01 \x01(\x02\"7\n\x10SlicedObjectList\x12#\n\x07objects\x18\x01 \x03(\x0b\x32\x12.Cura.SlicedObject\"7\n\x0cSlicedObject\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x1b\n\x06layers\x18\x02 \x03(\x0b\x32\x0b.Cura.Layer\"4\n\x05Layer\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x1f\n\x08polygons\x18\x02 \x03(\x0b\x32\r.Cura.Polygon\"\x9f\x01\n\x07Polygon\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.Cura.Polygon.Type\x12\x0e\n\x06points\x18\x02 \x01(\x0c\"b\n\x04Type\x12\x0c\n\x08NoneType\x10\x00\x12\x0e\n\nInset0Type\x10\x01\x12\x0e\n\nInsetXType\x10\x02\x12\x0c\n\x08SkinType\x10\x03\x12\x0f\n\x0bSupportType\x10\x04\x12\r\n\tSkirtType\x10\x05\"\x19\n\x05GCode\x12\x10\n\x08\x66ilename\x18\x01 \x01(\t\"+\n\x0fObjectPrintTime\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0c\n\x04time\x18\x02 \x01(\x02\x62\x06proto3')
|
serialized_pb=_b('\n\nCura.proto\x12\x04\x43ura\"+\n\nObjectList\x12\x1d\n\x07objects\x18\x01 \x03(\x0b\x32\x0c.Cura.Object\"H\n\x06Object\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x10\n\x08vertices\x18\x02 \x01(\x0c\x12\x0f\n\x07normals\x18\x03 \x01(\x0c\x12\x0f\n\x07indices\x18\x04 \x01(\x0c\"\x1a\n\x08Progress\x12\x0e\n\x06\x61mount\x18\x01 \x01(\x02\"7\n\x10SlicedObjectList\x12#\n\x07objects\x18\x01 \x03(\x0b\x32\x12.Cura.SlicedObject\"7\n\x0cSlicedObject\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x1b\n\x06layers\x18\x02 \x03(\x0b\x32\x0b.Cura.Layer\"4\n\x05Layer\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x1f\n\x08polygons\x18\x02 \x03(\x0b\x32\r.Cura.Polygon\"\x9f\x01\n\x07Polygon\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.Cura.Polygon.Type\x12\x0e\n\x06points\x18\x02 \x01(\x0c\"b\n\x04Type\x12\x0c\n\x08NoneType\x10\x00\x12\x0e\n\nInset0Type\x10\x01\x12\x0e\n\nInsetXType\x10\x02\x12\x0c\n\x08SkinType\x10\x03\x12\x0f\n\x0bSupportType\x10\x04\x12\r\n\tSkirtType\x10\x05\"\x19\n\x05GCode\x12\x10\n\x08\x66ilename\x18\x01 \x01(\t\"+\n\x0fObjectPrintTime\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0c\n\x04time\x18\x02 \x01(\x02\".\n\x0bSettingList\x12\x1f\n\x08settings\x18\x01 \x03(\x0b\x32\r.Cura.Setting\"&\n\x07Setting\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x62\x06proto3')
|
||||||
)
|
)
|
||||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
||||||
|
|
||||||
|
@ -382,12 +382,80 @@ _OBJECTPRINTTIME = _descriptor.Descriptor(
|
||||||
serialized_end=567,
|
serialized_end=567,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_SETTINGLIST = _descriptor.Descriptor(
|
||||||
|
name='SettingList',
|
||||||
|
full_name='Cura.SettingList',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='settings', full_name='Cura.SettingList.settings', index=0,
|
||||||
|
number=1, type=11, cpp_type=10, label=3,
|
||||||
|
has_default_value=False, default_value=[],
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
options=None),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
],
|
||||||
|
options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=569,
|
||||||
|
serialized_end=615,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_SETTING = _descriptor.Descriptor(
|
||||||
|
name='Setting',
|
||||||
|
full_name='Cura.Setting',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='name', full_name='Cura.Setting.name', index=0,
|
||||||
|
number=1, type=9, cpp_type=9, label=1,
|
||||||
|
has_default_value=False, default_value=_b("").decode('utf-8'),
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
options=None),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='value', full_name='Cura.Setting.value', index=1,
|
||||||
|
number=2, type=12, cpp_type=9, label=1,
|
||||||
|
has_default_value=False, default_value=_b(""),
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
options=None),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
],
|
||||||
|
options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=617,
|
||||||
|
serialized_end=655,
|
||||||
|
)
|
||||||
|
|
||||||
_OBJECTLIST.fields_by_name['objects'].message_type = _OBJECT
|
_OBJECTLIST.fields_by_name['objects'].message_type = _OBJECT
|
||||||
_SLICEDOBJECTLIST.fields_by_name['objects'].message_type = _SLICEDOBJECT
|
_SLICEDOBJECTLIST.fields_by_name['objects'].message_type = _SLICEDOBJECT
|
||||||
_SLICEDOBJECT.fields_by_name['layers'].message_type = _LAYER
|
_SLICEDOBJECT.fields_by_name['layers'].message_type = _LAYER
|
||||||
_LAYER.fields_by_name['polygons'].message_type = _POLYGON
|
_LAYER.fields_by_name['polygons'].message_type = _POLYGON
|
||||||
_POLYGON.fields_by_name['type'].enum_type = _POLYGON_TYPE
|
_POLYGON.fields_by_name['type'].enum_type = _POLYGON_TYPE
|
||||||
_POLYGON_TYPE.containing_type = _POLYGON
|
_POLYGON_TYPE.containing_type = _POLYGON
|
||||||
|
_SETTINGLIST.fields_by_name['settings'].message_type = _SETTING
|
||||||
DESCRIPTOR.message_types_by_name['ObjectList'] = _OBJECTLIST
|
DESCRIPTOR.message_types_by_name['ObjectList'] = _OBJECTLIST
|
||||||
DESCRIPTOR.message_types_by_name['Object'] = _OBJECT
|
DESCRIPTOR.message_types_by_name['Object'] = _OBJECT
|
||||||
DESCRIPTOR.message_types_by_name['Progress'] = _PROGRESS
|
DESCRIPTOR.message_types_by_name['Progress'] = _PROGRESS
|
||||||
|
@ -397,6 +465,8 @@ DESCRIPTOR.message_types_by_name['Layer'] = _LAYER
|
||||||
DESCRIPTOR.message_types_by_name['Polygon'] = _POLYGON
|
DESCRIPTOR.message_types_by_name['Polygon'] = _POLYGON
|
||||||
DESCRIPTOR.message_types_by_name['GCode'] = _GCODE
|
DESCRIPTOR.message_types_by_name['GCode'] = _GCODE
|
||||||
DESCRIPTOR.message_types_by_name['ObjectPrintTime'] = _OBJECTPRINTTIME
|
DESCRIPTOR.message_types_by_name['ObjectPrintTime'] = _OBJECTPRINTTIME
|
||||||
|
DESCRIPTOR.message_types_by_name['SettingList'] = _SETTINGLIST
|
||||||
|
DESCRIPTOR.message_types_by_name['Setting'] = _SETTING
|
||||||
|
|
||||||
ObjectList = _reflection.GeneratedProtocolMessageType('ObjectList', (_message.Message,), dict(
|
ObjectList = _reflection.GeneratedProtocolMessageType('ObjectList', (_message.Message,), dict(
|
||||||
DESCRIPTOR = _OBJECTLIST,
|
DESCRIPTOR = _OBJECTLIST,
|
||||||
|
@ -461,5 +531,19 @@ ObjectPrintTime = _reflection.GeneratedProtocolMessageType('ObjectPrintTime', (_
|
||||||
))
|
))
|
||||||
_sym_db.RegisterMessage(ObjectPrintTime)
|
_sym_db.RegisterMessage(ObjectPrintTime)
|
||||||
|
|
||||||
|
SettingList = _reflection.GeneratedProtocolMessageType('SettingList', (_message.Message,), dict(
|
||||||
|
DESCRIPTOR = _SETTINGLIST,
|
||||||
|
__module__ = 'Cura_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:Cura.SettingList)
|
||||||
|
))
|
||||||
|
_sym_db.RegisterMessage(SettingList)
|
||||||
|
|
||||||
|
Setting = _reflection.GeneratedProtocolMessageType('Setting', (_message.Message,), dict(
|
||||||
|
DESCRIPTOR = _SETTING,
|
||||||
|
__module__ = 'Cura_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:Cura.Setting)
|
||||||
|
))
|
||||||
|
_sym_db.RegisterMessage(Setting)
|
||||||
|
|
||||||
|
|
||||||
# @@protoc_insertion_point(module_scope)
|
# @@protoc_insertion_point(module_scope)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue