mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-10 00:07:51 -06:00
xMerge branch 'master' of https://github.com/Ultimaker/PluggableCura
This commit is contained in:
commit
5e8cc90a3e
5 changed files with 72 additions and 12 deletions
|
@ -4,6 +4,7 @@ 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
|
||||||
from UM.Math.Vector import Vector
|
from UM.Math.Vector import Vector
|
||||||
|
from UM.Signal import Signal
|
||||||
|
|
||||||
from . import Cura_pb2
|
from . import Cura_pb2
|
||||||
from . import ProcessSlicedObjectListJob
|
from . import ProcessSlicedObjectListJob
|
||||||
|
@ -17,6 +18,8 @@ class CuraEngineBackend(Backend):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
|
Preferences.getInstance().addPreference('backend/location', '../PinkUnicornEngine/CuraEngine')
|
||||||
|
|
||||||
self._scene = Application.getInstance().getController().getScene()
|
self._scene = Application.getInstance().getController().getScene()
|
||||||
self._scene.sceneChanged.connect(self._onSceneChanged)
|
self._scene.sceneChanged.connect(self._onSceneChanged)
|
||||||
|
|
||||||
|
@ -33,8 +36,18 @@ class CuraEngineBackend(Backend):
|
||||||
|
|
||||||
self._center = None
|
self._center = None
|
||||||
|
|
||||||
|
self._slice_interval = 0.5
|
||||||
|
|
||||||
|
self._slicing = False
|
||||||
|
self._restart = False
|
||||||
|
|
||||||
|
self.changeTimerFinished.connect(self._onChangeTimerFinished)
|
||||||
|
self.backendConnected.connect(self._onBackendConnected)
|
||||||
|
|
||||||
def getEngineCommand(self):
|
def getEngineCommand(self):
|
||||||
return [Preferences.getPreference("BackendLocation"), '--connect', "127.0.0.1:{0}".format(self._port)]
|
return [Preferences.getInstance().getValue("backend/location"), '--connect', "127.0.0.1:{0}".format(self._port)]
|
||||||
|
|
||||||
|
changeTimerFinished = Signal()
|
||||||
|
|
||||||
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()):
|
||||||
|
@ -59,6 +72,8 @@ class CuraEngineBackend(Backend):
|
||||||
job.start()
|
job.start()
|
||||||
|
|
||||||
def _onProgressMessage(self, message):
|
def _onProgressMessage(self, message):
|
||||||
|
if message.amount >= 0.99:
|
||||||
|
self._slicing = False
|
||||||
self.processingProgress.emit(message.amount)
|
self.processingProgress.emit(message.amount)
|
||||||
|
|
||||||
def _onGCodeMessage(self, message):
|
def _onGCodeMessage(self, message):
|
||||||
|
@ -83,12 +98,18 @@ class CuraEngineBackend(Backend):
|
||||||
return
|
return
|
||||||
|
|
||||||
if self._changeTimer:
|
if self._changeTimer:
|
||||||
return
|
self._changeTimer.cancel()
|
||||||
|
|
||||||
self._changeTimer = threading.Timer(1, self._onChangeTimerFinished)
|
self._changeTimer = threading.Timer(self._slice_interval, lambda: self.changeTimerFinished.emit())
|
||||||
self._changeTimer.start()
|
self._changeTimer.start()
|
||||||
|
|
||||||
def _onChangeTimerFinished(self):
|
def _onChangeTimerFinished(self):
|
||||||
|
if self._slicing:
|
||||||
|
self._slicing = False
|
||||||
|
self._restart = True
|
||||||
|
self._process.terminate()
|
||||||
|
return
|
||||||
|
|
||||||
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():
|
||||||
|
@ -98,6 +119,9 @@ class CuraEngineBackend(Backend):
|
||||||
self._changeTimer = None
|
self._changeTimer = None
|
||||||
return #No point in slicing an empty build plate
|
return #No point in slicing an empty build plate
|
||||||
|
|
||||||
|
self._slicing = True
|
||||||
|
self.processingProgress.emit(0.0)
|
||||||
|
|
||||||
self._sendSettings()
|
self._sendSettings()
|
||||||
|
|
||||||
self._scene.acquireLock()
|
self._scene.acquireLock()
|
||||||
|
@ -306,3 +330,8 @@ class CuraEngineBackend(Backend):
|
||||||
s.value = str(value).encode('utf-8')
|
s.value = str(value).encode('utf-8')
|
||||||
|
|
||||||
self._socket.sendMessage(msg)
|
self._socket.sendMessage(msg)
|
||||||
|
|
||||||
|
def _onBackendConnected(self):
|
||||||
|
if self._restart:
|
||||||
|
self._onChanged()
|
||||||
|
self._restart = False
|
||||||
|
|
39
LayerData.py
39
LayerData.py
|
@ -1,4 +1,5 @@
|
||||||
from UM.Mesh.MeshData import MeshData
|
from UM.Mesh.MeshData import MeshData
|
||||||
|
from UM.Math.Color import Color
|
||||||
|
|
||||||
import numpy
|
import numpy
|
||||||
import math
|
import math
|
||||||
|
@ -7,16 +8,22 @@ class LayerData(MeshData):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self._layers = {}
|
self._layers = {}
|
||||||
|
self._element_counts = []
|
||||||
|
|
||||||
def addPolygon(self, layer, type, data):
|
def addPolygon(self, layer, type, data):
|
||||||
if layer not in self._layers:
|
if layer not in self._layers:
|
||||||
self._layers[layer] = []
|
self._layers[layer] = []
|
||||||
|
|
||||||
self._layers[layer].append(Polygon(self, type, data))
|
p = Polygon(self, type, data)
|
||||||
|
self._layers[layer].append(p)
|
||||||
|
self._element_counts.append(p.count)
|
||||||
|
|
||||||
def getLayers(self):
|
def getLayers(self):
|
||||||
return self._layers
|
return self._layers
|
||||||
|
|
||||||
|
def getElementCounts(self):
|
||||||
|
return self._element_counts
|
||||||
|
|
||||||
class Polygon():
|
class Polygon():
|
||||||
NoneType = 0
|
NoneType = 0
|
||||||
Inset0Type = 1
|
Inset0Type = 1
|
||||||
|
@ -30,11 +37,33 @@ class Polygon():
|
||||||
self._type = type
|
self._type = type
|
||||||
self._begin = mesh._vertex_count
|
self._begin = mesh._vertex_count
|
||||||
mesh.addVertices(data)
|
mesh.addVertices(data)
|
||||||
|
self._end = self._begin + len(data) - 1
|
||||||
|
|
||||||
indices = [self._begin + i for i in range(len(data))]
|
color = None
|
||||||
|
if type == self.Inset0Type:
|
||||||
|
color = [1, 0, 0, 1]
|
||||||
|
elif type == self.InsetXType:
|
||||||
|
color = [0, 1, 0, 1]
|
||||||
|
elif type == self.SkinType:
|
||||||
|
color = [1, 1, 0, 1]
|
||||||
|
elif type == self.SupportType:
|
||||||
|
color = [0, 1, 1, 1]
|
||||||
|
elif type == self.SkirtType:
|
||||||
|
color = [0, 1, 1, 1]
|
||||||
|
else:
|
||||||
|
color = [1, 1, 1, 1]
|
||||||
|
|
||||||
|
colors = [color for i in range(len(data))]
|
||||||
|
mesh.addColors(numpy.array(colors, dtype=numpy.float32))
|
||||||
|
|
||||||
|
indices = []
|
||||||
|
for i in range(self._begin, self._end):
|
||||||
|
indices.append(i)
|
||||||
|
indices.append(i + 1)
|
||||||
|
|
||||||
|
indices.append(self._end)
|
||||||
|
indices.append(self._begin)
|
||||||
mesh.addIndices(numpy.array(indices, dtype=numpy.int32))
|
mesh.addIndices(numpy.array(indices, dtype=numpy.int32))
|
||||||
self._end = mesh._vertex_count
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def type(self):
|
def type(self):
|
||||||
|
@ -43,3 +72,7 @@ class Polygon():
|
||||||
@property
|
@property
|
||||||
def data(self):
|
def data(self):
|
||||||
return self._data
|
return self._data
|
||||||
|
|
||||||
|
@property
|
||||||
|
def count(self):
|
||||||
|
return self._end - self._begin
|
||||||
|
|
|
@ -18,10 +18,10 @@ class ProcessGCodeJob(Job):
|
||||||
if type(node) is SceneNode and node.getMeshData():
|
if type(node) is SceneNode and node.getMeshData():
|
||||||
objectIdMap[id(node)] = node
|
objectIdMap[id(node)] = node
|
||||||
|
|
||||||
node = objectIdMap[self._message.id]
|
if self._message.id in objectIdMap:
|
||||||
if node:
|
node = objectIdMap[self._message.id]
|
||||||
with open(self._message.filename) as f:
|
with open(self._message.filename) as f:
|
||||||
data = f.read(None)
|
data = f.read(None)
|
||||||
setattr(node.getMeshData(), 'gcode', data)
|
setattr(node.getMeshData(), 'gcode', data)
|
||||||
|
|
||||||
os.remove(self._message.filename)
|
os.remove(self._message.filename)
|
||||||
|
|
|
@ -40,3 +40,4 @@ class ProcessSlicedObjectListJob(Job):
|
||||||
layerData.addPolygon(layer.id, polygon.type, points)
|
layerData.addPolygon(layer.id, polygon.type, points)
|
||||||
|
|
||||||
mesh.layerData = layerData
|
mesh.layerData = layerData
|
||||||
|
objectIdMap[object.id].meshDataChanged.emit()
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
#Shoopdawoop
|
#Shoopdawoop
|
||||||
from . import CuraEngineBackend
|
from . import CuraEngineBackend
|
||||||
|
|
||||||
from UM.Preferences import Preferences
|
|
||||||
|
|
||||||
def getMetaData():
|
def getMetaData():
|
||||||
return {
|
return {
|
||||||
'type': 'backend',
|
'type': 'backend',
|
||||||
|
@ -12,6 +10,5 @@ def getMetaData():
|
||||||
}
|
}
|
||||||
|
|
||||||
def register(app):
|
def register(app):
|
||||||
Preferences.addPreference("BackendLocation","../PinkUnicornEngine/CuraEngine")
|
|
||||||
return CuraEngineBackend.CuraEngineBackend()
|
return CuraEngineBackend.CuraEngineBackend()
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue