mirror of
https://github.com/hannobraun/Fornjot
synced 2025-05-05 18:38:28 +00:00
Move start_position
to HalfEdgeGeometry
This commit is contained in:
parent
bafd117b1c
commit
bc6a6a2763
@ -27,7 +27,11 @@ impl Approx for (&Handle<HalfEdge>, &SurfaceGeometry) {
|
|||||||
let (half_edge, surface) = self;
|
let (half_edge, surface) = self;
|
||||||
let tolerance = tolerance.into();
|
let tolerance = tolerance.into();
|
||||||
|
|
||||||
let start_position_surface = half_edge.start_position();
|
let start_position_surface = core
|
||||||
|
.layers
|
||||||
|
.geometry
|
||||||
|
.of_half_edge(half_edge)
|
||||||
|
.start_position(half_edge.boundary());
|
||||||
let start_position =
|
let start_position =
|
||||||
match cache.start_position.get(half_edge.start_vertex()) {
|
match cache.start_position.get(half_edge.start_vertex()) {
|
||||||
Some(position) => position,
|
Some(position) => position,
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
use super::SurfacePath;
|
use fj_math::Point;
|
||||||
|
|
||||||
|
use super::{CurveBoundary, SurfacePath};
|
||||||
|
|
||||||
/// The geometry of a half-edge
|
/// The geometry of a half-edge
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
@ -30,3 +32,18 @@ pub struct HalfEdgeGeometry {
|
|||||||
/// hopefully, temporary.
|
/// hopefully, temporary.
|
||||||
pub path: SurfacePath,
|
pub path: SurfacePath,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl HalfEdgeGeometry {
|
||||||
|
/// Compute the surface position where the half-edge starts
|
||||||
|
pub fn start_position(
|
||||||
|
&self,
|
||||||
|
boundary: CurveBoundary<Point<1>>,
|
||||||
|
) -> Point<2> {
|
||||||
|
// Computing the surface position from the curve position is fine.
|
||||||
|
// `HalfEdge` "owns" its start position. There is no competing code that
|
||||||
|
// could compute the surface position from slightly different data.
|
||||||
|
|
||||||
|
let [start, _] = boundary.inner;
|
||||||
|
self.path.point_from_path_coords(start)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -65,7 +65,11 @@ impl Cycle {
|
|||||||
let mut sum = Scalar::ZERO;
|
let mut sum = Scalar::ZERO;
|
||||||
|
|
||||||
for (a, b) in self.half_edges().pairs() {
|
for (a, b) in self.half_edges().pairs() {
|
||||||
let [a, b] = [a, b].map(|half_edge| half_edge.start_position());
|
let [a, b] = [a, b].map(|half_edge| {
|
||||||
|
geometry
|
||||||
|
.of_half_edge(half_edge)
|
||||||
|
.start_position(half_edge.boundary())
|
||||||
|
});
|
||||||
|
|
||||||
sum += (b.u - a.u) * (b.v + a.v);
|
sum += (b.u - a.u) * (b.v + a.v);
|
||||||
}
|
}
|
||||||
|
@ -76,14 +76,4 @@ impl HalfEdge {
|
|||||||
pub fn start_vertex(&self) -> &Handle<Vertex> {
|
pub fn start_vertex(&self) -> &Handle<Vertex> {
|
||||||
&self.start_vertex
|
&self.start_vertex
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Compute the surface position where the half-edge starts
|
|
||||||
pub fn start_position(&self) -> Point<2> {
|
|
||||||
// Computing the surface position from the curve position is fine.
|
|
||||||
// `HalfEdge` "owns" its start position. There is no competing code that
|
|
||||||
// could compute the surface position from slightly different data.
|
|
||||||
|
|
||||||
let [start, _] = self.boundary.inner;
|
|
||||||
self.path.point_from_path_coords(start)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -104,7 +104,16 @@ impl SplitFace for Shell {
|
|||||||
// Build the edge that's going to divide the new faces.
|
// Build the edge that's going to divide the new faces.
|
||||||
let dividing_half_edge_a_to_d = {
|
let dividing_half_edge_a_to_d = {
|
||||||
let half_edge = HalfEdge::line_segment(
|
let half_edge = HalfEdge::line_segment(
|
||||||
[b.start_position(), d.start_position()],
|
[
|
||||||
|
core.layers
|
||||||
|
.geometry
|
||||||
|
.of_half_edge(&b)
|
||||||
|
.start_position(b.boundary()),
|
||||||
|
core.layers
|
||||||
|
.geometry
|
||||||
|
.of_half_edge(&d)
|
||||||
|
.start_position(d.boundary()),
|
||||||
|
],
|
||||||
None,
|
None,
|
||||||
core,
|
core,
|
||||||
);
|
);
|
||||||
|
@ -92,7 +92,9 @@ impl SolidValidationError {
|
|||||||
})
|
})
|
||||||
.map(|(h, s)| {
|
.map(|(h, s)| {
|
||||||
(
|
(
|
||||||
s.point_from_surface_coords(h.start_position()),
|
s.point_from_surface_coords(
|
||||||
|
geometry.of_half_edge(&h).start_position(h.boundary()),
|
||||||
|
),
|
||||||
h.start_vertex().clone(),
|
h.start_vertex().clone(),
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
@ -52,7 +52,9 @@ impl ValidationCheck<Cycle> for AdjacentHalfEdgesNotConnected {
|
|||||||
.path
|
.path
|
||||||
.point_from_path_coords(end)
|
.point_from_path_coords(end)
|
||||||
};
|
};
|
||||||
let start_pos_of_second_half_edge = second.start_position();
|
let start_pos_of_second_half_edge = geometry
|
||||||
|
.of_half_edge(second)
|
||||||
|
.start_position(second.boundary());
|
||||||
|
|
||||||
let distance_between_positions = (end_pos_of_first_half_edge
|
let distance_between_positions = (end_pos_of_first_half_edge
|
||||||
- start_pos_of_second_half_edge)
|
- start_pos_of_second_half_edge)
|
||||||
|
Loading…
Reference in New Issue
Block a user