diff --git a/plugins/CuraEngineBackend/LayerDataDecorator.py b/plugins/CuraEngineBackend/LayerDataDecorator.py new file mode 100644 index 0000000000..81ce241be5 --- /dev/null +++ b/plugins/CuraEngineBackend/LayerDataDecorator.py @@ -0,0 +1,12 @@ +from UM.Scene.SceneNodeDecorator import SceneNodeDecorator + +class LayerDataDecorator(SceneNodeDecorator): + def __init__(self): + super().__init__() + self._layer_data = None + + def getLayerData(self): + return self._layer_data + + def setLayerData(self, layer_data): + self._layer_data = layer_data \ No newline at end of file diff --git a/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py b/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py index 89c5fc5e23..25564ed8f5 100644 --- a/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py +++ b/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py @@ -11,6 +11,7 @@ from UM.Message import Message from UM.i18n import i18nCatalog from . import LayerData +from . import LayerDataDecorator import numpy import struct @@ -36,7 +37,8 @@ class ProcessSlicedObjectListJob(Job): ## Put all nodes in a dict identified by ID for node in DepthFirstIterator(self._scene.getRoot()): if type(node) is SceneNode and node.getMeshData(): - if hasattr(node.getMeshData(), "layerData"): + if node.callDecoration("getLayerData"): + #if hasattr(node.getMeshData(), "layerData"): self._scene.getRoot().removeChild(node) else: objectIdMap[id(node)] = node @@ -83,14 +85,18 @@ class ProcessSlicedObjectListJob(Job): # We are done processing all the layers we got from the engine, now create a mesh out of the data layerData.build() - mesh.layerData = layerData if self._progress: self._progress.setProgress(100) - + + #Add layerdata decorator to scene node to indicate that the node has layerdata + decorator = LayerDataDecorator.LayerDataDecorator() + decorator.setLayerData(layerData) + new_node.addDecorator(decorator) + new_node.setMeshData(mesh) new_node.setParent(self._scene.getRoot()) - + view = Application.getInstance().getController().getActiveView() if view.getPluginId() == "LayerView": view.resetLayerData() diff --git a/plugins/LayerView/LayerView.py b/plugins/LayerView/LayerView.py index cad15047e3..1caf504ad1 100644 --- a/plugins/LayerView/LayerView.py +++ b/plugins/LayerView/LayerView.py @@ -68,10 +68,8 @@ class LayerView(View): if node.getMeshData() and node.isVisible(): if Selection.isSelected(node): renderer.queueNode(node, material = self._selection_material, transparent = True) - - try: - layer_data = node.getMeshData().layerData - except AttributeError: + layer_data = node.callDecoration("getLayerData") + if not layer_data: continue # Render all layers below a certain number as line mesh instead of vertices. @@ -133,10 +131,11 @@ class LayerView(View): for node in DepthFirstIterator(scene.getRoot()): if not node.render(renderer): if node.getMeshData() and node.isVisible(): - try: - layer_data = node.getMeshData().layerData - except AttributeError: + + layer_data = node.callDecoration("getLayerData") + if not layer_data: continue + if new_max_layers < len(layer_data.getLayers()): new_max_layers = len(layer_data.getLayers()) - 1