Source code for yt_idv.scene_components.curves

import numpy as np
import traitlets
from OpenGL import GL

from yt_idv.scene_components.base_component import SceneComponent
from yt_idv.scene_data.curve import CurveCollection, CurveData


[docs]class CurveRendering(SceneComponent): """ A class that renders user-specified curves. """ name = "curve_rendering" data = traitlets.Instance(CurveData, help="The curve data.") line_width = traitlets.CFloat(1.0) curve_rgba = traitlets.Tuple((1.0, 1.0, 1.0, 1.0), trait=traitlets.CFloat()) priority = 10
[docs] def render_gui(self, imgui, renderer, scene): changed, self.visible = imgui.checkbox("Visible", self.visible) _, line_width = imgui.slider_float("Line Width", self.line_width, 1.0, 10.0) if _: self.line_width = line_width changed = changed or _ _, newRGBa = imgui.input_float4("RGBa", *self.curve_rgba) if _: self.curve_rgba = tuple(newRGBa) changed = changed or _ return changed
[docs] def draw(self, scene, program): GL.glEnable(GL.GL_CULL_FACE) GL.glCullFace(GL.GL_BACK) GL.glLineWidth(self.line_width) GL.glDrawArrays(GL.GL_LINE_STRIP, 0, self.data.n_vertices)
def _set_uniforms(self, scene, shader_program): clr = np.array(self.curve_rgba).astype("f4") shader_program._set_uniform("curve_rgba", clr)
[docs]class CurveCollectionRendering(CurveRendering): """ rendering a collection of curves """ name = "multi_curve_rendering" curve_collection = traitlets.List() data = traitlets.Instance(CurveCollection)
[docs] def draw(self, scene, program): GL.glEnable(GL.GL_CULL_FACE) GL.glCullFace(GL.GL_BACK) GL.glLineWidth(self.line_width) GL.glDrawArrays(GL.GL_LINES, 0, self.data.n_vertices)