Skip to content

Commit 8e4e840

Browse files
authored
Meshable extrusions - Part 2 (#13676)
# Objective - Implement `Extrudable` for all meshbuilders of shapes that have been added after #13478 was created ## Solution - Implemented meshing for extrusions of `CircularSector`, `CircularSegment` and `Rhombus` ## Testing - The correctness of these was confirmed visually. ## Additional information Here is an image of what they look like :) ![Screenshot 2024-06-04 230633](https://github.com/bevyengine/bevy/assets/62256001/d9cca0ba-30ea-4c48-8ae2-007b469739d7) Co-authored-by: Lynn Büttgenbach <[email protected]>
1 parent 1fdddf8 commit 8e4e840

File tree

1 file changed

+46
-0
lines changed
  • crates/bevy_render/src/mesh/primitives

1 file changed

+46
-0
lines changed

crates/bevy_render/src/mesh/primitives/dim2.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,25 @@ impl MeshBuilder for CircularSectorMeshBuilder {
213213
}
214214
}
215215

216+
impl Extrudable for CircularSectorMeshBuilder {
217+
fn perimeter(&self) -> Vec<PerimeterSegment> {
218+
let resolution = self.resolution as u32;
219+
let (sin, cos) = self.sector.arc.half_angle.sin_cos();
220+
let first_normal = Vec2::new(sin, cos);
221+
let last_normal = Vec2::new(-sin, cos);
222+
vec![
223+
PerimeterSegment::Flat {
224+
indices: vec![resolution, 0, 1],
225+
},
226+
PerimeterSegment::Smooth {
227+
first_normal,
228+
last_normal,
229+
indices: (1..=resolution).collect(),
230+
},
231+
]
232+
}
233+
}
234+
216235
impl Meshable for CircularSector {
217236
type Output = CircularSectorMeshBuilder;
218237

@@ -340,6 +359,25 @@ impl MeshBuilder for CircularSegmentMeshBuilder {
340359
}
341360
}
342361

362+
impl Extrudable for CircularSegmentMeshBuilder {
363+
fn perimeter(&self) -> Vec<PerimeterSegment> {
364+
let resolution = self.resolution as u32;
365+
let (sin, cos) = self.segment.arc.half_angle.sin_cos();
366+
let first_normal = Vec2::new(sin, cos);
367+
let last_normal = Vec2::new(-sin, cos);
368+
vec![
369+
PerimeterSegment::Flat {
370+
indices: vec![resolution, 0, 1],
371+
},
372+
PerimeterSegment::Smooth {
373+
first_normal,
374+
last_normal,
375+
indices: (1..=resolution).collect(),
376+
},
377+
]
378+
}
379+
}
380+
343381
impl Meshable for CircularSegment {
344382
type Output = CircularSegmentMeshBuilder;
345383

@@ -662,6 +700,14 @@ impl MeshBuilder for RhombusMeshBuilder {
662700
}
663701
}
664702

703+
impl Extrudable for RhombusMeshBuilder {
704+
fn perimeter(&self) -> Vec<PerimeterSegment> {
705+
vec![PerimeterSegment::Flat {
706+
indices: vec![0, 2, 1, 3, 0],
707+
}]
708+
}
709+
}
710+
665711
impl Meshable for Rhombus {
666712
type Output = RhombusMeshBuilder;
667713

0 commit comments

Comments
 (0)