mirror of
https://github.com/hannobraun/Fornjot
synced 2025-05-11 13:28:28 +00:00
Merge pull request #2286 from hannobraun/geometry
Simplify how half-edge geometry is set
This commit is contained in:
commit
4b74964372
@ -32,21 +32,16 @@ pub trait BuildHalfEdge {
|
|||||||
start_vertex: Handle<Vertex>,
|
start_vertex: Handle<Vertex>,
|
||||||
core: &mut Core,
|
core: &mut Core,
|
||||||
) -> Handle<HalfEdge> {
|
) -> Handle<HalfEdge> {
|
||||||
let half_edge = HalfEdge::new(
|
HalfEdge::new(
|
||||||
sibling.boundary().reverse(),
|
sibling.boundary().reverse(),
|
||||||
sibling.curve().clone(),
|
sibling.curve().clone(),
|
||||||
start_vertex,
|
start_vertex,
|
||||||
)
|
)
|
||||||
.insert(core);
|
.insert(core)
|
||||||
|
.set_geometry(
|
||||||
core.layers.geometry.define_half_edge(
|
core.layers.geometry.of_half_edge(sibling),
|
||||||
half_edge.clone(),
|
&mut core.layers.geometry,
|
||||||
HalfEdgeGeometry {
|
)
|
||||||
path: core.layers.geometry.of_half_edge(sibling).path,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
half_edge
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create an arc
|
/// Create an arc
|
||||||
@ -112,7 +107,7 @@ pub trait BuildHalfEdge {
|
|||||||
|
|
||||||
HalfEdge::unjoined(boundary, core)
|
HalfEdge::unjoined(boundary, core)
|
||||||
.insert(core)
|
.insert(core)
|
||||||
.set_path(path, &mut core.layers.geometry)
|
.set_geometry(HalfEdgeGeometry { path }, &mut core.layers.geometry)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,11 +101,10 @@ pub trait BuildShell {
|
|||||||
.update_start_vertex(|_, _| vertex, core)
|
.update_start_vertex(|_, _| vertex, core)
|
||||||
.update_curve(|_, _| curve, core)
|
.update_curve(|_, _| curve, core)
|
||||||
.insert(core)
|
.insert(core)
|
||||||
.set_path(
|
.set_geometry(
|
||||||
core.layers
|
core.layers
|
||||||
.geometry
|
.geometry
|
||||||
.of_half_edge(&half_edge)
|
.of_half_edge(&half_edge),
|
||||||
.path,
|
|
||||||
&mut core.layers.geometry,
|
&mut core.layers.geometry,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
geometry::{Geometry, HalfEdgeGeometry, SurfacePath},
|
geometry::{Geometry, HalfEdgeGeometry},
|
||||||
layers::Layer,
|
layers::Layer,
|
||||||
objects::HalfEdge,
|
objects::HalfEdge,
|
||||||
storage::Handle,
|
storage::Handle,
|
||||||
@ -8,20 +8,20 @@ use crate::{
|
|||||||
/// Update the geometry of a [`HalfEdge`]
|
/// Update the geometry of a [`HalfEdge`]
|
||||||
pub trait UpdateHalfEdgeGeometry {
|
pub trait UpdateHalfEdgeGeometry {
|
||||||
/// Set the path of the half-edge
|
/// Set the path of the half-edge
|
||||||
fn set_path(
|
fn set_geometry(
|
||||||
self,
|
self,
|
||||||
path: SurfacePath,
|
geometry: HalfEdgeGeometry,
|
||||||
geometry: &mut Layer<Geometry>,
|
layer: &mut Layer<Geometry>,
|
||||||
) -> Self;
|
) -> Self;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl UpdateHalfEdgeGeometry for Handle<HalfEdge> {
|
impl UpdateHalfEdgeGeometry for Handle<HalfEdge> {
|
||||||
fn set_path(
|
fn set_geometry(
|
||||||
self,
|
self,
|
||||||
path: SurfacePath,
|
geometry: HalfEdgeGeometry,
|
||||||
geometry: &mut Layer<Geometry>,
|
layer: &mut Layer<Geometry>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
geometry.define_half_edge(self.clone(), HalfEdgeGeometry { path });
|
layer.define_half_edge(self.clone(), geometry);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ use fj_math::Point;
|
|||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
geometry::{CurveBoundary, SurfacePath},
|
geometry::{CurveBoundary, HalfEdgeGeometry, SurfacePath},
|
||||||
objects::{Cycle, HalfEdge},
|
objects::{Cycle, HalfEdge},
|
||||||
operations::{
|
operations::{
|
||||||
build::BuildHalfEdge,
|
build::BuildHalfEdge,
|
||||||
@ -97,7 +97,10 @@ impl JoinCycle for Cycle {
|
|||||||
core,
|
core,
|
||||||
)
|
)
|
||||||
.insert(core)
|
.insert(core)
|
||||||
.set_path(path, &mut core.layers.geometry)
|
.set_geometry(
|
||||||
|
HalfEdgeGeometry { path },
|
||||||
|
&mut core.layers.geometry,
|
||||||
|
)
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
self.add_half_edges(half_edges, core)
|
self.add_half_edges(half_edges, core)
|
||||||
@ -141,11 +144,10 @@ impl JoinCycle for Cycle {
|
|||||||
core,
|
core,
|
||||||
)
|
)
|
||||||
.insert(core)
|
.insert(core)
|
||||||
.set_path(
|
.set_geometry(
|
||||||
core.layers
|
core.layers
|
||||||
.geometry
|
.geometry
|
||||||
.of_half_edge(half_edge)
|
.of_half_edge(half_edge),
|
||||||
.path,
|
|
||||||
&mut core.layers.geometry,
|
&mut core.layers.geometry,
|
||||||
)]
|
)]
|
||||||
},
|
},
|
||||||
@ -160,11 +162,10 @@ impl JoinCycle for Cycle {
|
|||||||
core,
|
core,
|
||||||
)
|
)
|
||||||
.insert(core)
|
.insert(core)
|
||||||
.set_path(
|
.set_geometry(
|
||||||
core.layers
|
core.layers
|
||||||
.geometry
|
.geometry
|
||||||
.of_half_edge(half_edge)
|
.of_half_edge(half_edge),
|
||||||
.path,
|
|
||||||
&mut core.layers.geometry,
|
&mut core.layers.geometry,
|
||||||
)]
|
)]
|
||||||
},
|
},
|
||||||
|
@ -14,8 +14,6 @@ impl Reverse for Cycle {
|
|||||||
.half_edges()
|
.half_edges()
|
||||||
.pairs()
|
.pairs()
|
||||||
.map(|(current, next)| {
|
.map(|(current, next)| {
|
||||||
let path = core.layers.geometry.of_half_edge(current).path;
|
|
||||||
|
|
||||||
HalfEdge::new(
|
HalfEdge::new(
|
||||||
current.boundary().reverse(),
|
current.boundary().reverse(),
|
||||||
current.curve().clone(),
|
current.curve().clone(),
|
||||||
@ -23,7 +21,10 @@ impl Reverse for Cycle {
|
|||||||
)
|
)
|
||||||
.insert(core)
|
.insert(core)
|
||||||
.derive_from(current, core)
|
.derive_from(current, core)
|
||||||
.set_path(path, &mut core.layers.geometry)
|
.set_geometry(
|
||||||
|
core.layers.geometry.of_half_edge(current),
|
||||||
|
&mut core.layers.geometry,
|
||||||
|
)
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
@ -50,8 +50,8 @@ impl SplitEdge for Shell {
|
|||||||
core,
|
core,
|
||||||
)
|
)
|
||||||
.insert(core)
|
.insert(core)
|
||||||
.set_path(
|
.set_geometry(
|
||||||
core.layers.geometry.of_half_edge(&sibling_b).path,
|
core.layers.geometry.of_half_edge(&sibling_b),
|
||||||
&mut core.layers.geometry,
|
&mut core.layers.geometry,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -120,8 +120,8 @@ impl SplitFace for Shell {
|
|||||||
half_edge
|
half_edge
|
||||||
.update_start_vertex(|_, _| b.start_vertex().clone(), core)
|
.update_start_vertex(|_, _| b.start_vertex().clone(), core)
|
||||||
.insert(core)
|
.insert(core)
|
||||||
.set_path(
|
.set_geometry(
|
||||||
core.layers.geometry.of_half_edge(&half_edge).path,
|
core.layers.geometry.of_half_edge(&half_edge),
|
||||||
&mut core.layers.geometry,
|
&mut core.layers.geometry,
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
use fj_math::Point;
|
use fj_math::Point;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
geometry::HalfEdgeGeometry,
|
|
||||||
objects::{HalfEdge, Vertex},
|
objects::{HalfEdge, Vertex},
|
||||||
operations::{derive::DeriveFrom, insert::Insert},
|
operations::{derive::DeriveFrom, insert::Insert},
|
||||||
storage::Handle,
|
storage::Handle,
|
||||||
@ -60,15 +59,11 @@ impl SplitHalfEdge for Handle<HalfEdge> {
|
|||||||
|
|
||||||
core.layers.geometry.define_half_edge(
|
core.layers.geometry.define_half_edge(
|
||||||
a.clone(),
|
a.clone(),
|
||||||
HalfEdgeGeometry {
|
core.layers.geometry.of_half_edge(self),
|
||||||
path: core.layers.geometry.of_half_edge(self).path,
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
core.layers.geometry.define_half_edge(
|
core.layers.geometry.define_half_edge(
|
||||||
b.clone(),
|
b.clone(),
|
||||||
HalfEdgeGeometry {
|
core.layers.geometry.of_half_edge(self),
|
||||||
path: core.layers.geometry.of_half_edge(self).path,
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
|
|
||||||
[a, b]
|
[a, b]
|
||||||
|
@ -134,8 +134,8 @@ impl SweepHalfEdge for Handle<HalfEdge> {
|
|||||||
half_edge
|
half_edge
|
||||||
};
|
};
|
||||||
|
|
||||||
half_edge.insert(core).set_path(
|
half_edge.insert(core).set_geometry(
|
||||||
core.layers.geometry.of_half_edge(&line_segment).path,
|
core.layers.geometry.of_half_edge(&line_segment),
|
||||||
&mut core.layers.geometry,
|
&mut core.layers.geometry,
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
use fj_math::Transform;
|
use fj_math::Transform;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
geometry::HalfEdgeGeometry, objects::HalfEdge, operations::insert::Insert,
|
objects::HalfEdge, operations::insert::Insert, storage::Handle, Core,
|
||||||
storage::Handle, Core,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{TransformCache, TransformObject};
|
use super::{TransformCache, TransformObject};
|
||||||
@ -14,9 +13,6 @@ impl TransformObject for Handle<HalfEdge> {
|
|||||||
core: &mut Core,
|
core: &mut Core,
|
||||||
cache: &mut TransformCache,
|
cache: &mut TransformCache,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
// Don't need to transform the path, as that's defined in surface
|
|
||||||
// coordinates.
|
|
||||||
let path = core.layers.geometry.of_half_edge(self).path;
|
|
||||||
let boundary = self.boundary();
|
let boundary = self.boundary();
|
||||||
let curve = self
|
let curve = self
|
||||||
.curve()
|
.curve()
|
||||||
@ -30,9 +26,10 @@ impl TransformObject for Handle<HalfEdge> {
|
|||||||
let half_edge =
|
let half_edge =
|
||||||
HalfEdge::new(boundary, curve, start_vertex).insert(core);
|
HalfEdge::new(boundary, curve, start_vertex).insert(core);
|
||||||
|
|
||||||
core.layers
|
core.layers.geometry.define_half_edge(
|
||||||
.geometry
|
half_edge.clone(),
|
||||||
.define_half_edge(half_edge.clone(), HalfEdgeGeometry { path });
|
core.layers.geometry.of_half_edge(self),
|
||||||
|
);
|
||||||
|
|
||||||
half_edge
|
half_edge
|
||||||
}
|
}
|
||||||
|
@ -445,18 +445,20 @@ mod tests {
|
|||||||
cycle.update_half_edge(
|
cycle.update_half_edge(
|
||||||
cycle.half_edges().nth_circular(0),
|
cycle.half_edges().nth_circular(0),
|
||||||
|half_edge, core| {
|
|half_edge, core| {
|
||||||
|
let mut geometry = core
|
||||||
|
.layers
|
||||||
|
.geometry
|
||||||
|
.of_half_edge(half_edge);
|
||||||
|
geometry.path = geometry.path.reverse();
|
||||||
|
|
||||||
[HalfEdge::new(
|
[HalfEdge::new(
|
||||||
half_edge.boundary().reverse(),
|
half_edge.boundary().reverse(),
|
||||||
half_edge.curve().clone(),
|
half_edge.curve().clone(),
|
||||||
half_edge.start_vertex().clone(),
|
half_edge.start_vertex().clone(),
|
||||||
)
|
)
|
||||||
.insert(core)
|
.insert(core)
|
||||||
.set_path(
|
.set_geometry(
|
||||||
core.layers
|
geometry,
|
||||||
.geometry
|
|
||||||
.of_half_edge(half_edge)
|
|
||||||
.path
|
|
||||||
.reverse(),
|
|
||||||
&mut core.layers.geometry,
|
&mut core.layers.geometry,
|
||||||
)]
|
)]
|
||||||
},
|
},
|
||||||
@ -534,11 +536,10 @@ mod tests {
|
|||||||
core,
|
core,
|
||||||
)
|
)
|
||||||
.insert(core)
|
.insert(core)
|
||||||
.set_path(
|
.set_geometry(
|
||||||
core.layers
|
core.layers
|
||||||
.geometry
|
.geometry
|
||||||
.of_half_edge(half_edge)
|
.of_half_edge(half_edge),
|
||||||
.path,
|
|
||||||
&mut core.layers.geometry,
|
&mut core.layers.geometry,
|
||||||
)]
|
)]
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user