diff --git a/fj-kernel/src/algorithms/triangulation/mod.rs b/fj-kernel/src/algorithms/triangulation/mod.rs index bacb48f01..611380552 100644 --- a/fj-kernel/src/algorithms/triangulation/mod.rs +++ b/fj-kernel/src/algorithms/triangulation/mod.rs @@ -35,13 +35,23 @@ pub fn triangulate( }) .collect(); let face_as_polygon = Polygon::new(surface) - .with_exterior(approx.exterior.points) - .with_interiors( - approx - .interiors - .into_iter() - .map(|interior| interior.points), - ); + .with_exterior(approx.exterior.points.into_iter().map( + |point| { + // Can't panic, unless the approximation wrongfully + // generates points that are not in the surface. + surface.point_model_to_surface(point).native() + }, + )) + .with_interiors(approx.interiors.into_iter().map( + |interior| { + interior.points.into_iter().map(|point| { + // Can't panic, unless the approximation + // wrongfully generates points that are not in + // the surface. + surface.point_model_to_surface(point).native() + }) + }, + )); let mut triangles = delaunay(points); triangles.retain(|triangle| { diff --git a/fj-kernel/src/algorithms/triangulation/polygon.rs b/fj-kernel/src/algorithms/triangulation/polygon.rs index c86ed3f15..7ee76fa53 100644 --- a/fj-kernel/src/algorithms/triangulation/polygon.rs +++ b/fj-kernel/src/algorithms/triangulation/polygon.rs @@ -22,13 +22,13 @@ impl Polygon { } } - pub fn with_exterior(self, exterior: impl Into>) -> Self { + pub fn with_exterior(self, exterior: impl Into>) -> Self { self.with_approx(exterior) } pub fn with_interiors( mut self, - interiors: impl IntoIterator>>, + interiors: impl IntoIterator>>, ) -> Self { for interior in interiors { self = self.with_approx(interior); @@ -37,18 +37,14 @@ impl Polygon { self } - fn with_approx(mut self, approx: impl Into>) -> Self { + fn with_approx(mut self, approx: impl Into>) -> Self { for segment in approx.into().segments() { let segment = segment.points().map(|point| { - // Can't panic, unless the approximation wrongfully generates - // points that are not in the surface. - let point = self.surface.point_model_to_surface(point); - - if point.native() > self.max { - self.max = point.native(); + if point > self.max { + self.max = point; } - point.native() + point }); let edge = Segment::from(segment);