mirror of
https://github.com/hannobraun/Fornjot
synced 2025-01-11 18:57:01 +00:00
Merge pull request #2273 from hannobraun/geometry
Make minor cleanups in approximation code
This commit is contained in:
commit
192ca743f4
@ -29,8 +29,8 @@ impl Approx for (&Cycle, &SurfaceGeometry) {
|
||||
let half_edges = cycle
|
||||
.half_edges()
|
||||
.iter()
|
||||
.map(|edge| {
|
||||
(edge.deref(), surface)
|
||||
.map(|half_edge| {
|
||||
(half_edge.deref(), surface)
|
||||
.approx_with_cache(tolerance, cache, core)
|
||||
})
|
||||
.collect();
|
||||
|
@ -22,31 +22,41 @@ impl Approx for (&HalfEdge, &SurfaceGeometry) {
|
||||
cache: &mut Self::Cache,
|
||||
core: &mut Core,
|
||||
) -> Self::Approximation {
|
||||
let (edge, surface) = self;
|
||||
let (half_edge, surface) = self;
|
||||
let tolerance = tolerance.into();
|
||||
|
||||
let start_position_surface = edge.start_position();
|
||||
let start_position = match cache.start_position.get(edge.start_vertex())
|
||||
{
|
||||
Some(position) => position,
|
||||
None => {
|
||||
let position_global =
|
||||
surface.point_from_surface_coords(start_position_surface);
|
||||
cache
|
||||
.start_position
|
||||
.insert(edge.start_vertex().clone(), position_global)
|
||||
}
|
||||
};
|
||||
let start_position_surface = half_edge.start_position();
|
||||
let start_position =
|
||||
match cache.start_position.get(half_edge.start_vertex()) {
|
||||
Some(position) => position,
|
||||
None => {
|
||||
let position_global = surface
|
||||
.point_from_surface_coords(start_position_surface);
|
||||
cache.start_position.insert(
|
||||
half_edge.start_vertex().clone(),
|
||||
position_global,
|
||||
)
|
||||
}
|
||||
};
|
||||
|
||||
let first = ApproxPoint::new(start_position_surface, start_position);
|
||||
|
||||
let rest = {
|
||||
let approx = (edge.curve(), edge.path(), surface, edge.boundary())
|
||||
.approx_with_cache(tolerance, &mut cache.curve, core);
|
||||
let approx = (
|
||||
half_edge.curve(),
|
||||
half_edge.path(),
|
||||
surface,
|
||||
half_edge.boundary(),
|
||||
)
|
||||
.approx_with_cache(
|
||||
tolerance,
|
||||
&mut cache.curve,
|
||||
core,
|
||||
);
|
||||
|
||||
approx.points.into_iter().map(|point| {
|
||||
let point_surface =
|
||||
edge.path().point_from_path_coords(point.local_form);
|
||||
half_edge.path().point_from_path_coords(point.local_form);
|
||||
|
||||
ApproxPoint::new(point_surface, point.global_form)
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user