Skip to content

Commit

Permalink
Merge pull request #2273 from hannobraun/geometry
Browse files Browse the repository at this point in the history
Make minor cleanups in approximation code
  • Loading branch information
hannobraun authored Mar 18, 2024
2 parents 9f817d9 + 4d1c0c3 commit 192ca74
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 18 deletions.
4 changes: 2 additions & 2 deletions crates/fj-core/src/algorithms/approx/cycle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
42 changes: 26 additions & 16 deletions crates/fj-core/src/algorithms/approx/edge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
})
Expand Down

0 comments on commit 192ca74

Please sign in to comment.