
# Objective Adopted #11748 ## Solution I've rebased on main to fix the merge conflicts. ~~Not quite ready to merge yet~~ * Clippy is happy and the tests are passing, but... * ~~The new shapes in `examples/2d/2d_shapes.rs` don't look right at all~~ Never mind, looks like radians and degrees just got mixed up at some point? * I have updated one doc comment based on a review in the original PR. --------- Co-authored-by: Alexis "spectria" Horizon <spectria.limina@gmail.com> Co-authored-by: Alexis "spectria" Horizon <118812919+spectria-limina@users.noreply.github.com> Co-authored-by: Joona Aalto <jondolf.dev@gmail.com> Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com> Co-authored-by: Ben Harper <ben@tukom.org>
51 lines
1.5 KiB
Rust
51 lines
1.5 KiB
Rust
//! Mesh generation for [primitive shapes](bevy_math::primitives).
|
|
//!
|
|
//! Primitives that support meshing implement the [`Meshable`] trait.
|
|
//! Calling [`mesh`](Meshable::mesh) will return either a [`Mesh`](super::Mesh) or a builder
|
|
//! that can be used to specify shape-specific configuration for creating the [`Mesh`](super::Mesh).
|
|
//!
|
|
//! ```
|
|
//! # use bevy_asset::Assets;
|
|
//! # use bevy_ecs::prelude::ResMut;
|
|
//! # use bevy_math::prelude::Circle;
|
|
//! # use bevy_render::prelude::*;
|
|
//! #
|
|
//! # fn setup(mut meshes: ResMut<Assets<Mesh>>) {
|
|
//! // Create circle mesh with default configuration
|
|
//! let circle = meshes.add(Circle { radius: 25.0 });
|
|
//!
|
|
//! // Specify number of vertices
|
|
//! let circle = meshes.add(Circle { radius: 25.0 }.mesh().resolution(64));
|
|
//! # }
|
|
//! ```
|
|
|
|
mod dim2;
|
|
pub use dim2::*;
|
|
|
|
mod dim3;
|
|
pub use dim3::*;
|
|
|
|
use super::Mesh;
|
|
|
|
/// A trait for shapes that can be turned into a [`Mesh`](super::Mesh).
|
|
pub trait Meshable {
|
|
/// The output of [`Self::mesh`]. This can either be a [`Mesh`](super::Mesh)
|
|
/// or a [`MeshBuilder`] used for creating a [`Mesh`](super::Mesh).
|
|
type Output;
|
|
|
|
/// Creates a [`Mesh`](super::Mesh) for a shape.
|
|
fn mesh(&self) -> Self::Output;
|
|
}
|
|
|
|
/// A trait used to build [`Mesh`]es from a configuration
|
|
pub trait MeshBuilder {
|
|
/// Builds a [`Mesh`] based on the configuration in `self`.
|
|
fn build(&self) -> Mesh;
|
|
}
|
|
|
|
impl<T: MeshBuilder> From<T> for Mesh {
|
|
fn from(builder: T) -> Self {
|
|
builder.build()
|
|
}
|
|
}
|