mraphics_mobject/three_d/
point3d.rs

1use mraphics_core::{BasicMaterial, Mesh, MeshIndex, MeshLike, RenderInstance, Renderable, Sphere};
2#[cfg(feature = "wasm")]
3use wasm_bindgen::prelude::wasm_bindgen;
4
5#[cfg_attr(feature = "wasm", wasm_bindgen)]
6pub struct Point3D {
7    pub radius: f32,
8
9    #[cfg_attr(feature = "wasm", wasm_bindgen(skip))]
10    pub identifier: MeshIndex,
11
12    #[cfg_attr(feature = "wasm", wasm_bindgen(skip))]
13    pub geometry: Sphere,
14
15    #[cfg_attr(feature = "wasm", wasm_bindgen(skip))]
16    pub material: BasicMaterial,
17}
18
19#[cfg_attr(feature = "wasm", wasm_bindgen)]
20impl Point3D {
21    #[cfg_attr(feature = "wasm", wasm_bindgen(js_name = "withRadius"))]
22    pub fn with_radius(mut self, radius: f32) -> Self {
23        self.radius = radius;
24        self.geometry.radius = radius;
25        self
26    }
27}
28
29impl Default for Point3D {
30    fn default() -> Self {
31        Self {
32            radius: 0.06,
33            identifier: Mesh::<Sphere, BasicMaterial>::acquire_id(),
34            geometry: Sphere {
35                radius: 0.06,
36                theta_segments: 8,
37                phi_segments: 16,
38                ..Default::default()
39            },
40            material: BasicMaterial::new(),
41        }
42    }
43}
44
45impl Renderable for Point3D {
46    fn build_instance(&self) -> mraphics_core::RenderInstance {
47        RenderInstance::new(self.identifier.index().to_string(), &self.material)
48    }
49
50    fn identifier(&self) -> usize {
51        self.identifier.index()
52    }
53}
54
55impl MeshLike<Sphere, BasicMaterial> for Point3D {
56    fn geometry(&self) -> &Sphere {
57        &self.geometry
58    }
59
60    fn material(&self) -> &BasicMaterial {
61        &self.material
62    }
63}