Use libArcus for backend communication

This commit is contained in:
Arjen Hiemstra 2015-01-23 11:19:07 +01:00
parent 84ede69540
commit cdf3b06c8c
2 changed files with 502 additions and 39 deletions

View file

@ -3,29 +3,8 @@ from UM.Application import Application
from UM.Scene.SceneNode import SceneNode from UM.Scene.SceneNode import SceneNode
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.Preferences import Preferences from UM.Preferences import Preferences
import threading
import subprocess from . import Cura_pb2
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;
class CuraEngineBackend(Backend): class CuraEngineBackend(Backend):
def __init__(self): def __init__(self):
@ -34,14 +13,19 @@ 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._command_handlers[CMD_IDENTIFIER_REPLY] = self._identifierReply self._socket.registerMessageType(1, Cura_pb2.ObjectList)
self._command_handlers[CMD_OBJECT_PRINT_TIME] = self._printTimeReply 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): self._message_handlers[Cura_pb2.SlicedObjectList] = self._onSlicedObjectListMessage
super().startEngine() 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): 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): def _onSceneChanged(self, source):
if (type(source) is not SceneNode) or (source is self._scene.getRoot()): 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(): if type(node) is SceneNode and node.getMeshData():
objects.append(node) objects.append(node)
self._socket_thread.sendCommand(CMD_OBJECT_COUNT, len(objects)) msg = Cura_pb2.ObjectList()
for object in objects: for object in objects:
print('sending object', object)
self._socket_thread.sendCommand(CMD_OBJECT_LIST, 1)
meshData = object.getMeshData() 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): if meshData.hasNormals():
print(data) obj.normals = meshData.getNormalsAsByteArray()
def _printTimeReply(self, data): if meshData.hasIndices():
print(data) 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

465
Cura_pb2.py Normal file
View file

@ -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)