mirror of
https://github.com/hannobraun/Fornjot
synced 2025-05-04 09:58:27 +00:00
Merge pull request #2399 from hannobraun/build
Clean up in build operations
This commit is contained in:
commit
d906b5327d
@ -2,7 +2,7 @@ use fj_math::{Point, Scalar, Vector};
|
||||
use itertools::Itertools;
|
||||
|
||||
use crate::{
|
||||
operations::{build::BuildHalfEdge, insert::Insert, update::UpdateCycle},
|
||||
operations::build::BuildHalfEdge,
|
||||
storage::Handle,
|
||||
topology::{Cycle, HalfEdge, Surface},
|
||||
Core,
|
||||
@ -54,12 +54,14 @@ pub trait BuildCycle {
|
||||
|
||||
let angle = Scalar::TAU / 4.;
|
||||
|
||||
let ab = HalfEdge::arc(a, b, angle, surface.clone(), core).insert(core);
|
||||
let bc = HalfEdge::arc(b, c, angle, surface.clone(), core).insert(core);
|
||||
let cd = HalfEdge::arc(c, d, angle, surface.clone(), core).insert(core);
|
||||
let da = HalfEdge::arc(d, a, angle, surface.clone(), core).insert(core);
|
||||
let half_edges =
|
||||
[[a, b], [b, c], [c, d], [d, a]]
|
||||
.into_iter()
|
||||
.map(|[start, end]| {
|
||||
HalfEdge::arc(start, end, angle, surface.clone(), core)
|
||||
});
|
||||
|
||||
Cycle::empty().add_half_edges([ab, bc, cd, da], core)
|
||||
Cycle::new(half_edges)
|
||||
}
|
||||
|
||||
/// Build a polygon
|
||||
@ -73,20 +75,15 @@ pub trait BuildCycle {
|
||||
Ps: IntoIterator<Item = P>,
|
||||
Ps::IntoIter: Clone + ExactSizeIterator,
|
||||
{
|
||||
let edges = points
|
||||
let half_edges = points
|
||||
.into_iter()
|
||||
.map(Into::into)
|
||||
.circular_tuple_windows()
|
||||
.map(|(start, end)| {
|
||||
HalfEdge::line_segment(
|
||||
[start, end],
|
||||
None,
|
||||
surface.clone(),
|
||||
core,
|
||||
)
|
||||
HalfEdge::line_segment([start, end], surface.clone(), core)
|
||||
});
|
||||
|
||||
Cycle::new(edges)
|
||||
Cycle::new(half_edges)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -83,10 +83,11 @@ pub trait BuildHalfEdge {
|
||||
/// Create a line segment
|
||||
fn line_segment(
|
||||
points_surface: [impl Into<Point<2>>; 2],
|
||||
boundary: Option<CurveBoundary<Point<1>>>,
|
||||
surface: Handle<Surface>,
|
||||
core: &mut Core,
|
||||
) -> Handle<HalfEdge> {
|
||||
let boundary = CurveBoundary::default();
|
||||
|
||||
let half_edge = HalfEdge::unjoined(core).insert(core);
|
||||
|
||||
half_edge.curve().clone().make_line_on_surface(
|
||||
@ -96,12 +97,9 @@ pub trait BuildHalfEdge {
|
||||
&mut core.layers.geometry,
|
||||
);
|
||||
|
||||
core.layers.geometry.define_half_edge(
|
||||
half_edge.clone(),
|
||||
HalfEdgeGeom {
|
||||
boundary: boundary.unwrap_or_default(),
|
||||
},
|
||||
);
|
||||
core.layers
|
||||
.geometry
|
||||
.define_half_edge(half_edge.clone(), HalfEdgeGeom { boundary });
|
||||
|
||||
half_edge
|
||||
}
|
||||
|
@ -92,7 +92,7 @@ pub trait BuildShell {
|
||||
|
||||
let curve = curve.make_line_on_surface(
|
||||
positions,
|
||||
Some(boundary),
|
||||
boundary,
|
||||
surface.clone(),
|
||||
&mut core.layers.geometry,
|
||||
);
|
||||
|
@ -35,7 +35,7 @@ pub trait UpdateCurveGeometry {
|
||||
fn make_line_on_surface(
|
||||
self,
|
||||
points_surface: [impl Into<Point<2>>; 2],
|
||||
points_curve: Option<CurveBoundary<Point<1>>>,
|
||||
points_curve: CurveBoundary<Point<1>>,
|
||||
surface: Handle<Surface>,
|
||||
geometry: &mut Layer<Geometry>,
|
||||
) -> Self;
|
||||
@ -71,11 +71,10 @@ impl UpdateCurveGeometry for Handle<Curve> {
|
||||
fn make_line_on_surface(
|
||||
self,
|
||||
points_surface: [impl Into<Point<2>>; 2],
|
||||
points_curve: Option<CurveBoundary<Point<1>>>,
|
||||
points_curve: CurveBoundary<Point<1>>,
|
||||
surface: Handle<Surface>,
|
||||
geometry: &mut Layer<Geometry>,
|
||||
) -> Self {
|
||||
let points_curve = points_curve.unwrap_or_default();
|
||||
let path = SurfacePath::line_from_points_with_coords(
|
||||
points_curve.inner.zip_ext(points_surface),
|
||||
);
|
||||
|
@ -126,7 +126,6 @@ impl SplitFace for Shell {
|
||||
.path,
|
||||
),
|
||||
],
|
||||
None,
|
||||
face.surface().clone(),
|
||||
core,
|
||||
);
|
||||
|
@ -133,7 +133,7 @@ impl SweepHalfEdge for Handle<HalfEdge> {
|
||||
.unwrap_or_else(|| Curve::new().insert(core))
|
||||
.make_line_on_surface(
|
||||
[start, end],
|
||||
Some(boundary),
|
||||
boundary,
|
||||
surface.clone(),
|
||||
&mut core.layers.geometry,
|
||||
);
|
||||
|
@ -180,7 +180,6 @@ mod tests {
|
||||
|_, core| {
|
||||
[HalfEdge::line_segment(
|
||||
[[0., 0.], [2., 0.]],
|
||||
None,
|
||||
surface,
|
||||
core,
|
||||
)]
|
||||
|
Loading…
Reference in New Issue
Block a user