dear_implot3d/plots/
mesh.rs1use 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}