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.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

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)