From 1a50753914b274a444e237379c550c34b458371c Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Apr 2015 11:31:29 +0200 Subject: [PATCH] Use the start and end parameters to QtGL2Renderer::queueNode to implement showing only a range of layers --- LayerView.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/LayerView.py b/LayerView.py index c1039936fe..3e65876ad0 100644 --- a/LayerView.py +++ b/LayerView.py @@ -3,7 +3,6 @@ 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): @@ -16,7 +15,6 @@ class LayerView(View): scene = self.getController().getScene() renderer = self.getRenderer() renderer.setRenderSelection(False) - self._num_layers = 0 if not self._material: self._material = renderer.createMaterial(Resources.getPath(Resources.ShadersLocation, 'basic.vert'), Resources.getPath(Resources.ShadersLocation, 'vertexcolor.frag')) @@ -27,13 +25,24 @@ class LayerView(View): if node.getMeshData() and node.isVisible(): try: layer_data = node.getMeshData().layerData - if self._num_layers < len(layer_data.getLayers()): - self._num_layers = len(layer_data.getLayers()) - except AttributeError: continue - renderer.queueNode(node, mesh = layer_data, material = self._material, mode = Renderer.RenderLines) + 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) * 2 + + 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