Source code for yt_idv.scene_data.box
import numpy as np
import traitlets
from yt_idv.opengl_support import VertexArray, VertexAttribute, compute_box_geometry
from yt_idv.scene_data.base_data import SceneData
from yt_idv.traitlets_support import YTPositionTrait
[docs]class BoxData(SceneData):
name = "box_data"
left_edge = YTPositionTrait([0.0, 0.0, 0.0])
right_edge = YTPositionTrait([1.0, 1.0, 1.0])
@traitlets.default("vertex_array")
def _default_vertex_array(self):
va = VertexArray(name="box_outline", each=36)
data = compute_box_geometry(self.left_edge, self.right_edge).copy()
va.attributes.append(
VertexAttribute(name="model_vertex", data=data.astype("f4"))
)
N = data.size // 4
le = np.concatenate([[self.left_edge.copy()] for _ in range(N)])
re = np.concatenate([[self.right_edge.copy()] for _ in range(N)])
dds = self.right_edge - self.left_edge
dds = np.concatenate([[dds.copy()] for _ in range(N)])
va.attributes.append(VertexAttribute(name="in_left_edge", data=le.astype("f4")))
va.attributes.append(
VertexAttribute(name="in_right_edge", data=re.astype("f4"))
)
va.attributes.append(VertexAttribute(name="in_dx", data=dds.astype("f4")))
return va