mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-07 06:57:28 -06:00
Use color specified by material or nozzle to render objects
CURA-345
This commit is contained in:
parent
5d8a9a2cda
commit
f5bdc0295c
1 changed files with 31 additions and 4 deletions
|
@ -10,9 +10,11 @@ from UM.View.Renderer import Renderer
|
||||||
|
|
||||||
from UM.View.GL.OpenGL import OpenGL
|
from UM.View.GL.OpenGL import OpenGL
|
||||||
|
|
||||||
|
from cura.ExtrudersModel import ExtrudersModel
|
||||||
|
|
||||||
import math
|
import math
|
||||||
|
|
||||||
## Standard view for mesh models.
|
## Standard view for mesh models.
|
||||||
class SolidView(View):
|
class SolidView(View):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
@ -22,6 +24,8 @@ class SolidView(View):
|
||||||
self._enabled_shader = None
|
self._enabled_shader = None
|
||||||
self._disabled_shader = None
|
self._disabled_shader = None
|
||||||
|
|
||||||
|
self._extruders_model = ExtrudersModel()
|
||||||
|
|
||||||
def beginRendering(self):
|
def beginRendering(self):
|
||||||
scene = self.getController().getScene()
|
scene = self.getController().getScene()
|
||||||
renderer = self.getRenderer()
|
renderer = self.getRenderer()
|
||||||
|
@ -50,15 +54,38 @@ class SolidView(View):
|
||||||
# TODO: Find a better way to handle this
|
# TODO: Find a better way to handle this
|
||||||
#if node.getBoundingBoxMesh():
|
#if node.getBoundingBoxMesh():
|
||||||
# renderer.queueNode(scene.getRoot(), mesh = node.getBoundingBoxMesh(),mode = Renderer.RenderLines)
|
# renderer.queueNode(scene.getRoot(), mesh = node.getBoundingBoxMesh(),mode = Renderer.RenderLines)
|
||||||
|
|
||||||
|
uniforms = {}
|
||||||
|
if self._extruders_model.rowCount() > 0:
|
||||||
|
# Get color to render this mesh in from ExtrudersModel
|
||||||
|
extruder_index = 0
|
||||||
|
extruder_id = node.callDecoration("getActiveExtruder")
|
||||||
|
if extruder_id:
|
||||||
|
extruder_index = self._extruders_model.find("id", extruder_id)
|
||||||
|
if extruder_index:
|
||||||
|
extruder_color = self._extruders_model.getItem(extruder_index)["colour"]
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Colors are passed as rgb hex strings (eg "#ffffff"), and the shader needs
|
||||||
|
# an rgba list of floats (eg [1.0, 1.0, 1.0, 1.0])
|
||||||
|
uniforms["diffuse_color"] = [
|
||||||
|
int(extruder_color[1:3], 16) / 255,
|
||||||
|
int(extruder_color[3:5], 16) / 255,
|
||||||
|
int(extruder_color[5:7], 16) / 255,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
if hasattr(node, "_outside_buildarea"):
|
if hasattr(node, "_outside_buildarea"):
|
||||||
if node._outside_buildarea:
|
if node._outside_buildarea:
|
||||||
renderer.queueNode(node, shader = self._disabled_shader)
|
renderer.queueNode(node, shader = self._disabled_shader)
|
||||||
else:
|
else:
|
||||||
renderer.queueNode(node, shader = self._enabled_shader)
|
renderer.queueNode(node, shader = self._enabled_shader, uniforms = uniforms)
|
||||||
else:
|
else:
|
||||||
renderer.queueNode(node, material = self._enabled_shader)
|
renderer.queueNode(node, material = self._enabled_shader, uniforms = uniforms)
|
||||||
if node.callDecoration("isGroup"):
|
if node.callDecoration("isGroup"):
|
||||||
renderer.queueNode(scene.getRoot(), mesh = node.getBoundingBoxMesh(),mode = Renderer.RenderLines)
|
renderer.queueNode(scene.getRoot(), mesh = node.getBoundingBoxMesh(), mode = Renderer.RenderLines)
|
||||||
|
|
||||||
def endRendering(self):
|
def endRendering(self):
|
||||||
pass
|
pass
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue