diff --git a/CuraEngineBackend.py b/CuraEngineBackend.py index eabfbe7538..c4d8c404be 100644 --- a/CuraEngineBackend.py +++ b/CuraEngineBackend.py @@ -3,29 +3,8 @@ from UM.Application import Application from UM.Scene.SceneNode import SceneNode from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Preferences import Preferences -import threading -import subprocess - -CMD_REQUEST_IDENTIFIER = 0x00100000; -CMD_IDENTIFIER_REPLY = 0x00100001; -CMD_REQUEST_VERSION = 0x00100002; -CMD_VERSION_REPLY = 0x00100003; - -CMD_SETTING = 0x00100004; -CMD_MATRIX = 0x00300002; -CMD_OBJECT_COUNT = 0x00300003; -CMD_OBJECT_LIST = 0x00200000; -CMD_MESH_LIST = 0x00200001; -CMD_VERTEX_LIST = 0x00200002; -CMD_NORMAL_LIST = 0x00200003; -CMD_PROCESS_MESH = 0x00300000; - -CMD_PROGRESS_REPORT = 0x00300001; -CMD_OBJECT_PRINT_TIME = 0x00300004; -CMD_OBJECT_PRINT_MATERIAL = 0x00300005; -CMD_LAYER_INFO = 0x00300007; -CMD_POLYGON = 0x00300006; +from . import Cura_pb2 class CuraEngineBackend(Backend): def __init__(self): @@ -34,14 +13,19 @@ class CuraEngineBackend(Backend): self._scene = Application.getInstance().getController().getScene() self._scene.sceneChanged.connect(self._onSceneChanged) - self._command_handlers[CMD_IDENTIFIER_REPLY] = self._identifierReply - self._command_handlers[CMD_OBJECT_PRINT_TIME] = self._printTimeReply + self._socket.registerMessageType(1, Cura_pb2.ObjectList) + self._socket.registerMessageType(2, Cura_pb2.SlicedObjectList) + self._socket.registerMessageType(3, Cura_pb2.Progress) + self._socket.registerMessageType(4, Cura_pb2.GCode) + self._socket.registerMessageType(5, Cura_pb2.ObjectPrintTime) - def startEngine(self): - super().startEngine() + self._message_handlers[Cura_pb2.SlicedObjectList] = self._onSlicedObjectListMessage + self._message_handlers[Cura_pb2.Progress] = self._onProgressMessage + self._message_handlers[Cura_pb2.GCode] = self._onGCodeMessage + self._message_handlers[Cura_pb2.ObjectPrintTime] = self._onObjectPrintTimeMessage def getEngineCommand(self): - return [Preferences.getPreference("BackendLocation"), '--socket', str(self._socket_thread.getPort()), '--command-socket'] + return [Preferences.getPreference("BackendLocation"), '--connect', "127.0.0.1:49674"] def _onSceneChanged(self, source): if (type(source) is not SceneNode) or (source is self._scene.getRoot()): @@ -52,20 +36,34 @@ class CuraEngineBackend(Backend): if type(node) is SceneNode and node.getMeshData(): objects.append(node) - self._socket_thread.sendCommand(CMD_OBJECT_COUNT, len(objects)) - + msg = Cura_pb2.ObjectList() for object in objects: - print('sending object', object) - self._socket_thread.sendCommand(CMD_OBJECT_LIST, 1) - meshData = object.getMeshData() - self._socket_thread.sendCommand(CMD_MESH_LIST, 1) - self._socket_thread.sendCommand(CMD_VERTEX_LIST, meshData.getVerticesAsByteArray()) - self._socket_thread.sendCommand(CMD_PROCESS_MESH) + obj = msg.objects.add() + obj.vertices = meshData.getVerticesAsByteArray() - def _identifierReply(self, data): - print(data) + if meshData.hasNormals(): + obj.normals = meshData.getNormalsAsByteArray() - def _printTimeReply(self, data): - print(data) + if meshData.hasIndices(): + obj.indices = meshData.getIndicesAsByteArray() + + self._socket.sendMessage(msg) + + def _onSlicedObjectListMessage(self, message): + print('Received Sliced Objects') + + for object in message.objects: + print('Object:', object.id) + for layer in object.layers: + print(' Layer:', layer.id) + + def _onProgressMessage(self, message): + self.processingProgress.emit(message.amount) + + def _onGCodeMessage(self, message): + pass + + def _onObjectPrintTimeMessage(self, message): + pass diff --git a/Cura_pb2.py b/Cura_pb2.py new file mode 100644 index 0000000000..781aa8801e --- /dev/null +++ b/Cura_pb2.py @@ -0,0 +1,465 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: Cura.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='Cura.proto', + 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(\x05\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(\x05\"7\n\x10SlicedObjectList\x12#\n\x07objects\x18\x01 \x03(\x0b\x32\x12.Cura.SlicedObject\"7\n\x0cSlicedObject\x12\n\n\x02id\x18\x01 \x01(\x05\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\"\x15\n\x05GCode\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x0c\"+\n\x0fObjectPrintTime\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0c\n\x04time\x18\x02 \x01(\x02\x62\x06proto3') +) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + + + +_POLYGON_TYPE = _descriptor.EnumDescriptor( + name='Type', + full_name='Cura.Polygon.Type', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='NoneType', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='Inset0Type', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='InsetXType', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SkinType', index=3, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SupportType', index=4, number=4, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SkirtType', index=5, number=5, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=397, + serialized_end=495, +) +_sym_db.RegisterEnumDescriptor(_POLYGON_TYPE) + + +_OBJECTLIST = _descriptor.Descriptor( + name='ObjectList', + full_name='Cura.ObjectList', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='objects', full_name='Cura.ObjectList.objects', 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=20, + serialized_end=63, +) + + +_OBJECT = _descriptor.Descriptor( + name='Object', + full_name='Cura.Object', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='Cura.Object.id', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='vertices', full_name='Cura.Object.vertices', 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), + _descriptor.FieldDescriptor( + name='normals', full_name='Cura.Object.normals', index=2, + number=3, 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), + _descriptor.FieldDescriptor( + name='indices', full_name='Cura.Object.indices', index=3, + number=4, 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=65, + serialized_end=137, +) + + +_PROGRESS = _descriptor.Descriptor( + name='Progress', + full_name='Cura.Progress', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='amount', full_name='Cura.Progress.amount', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + 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=139, + serialized_end=165, +) + + +_SLICEDOBJECTLIST = _descriptor.Descriptor( + name='SlicedObjectList', + full_name='Cura.SlicedObjectList', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='objects', full_name='Cura.SlicedObjectList.objects', 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=167, + serialized_end=222, +) + + +_SLICEDOBJECT = _descriptor.Descriptor( + name='SlicedObject', + full_name='Cura.SlicedObject', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='Cura.SlicedObject.id', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='layers', full_name='Cura.SlicedObject.layers', index=1, + number=2, 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=224, + serialized_end=279, +) + + +_LAYER = _descriptor.Descriptor( + name='Layer', + full_name='Cura.Layer', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='Cura.Layer.id', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='polygons', full_name='Cura.Layer.polygons', index=1, + number=2, 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=281, + serialized_end=333, +) + + +_POLYGON = _descriptor.Descriptor( + name='Polygon', + full_name='Cura.Polygon', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='type', full_name='Cura.Polygon.type', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='points', full_name='Cura.Polygon.points', 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=[ + _POLYGON_TYPE, + ], + options=None, + is_extendable=False, + extension_ranges=[], + oneofs=[ + ], + serialized_start=336, + serialized_end=495, +) + + +_GCODE = _descriptor.Descriptor( + name='GCode', + full_name='Cura.GCode', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='code', full_name='Cura.GCode.code', index=0, + number=1, 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=497, + serialized_end=518, +) + + +_OBJECTPRINTTIME = _descriptor.Descriptor( + name='ObjectPrintTime', + full_name='Cura.ObjectPrintTime', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='Cura.ObjectPrintTime.id', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='time', full_name='Cura.ObjectPrintTime.time', index=1, + number=2, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=0, + 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=520, + serialized_end=563, +) + +_OBJECTLIST.fields_by_name['objects'].message_type = _OBJECT +_SLICEDOBJECTLIST.fields_by_name['objects'].message_type = _SLICEDOBJECT +_SLICEDOBJECT.fields_by_name['layers'].message_type = _LAYER +_LAYER.fields_by_name['polygons'].message_type = _POLYGON +_POLYGON.fields_by_name['type'].enum_type = _POLYGON_TYPE +_POLYGON_TYPE.containing_type = _POLYGON +DESCRIPTOR.message_types_by_name['ObjectList'] = _OBJECTLIST +DESCRIPTOR.message_types_by_name['Object'] = _OBJECT +DESCRIPTOR.message_types_by_name['Progress'] = _PROGRESS +DESCRIPTOR.message_types_by_name['SlicedObjectList'] = _SLICEDOBJECTLIST +DESCRIPTOR.message_types_by_name['SlicedObject'] = _SLICEDOBJECT +DESCRIPTOR.message_types_by_name['Layer'] = _LAYER +DESCRIPTOR.message_types_by_name['Polygon'] = _POLYGON +DESCRIPTOR.message_types_by_name['GCode'] = _GCODE +DESCRIPTOR.message_types_by_name['ObjectPrintTime'] = _OBJECTPRINTTIME + +ObjectList = _reflection.GeneratedProtocolMessageType('ObjectList', (_message.Message,), dict( + DESCRIPTOR = _OBJECTLIST, + __module__ = 'Cura_pb2' + # @@protoc_insertion_point(class_scope:Cura.ObjectList) + )) +_sym_db.RegisterMessage(ObjectList) + +Object = _reflection.GeneratedProtocolMessageType('Object', (_message.Message,), dict( + DESCRIPTOR = _OBJECT, + __module__ = 'Cura_pb2' + # @@protoc_insertion_point(class_scope:Cura.Object) + )) +_sym_db.RegisterMessage(Object) + +Progress = _reflection.GeneratedProtocolMessageType('Progress', (_message.Message,), dict( + DESCRIPTOR = _PROGRESS, + __module__ = 'Cura_pb2' + # @@protoc_insertion_point(class_scope:Cura.Progress) + )) +_sym_db.RegisterMessage(Progress) + +SlicedObjectList = _reflection.GeneratedProtocolMessageType('SlicedObjectList', (_message.Message,), dict( + DESCRIPTOR = _SLICEDOBJECTLIST, + __module__ = 'Cura_pb2' + # @@protoc_insertion_point(class_scope:Cura.SlicedObjectList) + )) +_sym_db.RegisterMessage(SlicedObjectList) + +SlicedObject = _reflection.GeneratedProtocolMessageType('SlicedObject', (_message.Message,), dict( + DESCRIPTOR = _SLICEDOBJECT, + __module__ = 'Cura_pb2' + # @@protoc_insertion_point(class_scope:Cura.SlicedObject) + )) +_sym_db.RegisterMessage(SlicedObject) + +Layer = _reflection.GeneratedProtocolMessageType('Layer', (_message.Message,), dict( + DESCRIPTOR = _LAYER, + __module__ = 'Cura_pb2' + # @@protoc_insertion_point(class_scope:Cura.Layer) + )) +_sym_db.RegisterMessage(Layer) + +Polygon = _reflection.GeneratedProtocolMessageType('Polygon', (_message.Message,), dict( + DESCRIPTOR = _POLYGON, + __module__ = 'Cura_pb2' + # @@protoc_insertion_point(class_scope:Cura.Polygon) + )) +_sym_db.RegisterMessage(Polygon) + +GCode = _reflection.GeneratedProtocolMessageType('GCode', (_message.Message,), dict( + DESCRIPTOR = _GCODE, + __module__ = 'Cura_pb2' + # @@protoc_insertion_point(class_scope:Cura.GCode) + )) +_sym_db.RegisterMessage(GCode) + +ObjectPrintTime = _reflection.GeneratedProtocolMessageType('ObjectPrintTime', (_message.Message,), dict( + DESCRIPTOR = _OBJECTPRINTTIME, + __module__ = 'Cura_pb2' + # @@protoc_insertion_point(class_scope:Cura.ObjectPrintTime) + )) +_sym_db.RegisterMessage(ObjectPrintTime) + + +# @@protoc_insertion_point(module_scope)