Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_mesh/src/primitives/dim3/polyline3d.rs
6598 views
1
use crate::{Indices, Mesh, MeshBuilder, Meshable, PrimitiveTopology};
2
use bevy_asset::RenderAssetUsages;
3
use bevy_math::primitives::Polyline3d;
4
use bevy_reflect::prelude::*;
5
6
/// A builder used for creating a [`Mesh`] with a [`Polyline3d`] shape.
7
#[derive(Clone, Debug, Default, Reflect)]
8
#[reflect(Default, Debug, Clone)]
9
pub struct Polyline3dMeshBuilder {
10
polyline: Polyline3d,
11
}
12
13
impl 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
29
impl Meshable for Polyline3d {
30
type Output = Polyline3dMeshBuilder;
31
32
fn mesh(&self) -> Self::Output {
33
Polyline3dMeshBuilder {
34
polyline: self.clone(),
35
}
36
}
37
}
38
39
impl From<Polyline3d> for Mesh {
40
fn from(polyline: Polyline3d) -> Self {
41
polyline.mesh().build()
42
}
43
}
44
45