12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- # Copyright (c) 2017 Ultimaker B.V.
- # Cura is released under the terms of the LGPLv3 or higher.
- from UM.Application import Application
- from UM.Math.Color import Color
- from UM.Math.Vector import Vector
- from UM.PluginRegistry import PluginRegistry
- from UM.Scene.SceneNode import SceneNode
- from UM.View.GL.OpenGL import OpenGL
- from UM.Resources import Resources
- import os
- class NozzleNode(SceneNode):
- def __init__(self, parent = None):
- super().__init__(parent)
- self._shader = None
- self.setCalculateBoundingBox(False)
- self._createNozzleMesh()
- def _createNozzleMesh(self):
- mesh_file = "resources/nozzle.stl"
- try:
- path = os.path.join(PluginRegistry.getInstance().getPluginPath("SimulationView"), mesh_file)
- except FileNotFoundError:
- path = ""
- reader = Application.getInstance().getMeshFileHandler().getReaderForFile(path)
- node = reader.read(path)
- if node.getMeshData():
- self.setMeshData(node.getMeshData())
- def render(self, renderer):
- # Avoid to render if it is not visible
- if not self.isVisible():
- return False
- if not self._shader:
- # We now misuse the platform shader, as it actually supports textures
- self._shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "color.shader"))
- self._shader.setUniformValue("u_color", Color(*Application.getInstance().getTheme().getColor("layerview_nozzle").getRgb()))
- # Set the opacity to 0, so that the template is in full control.
- self._shader.setUniformValue("u_opacity", 0)
- if self.getMeshData():
- renderer.queueNode(self, shader = self._shader, transparent = True)
- return True
|