Skip to content

Commit

Permalink
Merge pull request #1991 from hannobraun/boundary
Browse files Browse the repository at this point in the history
Add `CurveBoundary::is_normalized`, simplify `CurveBoundary::normalize`
  • Loading branch information
hannobraun authored Aug 11, 2023
2 parents 5e44870 + 3fee65d commit 7681261
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 14 deletions.
24 changes: 15 additions & 9 deletions crates/fj-core/src/geometry/boundary.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
}
}
Expand Down
7 changes: 2 additions & 5 deletions crates/fj-core/src/validate/shell.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -315,8 +314,7 @@ impl ShellValidationError {
.expect(
"Cycle should provide bounds of its own half-edge",
)
.normalize()
.0;
.normalize();

let edge = (curve, bounding_vertices);

Expand Down Expand Up @@ -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))
Expand Down

0 comments on commit 7681261

Please sign in to comment.