mraphics_mobject/three_d/
point3d.rs1use 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}