diff --git a/plugins/LayerView/LayerView.py b/plugins/LayerView/LayerView.py new file mode 100644 index 0000000000..ad1a5dc0f7 --- /dev/null +++ b/plugins/LayerView/LayerView.py @@ -0,0 +1,51 @@ +from UM.View.View import View +from UM.View.Renderer import Renderer +from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator +from UM.Resources import Resources + +## View used to display g-code paths. +class LayerView(View): + def __init__(self): + super().__init__() + self._material = None + self._num_layers = 0 + self._layer_percentage = 0 # what percentage of layers need to be shown (SLider gives value between 0 - 100) + + def beginRendering(self): + scene = self.getController().getScene() + renderer = self.getRenderer() + renderer.setRenderSelection(False) + + if not self._material: + self._material = renderer.createMaterial(Resources.getPath(Resources.ShadersLocation, 'basic.vert'), Resources.getPath(Resources.ShadersLocation, 'vertexcolor.frag')) + self._material.setUniformValue("u_color", [1.0, 0.0, 0.0, 1.0]) + + 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: + continue + + if self._layer_percentage < 100: + start = 0 + end_layer = round(len(layer_data.getLayers()) * (self._layer_percentage / 100)) + end = 0 + + element_counts = layer_data.getElementCounts() + for layer, counts in element_counts.items(): + end += sum(counts) + + if layer >= end_layer: + break + + renderer.queueNode(node, mesh = layer_data, material = self._material, mode = Renderer.RenderLines, start = start, end = end) + else: + renderer.queueNode(node, mesh = layer_data, material = self._material, mode = Renderer.RenderLines) + + def setLayer(self, value): + self._layer_percentage = value + + def endRendering(self): + pass diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml new file mode 100644 index 0000000000..16c9768eef --- /dev/null +++ b/plugins/LayerView/LayerView.qml @@ -0,0 +1,35 @@ +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.1 +import QtQuick.Controls.Styles 1.1 + +import UM 1.0 as UM + +Item +{ + width: 250 + height: 250 + /*Rectangle + { + color: "blue" + width: 250 + height:250 + }*/ + Slider + { + width: 10 + height: 250 + anchors.right : parent.right + //anchors.fill: parent + //Layout.preferredHeight: UM.Theme.sizes.section.height; + orientation: Qt.Vertical + minimumValue: 0; + maximumValue: 100; + + value: 50; + onValueChanged: UM.ActiveView.triggerAction("setLayer", value) + + style: UM.Theme.styles.slider; + //Component.onCompleted: {console.log(UM.Theme.styles.slider)} + } +} \ No newline at end of file diff --git a/plugins/LayerView/__init__.py b/plugins/LayerView/__init__.py new file mode 100644 index 0000000000..ace484b15a --- /dev/null +++ b/plugins/LayerView/__init__.py @@ -0,0 +1,18 @@ +from . import LayerView + + +def getMetaData(): + return { + 'type': 'view', + 'plugin': { + "name": "Layer View" + }, + 'view': { + 'name': 'Layers', + 'view_panel': 'LayerView.qml' + } + } + + +def register(app): + return {"view":LayerView.LayerView()}