mirror of
https://github.com/hannobraun/Fornjot
synced 2025-02-15 11:45:54 +00:00
Add CurveBoundary::subset
This commit is contained in:
parent
b9aef596a1
commit
f98436f46d
@ -78,17 +78,9 @@ impl CurveApproxSegment {
|
|||||||
"Expected subset to be defined by normalized boundary."
|
"Expected subset to be defined by normalized boundary."
|
||||||
);
|
);
|
||||||
|
|
||||||
let [min, max] = boundary.inner;
|
self.boundary = self.boundary.subset(boundary);
|
||||||
|
|
||||||
self.boundary.inner = {
|
|
||||||
let [self_min, self_max] = self.boundary.inner;
|
|
||||||
|
|
||||||
let min = cmp::max(self_min, min);
|
|
||||||
let max = cmp::min(self_max, max);
|
|
||||||
|
|
||||||
[min, max]
|
|
||||||
};
|
|
||||||
|
|
||||||
|
let [min, max] = self.boundary.inner;
|
||||||
self.points
|
self.points
|
||||||
.retain(|point| point.local_form > min && point.local_form < max);
|
.retain(|point| point.local_form > min && point.local_form < max);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use std::{
|
use std::{
|
||||||
cmp::Ordering,
|
cmp::{self, Ordering},
|
||||||
hash::{Hash, Hasher},
|
hash::{Hash, Hasher},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -75,6 +75,23 @@ impl CurveBoundary<Point<1>> {
|
|||||||
|
|
||||||
a_low <= b_high && a_high >= b_low
|
a_low <= b_high && a_high >= b_low
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create the subset of this boundary and another
|
||||||
|
///
|
||||||
|
/// The result will be normalized.
|
||||||
|
#[must_use]
|
||||||
|
pub fn subset(self, other: Self) -> Self {
|
||||||
|
let self_ = self.normalize();
|
||||||
|
let other = other.normalize();
|
||||||
|
|
||||||
|
let [self_min, self_max] = self_.inner;
|
||||||
|
let [other_min, other_max] = other.inner;
|
||||||
|
|
||||||
|
let min = cmp::max(self_min, other_min);
|
||||||
|
let max = cmp::min(self_max, other_max);
|
||||||
|
|
||||||
|
Self { inner: [min, max] }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<S, T: CurveBoundaryElement> From<[S; 2]> for CurveBoundary<T>
|
impl<S, T: CurveBoundaryElement> From<[S; 2]> for CurveBoundary<T>
|
||||||
|
Loading…
Reference in New Issue
Block a user