Use the start and end parameters to QtGL2Renderer::queueNode to implement showing only a range of layers

This commit is contained in:
Arjen Hiemstra 2015-04-28 11:31:29 +02:00
parent 8b5e5dbfda
commit 1a50753914

View file

@ -3,7 +3,6 @@ from UM.View.Renderer import Renderer
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.Resources import Resources from UM.Resources import Resources
## View used to display g-code paths. ## View used to display g-code paths.
class LayerView(View): class LayerView(View):
def __init__(self): def __init__(self):
@ -16,7 +15,6 @@ class LayerView(View):
scene = self.getController().getScene() scene = self.getController().getScene()
renderer = self.getRenderer() renderer = self.getRenderer()
renderer.setRenderSelection(False) renderer.setRenderSelection(False)
self._num_layers = 0
if not self._material: if not self._material:
self._material = renderer.createMaterial(Resources.getPath(Resources.ShadersLocation, 'basic.vert'), Resources.getPath(Resources.ShadersLocation, 'vertexcolor.frag')) self._material = renderer.createMaterial(Resources.getPath(Resources.ShadersLocation, 'basic.vert'), Resources.getPath(Resources.ShadersLocation, 'vertexcolor.frag'))
@ -27,12 +25,23 @@ class LayerView(View):
if node.getMeshData() and node.isVisible(): if node.getMeshData() and node.isVisible():
try: try:
layer_data = node.getMeshData().layerData layer_data = node.getMeshData().layerData
if self._num_layers < len(layer_data.getLayers()):
self._num_layers = len(layer_data.getLayers())
except AttributeError: except AttributeError:
continue 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) * 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) renderer.queueNode(node, mesh = layer_data, material = self._material, mode = Renderer.RenderLines)
def setLayer(self, value): def setLayer(self, value):