diff --git a/CuraEngineBackend.py b/CuraEngineBackend.py index 506fc1fd09..3dcc876b4c 100644 --- a/CuraEngineBackend.py +++ b/CuraEngineBackend.py @@ -60,9 +60,10 @@ class CuraEngineBackend(Backend): printDurationMessage = Signal() 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()) or (source.getMeshData() is None): + return + if(source.getMeshData().getVertices() is None): return - self._onChanged() def _onActiveMachineChanged(self): @@ -126,7 +127,7 @@ class CuraEngineBackend(Backend): objects = [] for node in DepthFirstIterator(self._scene.getRoot()): - if type(node) is SceneNode and node.getMeshData(): + if type(node) is SceneNode and node.getMeshData() and node.getMeshData().getVertices() is not None: if not getattr(node, '_outside_buildarea', False): objects.append(node) @@ -155,7 +156,7 @@ class CuraEngineBackend(Backend): obj = msg.objects.add() obj.id = id(object) - + verts = numpy.array(meshData.getVertices(), copy=True) verts[:,[1,2]] = verts[:,[2,1]] obj.vertices = verts.tostring() diff --git a/ProcessSlicedObjectListJob.py b/ProcessSlicedObjectListJob.py index a324e260bc..e9a7adebd9 100644 --- a/ProcessSlicedObjectListJob.py +++ b/ProcessSlicedObjectListJob.py @@ -18,19 +18,24 @@ class ProcessSlicedObjectListJob(Job): def run(self): objectIdMap = {} + new_node = SceneNode() + ## Put all nodes in a dict identified by ID for node in DepthFirstIterator(self._scene.getRoot()): if type(node) is SceneNode and node.getMeshData(): - objectIdMap[id(node)] = node + if hasattr(node.getMeshData(), "layerData"): + self._scene.getRoot().removeChild(node) + else: + objectIdMap[id(node)] = node layerHeight = Application.getInstance().getActiveMachine().getSettingValueByKey('layer_height') for object in self._message.objects: - try: + try: node = objectIdMap[object.id] except KeyError: continue - - mesh = node.getMeshData() + + mesh = MeshData() layerData = LayerData.LayerData() for layer in object.layers: @@ -44,11 +49,14 @@ class ProcessSlicedObjectListJob(Job): points[:,0] -= self._center.x points[:,2] -= self._center.z - points = numpy.pad(points, ((0,0), (0,1)), 'constant', constant_values=(0.0, 1.0)) - inverse = node.getWorldTransformation().getInverse().getData() - points = points.dot(inverse) - points = points[:,0:3] + #points = numpy.pad(points, ((0,0), (0,1)), 'constant', constant_values=(0.0, 1.0)) + #inverse = node.getWorldTransformation().getInverse().getData() + #points = points.dot(inverse) + #points = points[:,0:3] layerData.addPolygon(layer.id, polygon.type, points) mesh.layerData = layerData + + new_node.setMeshData(mesh) + new_node.setParent(self._scene.getRoot())