Skip to main content

scenix_helpers/
axes.rs

1use scenix_core::Color;
2use scenix_math::Vec3;
3
4use crate::{EPSILON, LineGeometry};
5
6/// RGB XYZ axes helper.
7#[derive(Clone, Copy, Debug, PartialEq)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9pub struct AxesHelper {
10    /// Length of each positive axis.
11    pub size: f32,
12}
13
14impl AxesHelper {
15    /// Creates an axes helper.
16    #[inline]
17    pub const fn new(size: f32) -> Self {
18        Self { size }
19    }
20
21    /// Generates line-list geometry.
22    pub fn to_geometry(&self) -> LineGeometry {
23        let size = self.size.abs().max(EPSILON);
24        let mut geometry = LineGeometry::new();
25        geometry.push_segment(Vec3::ZERO, Vec3::X * size, Color::RED);
26        geometry.push_segment(Vec3::ZERO, Vec3::Y * size, Color::GREEN);
27        geometry.push_segment(Vec3::ZERO, Vec3::Z * size, Color::BLUE);
28        geometry
29    }
30}
31
32impl Default for AxesHelper {
33    #[inline]
34    fn default() -> Self {
35        Self::new(1.0)
36    }
37}