dear_implot3d/plots/
mesh.rs

1use super::{Plot3D, Plot3DError, validate_nonempty};
2use crate::{Mesh3DFlags, Plot3DUi};
3
4pub struct Mesh3D<'a> {
5    pub label: &'a str,
6    pub vertices: &'a [[f32; 3]],
7    pub indices: &'a [u32],
8    pub flags: Mesh3DFlags,
9}
10
11impl<'a> Mesh3D<'a> {
12    pub fn new(label: &'a str, vertices: &'a [[f32; 3]], indices: &'a [u32]) -> Self {
13        Self {
14            label,
15            vertices,
16            indices,
17            flags: Mesh3DFlags::NONE,
18        }
19    }
20    pub fn flags(mut self, flags: Mesh3DFlags) -> Self {
21        self.flags = flags;
22        self
23    }
24}
25
26impl<'a> Plot3D for Mesh3D<'a> {
27    fn label(&self) -> &str {
28        self.label
29    }
30    fn try_plot(&self, ui: &Plot3DUi<'_>) -> Result<(), Plot3DError> {
31        validate_nonempty(self.vertices)?;
32        validate_nonempty(self.indices)?;
33        ui.mesh(self.label, self.vertices, self.indices)
34            .flags(self.flags)
35            .plot();
36        Ok(())
37    }
38}