Merge pull request #1991 from hannobraun/boundary

Add `CurveBoundary::is_normalized`, simplify `CurveBoundary::normalize`
This commit is contained in:
Hanno Braun 2023-08-11 13:07:27 +02:00 committed by GitHub
commit 7681261f03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 14 deletions

View File

@ -28,20 +28,26 @@ impl<T: CurveBoundaryElement> CurveBoundary<T> {
Self { inner: [b, a] }
}
/// Indicate whether the boundary is normalized
///
/// If the boundary is normalized, its bounding elements are in a defined
/// order, and calling `normalize` will return an identical instance.
pub fn is_normalized(&self) -> bool {
let [a, b] = &self.inner;
a <= b
}
/// Normalize the boundary
///
/// Returns a new instance of this struct, which has the bounding elements
/// in a defined order, alongside a boolean that indicates whether the new
/// instance is different from the original one.
///
/// This can be used to compare a boundary while disregarding its direction.
/// in a defined order. This can be used to compare boundaries while
/// disregarding their direction.
#[must_use]
pub fn normalize(self) -> (Self, bool) {
let [a, b] = &self.inner;
if a > b {
(self.reverse(), true)
pub fn normalize(self) -> Self {
if self.is_normalized() {
self
} else {
(self, false)
self.reverse()
}
}
}

View File

@ -235,7 +235,6 @@ impl ShellValidationError {
.bounding_vertices_of_edge(edge)
.expect("Expected edge to be part of shell")
.normalize()
.0
};
bounding_vertices_of(edge_a)
@ -315,8 +314,7 @@ impl ShellValidationError {
.expect(
"Cycle should provide bounds of its own half-edge",
)
.normalize()
.0;
.normalize();
let edge = (curve, bounding_vertices);
@ -396,8 +394,7 @@ impl ShellValidationError {
.expect(
"Just got edge from this cycle; must be part of it",
)
.normalize()
.0;
.normalize();
edges_by_coincidence
.entry((curve, boundary))