mirror of
https://github.com/hannobraun/Fornjot
synced 2025-11-03 13:47:12 +00:00
Don't use CycleApprox in Polygon
`Polygon` doesn't know of or care about approximations. It cares about its polygonal chain. So this change makes sense from a conceptual perspective. It also makes sense from a practical perspective, as this enables some simplifications of `Polygon`, which should further improve its testability.
This commit is contained in:
parent
9c768bb39f
commit
6d3e738b65
@ -35,8 +35,13 @@ pub fn triangulate(
|
||||
})
|
||||
.collect();
|
||||
let face_as_polygon = Polygon::new(surface)
|
||||
.with_exterior(approx.exterior)
|
||||
.with_interiors(approx.interiors);
|
||||
.with_exterior(approx.exterior.points)
|
||||
.with_interiors(
|
||||
approx
|
||||
.interiors
|
||||
.into_iter()
|
||||
.map(|interior| interior.points),
|
||||
);
|
||||
|
||||
let mut triangles = delaunay(points);
|
||||
triangles.retain(|triangle| {
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
use std::collections::BTreeSet;
|
||||
|
||||
use fj_debug::{DebugInfo, TriangleEdgeCheck};
|
||||
use fj_math::{Point, Scalar, Segment};
|
||||
use fj_math::{Point, PolyChain, Scalar, Segment};
|
||||
use parry2d_f64::query::{Ray as Ray2, RayCast as _};
|
||||
use parry3d_f64::query::Ray as Ray3;
|
||||
|
||||
use crate::{algorithms::CycleApprox, geometry::Surface};
|
||||
use crate::geometry::Surface;
|
||||
|
||||
pub struct Polygon {
|
||||
surface: Surface,
|
||||
@ -22,13 +22,13 @@ impl Polygon {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn with_exterior(self, exterior: impl Into<CycleApprox>) -> Self {
|
||||
pub fn with_exterior(self, exterior: impl Into<PolyChain<3>>) -> Self {
|
||||
self.with_approx(exterior)
|
||||
}
|
||||
|
||||
pub fn with_interiors(
|
||||
mut self,
|
||||
interiors: impl IntoIterator<Item = impl Into<CycleApprox>>,
|
||||
interiors: impl IntoIterator<Item = impl Into<PolyChain<3>>>,
|
||||
) -> Self {
|
||||
for interior in interiors {
|
||||
self = self.with_approx(interior);
|
||||
@ -37,7 +37,7 @@ impl Polygon {
|
||||
self
|
||||
}
|
||||
|
||||
fn with_approx(mut self, approx: impl Into<CycleApprox>) -> Self {
|
||||
fn with_approx(mut self, approx: impl Into<PolyChain<3>>) -> Self {
|
||||
for segment in approx.into().segments() {
|
||||
let segment = segment.points().map(|point| {
|
||||
// Can't panic, unless the approximation wrongfully generates
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user