mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-18 20:28:01 -06:00
Use libArcus for backend communication
This commit is contained in:
parent
84ede69540
commit
cdf3b06c8c
2 changed files with 502 additions and 39 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue