1use scenix_core::Color;
2use scenix_math::Vec3;
3
4use crate::{EPSILON, LineGeometry};
5
6#[derive(Clone, Copy, Debug, PartialEq)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9pub struct AxesHelper {
10 pub size: f32,
12}
13
14impl AxesHelper {
15 #[inline]
17 pub const fn new(size: f32) -> Self {
18 Self { size }
19 }
20
21 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}