Render a transparent ghost of the selection when things are selected.

Fixes Asana issue about layer view
This commit is contained in:
Arjen Hiemstra 2015-06-04 10:29:45 +02:00
parent 33c69b32f8
commit 81b41b8889

View file

@ -5,6 +5,8 @@ from UM.View.View import View
from UM.View.Renderer import Renderer 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
from UM.Scene.Selection import Selection
from UM.Math.Color import Color
## View used to display g-code paths. ## View used to display g-code paths.
class LayerView(View): class LayerView(View):
@ -23,9 +25,15 @@ class LayerView(View):
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"))
self._material.setUniformValue("u_color", [1.0, 0.0, 0.0, 1.0]) self._material.setUniformValue("u_color", [1.0, 0.0, 0.0, 1.0])
self._selection_material = renderer.createMaterial(Resources.getPath(Resources.ShadersLocation, "basic.vert"), Resources.getPath(Resources.ShadersLocation, "color.frag"))
self._selection_material.setUniformValue("u_color", Color(35, 35, 35, 128))
for node in DepthFirstIterator(scene.getRoot()): for node in DepthFirstIterator(scene.getRoot()):
if not node.render(renderer): if not node.render(renderer):
if node.getMeshData() and node.isVisible(): if node.getMeshData() and node.isVisible():
if Selection.isSelected(node):
renderer.queueNode(node, material = self._selection_material, transparent = True)
try: try:
layer_data = node.getMeshData().layerData layer_data = node.getMeshData().layerData
except AttributeError: except AttributeError:
@ -45,9 +53,9 @@ class LayerView(View):
if layer >= end_layer: if layer >= end_layer:
break break
renderer.queueNode(node, mesh = layer_data, material = self._material, mode = Renderer.RenderLines, start = start, end = end) renderer.queueNode(node, mesh = layer_data, material = self._material, mode = Renderer.RenderLines, start = start, end = end, overlay = True)
else: 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, overlay = True)
def setLayer(self, value): def setLayer(self, value):
self._layer_percentage = value self._layer_percentage = value