bevy_mesh/primitives/dim3/
polyline3d.rs1use crate::{Indices, Mesh, MeshBuilder, Meshable, PrimitiveTopology};
2use bevy_asset::RenderAssetUsages;
3use bevy_math::primitives::Polyline3d;
4use bevy_reflect::prelude::*;
5
6#[derive(Clone, Debug, Default, Reflect)]
8#[reflect(Default, Debug, Clone)]
9pub struct Polyline3dMeshBuilder {
10 polyline: Polyline3d,
11}
12
13impl MeshBuilder for Polyline3dMeshBuilder {
14 fn build(&self) -> Mesh {
15 let positions: Vec<_> = self.polyline.vertices.clone();
16
17 let indices = Indices::U32(
18 (0..self.polyline.vertices.len() as u32 - 1)
19 .flat_map(|i| [i, i + 1])
20 .collect(),
21 );
22
23 Mesh::new(PrimitiveTopology::LineList, RenderAssetUsages::default())
24 .with_inserted_indices(indices)
25 .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, positions)
26 }
27}
28
29impl Meshable for Polyline3d {
30 type Output = Polyline3dMeshBuilder;
31
32 fn mesh(&self) -> Self::Output {
33 Polyline3dMeshBuilder {
34 polyline: self.clone(),
35 }
36 }
37}
38
39impl From<Polyline3d> for Mesh {
40 fn from(polyline: Polyline3d) -> Self {
41 polyline.mesh().build()
42 }
43}