fj_core/operations/reverse/
face.rs

1use 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}