fj_core/operations/reverse/
cycle.rs1use crate::{
2 geometry::HalfEdgeGeometry,
3 objects::{Cycle, HalfEdge},
4 operations::{derive::DeriveFrom, insert::Insert},
5 Core,
6};
7
8use super::{Reverse, ReverseCurveCoordinateSystems};
9
10impl Reverse for Cycle {
11 fn reverse(&self, core: &mut Core) -> Self {
12 let mut edges = self
13 .half_edges()
14 .pairs()
15 .map(|(current, next)| {
16 let half_edge = HalfEdge::new(
17 core.layers.geometry.of_half_edge(current).path,
18 current.boundary().reverse(),
19 current.curve().clone(),
20 next.start_vertex().clone(),
21 )
22 .insert(core)
23 .derive_from(current, core);
24
25 core.layers.geometry.define_half_edge(
26 half_edge.clone(),
27 HalfEdgeGeometry {
28 path: core.layers.geometry.of_half_edge(current).path,
29 },
30 );
31
32 half_edge
33 })
34 .collect::<Vec<_>>();
35
36 edges.reverse();
37
38 Cycle::new(edges)
39 }
40}
41
42impl ReverseCurveCoordinateSystems for Cycle {
43 fn reverse_curve_coordinate_systems(&self, core: &mut Core) -> Self {
44 let edges = self
45 .half_edges()
46 .iter()
47 .map(|edge| edge.reverse_curve_coordinate_systems(core));
48
49 Cycle::new(edges)
50 }
51}