fj_core/operations/reverse/
face.rs1use std::borrow::Borrow;
2
3use crate::{
4 objects::Face,
5 operations::{
6 build::Polygon,
7 derive::DeriveFrom,
8 insert::{Insert, IsInsertedNo, IsInsertedYes},
9 },
10 Core,
11};
12
13use super::{Reverse, ReverseCurveCoordinateSystems};
14
15impl Reverse for Face {
16 fn reverse(&self, core: &mut Core) -> Self {
17 let region = self
18 .region()
19 .reverse(core)
20 .insert(core)
21 .derive_from(self.region(), core);
22 Face::new(self.surface().clone(), region)
23 }
24}
25
26impl<const D: usize> Reverse for Polygon<D, IsInsertedNo> {
27 fn reverse(&self, core: &mut Core) -> Self {
28 let face = self.face.borrow().reverse(core);
29 self.replace_face(face)
30 }
31}
32
33impl<const D: usize> Reverse for Polygon<D, IsInsertedYes> {
34 fn reverse(&self, core: &mut Core) -> Self {
35 let face: &Face = self.face.borrow();
36 let face = face
37 .reverse(core)
38 .insert(core)
39 .derive_from(&self.face, core);
40
41 self.replace_face(face)
42 }
43}
44
45impl ReverseCurveCoordinateSystems for Face {
46 fn reverse_curve_coordinate_systems(&self, core: &mut Core) -> Self {
47 let region = self
48 .region()
49 .reverse_curve_coordinate_systems(core)
50 .insert(core)
51 .derive_from(self.region(), core);
52 Face::new(self.surface().clone(), region)
53 }
54}
55
56impl<const D: usize> ReverseCurveCoordinateSystems
57 for Polygon<D, IsInsertedNo>
58{
59 fn reverse_curve_coordinate_systems(&self, core: &mut Core) -> Self {
60 let face = self.face.borrow().reverse_curve_coordinate_systems(core);
61 self.replace_face(face)
62 }
63}
64
65impl<const D: usize> ReverseCurveCoordinateSystems
66 for Polygon<D, IsInsertedYes>
67{
68 fn reverse_curve_coordinate_systems(&self, core: &mut Core) -> Self {
69 let face: &Face = self.face.borrow();
70 let face = face
71 .reverse_curve_coordinate_systems(core)
72 .insert(core)
73 .derive_from(&self.face, core);
74
75 self.replace_face(face)
76 }
77}