fj_core/layers/
geometry.rs1use crate::{
4 geometry::{Geometry, HalfEdgeGeometry, SurfaceGeometry},
5 objects::{HalfEdge, Surface},
6 storage::Handle,
7};
8
9use super::{Command, Event, Layer};
10
11impl Layer<Geometry> {
12 pub fn define_half_edge(
14 &mut self,
15 half_edge: Handle<HalfEdge>,
16 geometry: HalfEdgeGeometry,
17 ) {
18 let mut events = Vec::new();
19 self.process(
20 DefineHalfEdge {
21 half_edge,
22 geometry,
23 },
24 &mut events,
25 );
26 }
27
28 pub fn define_surface(
30 &mut self,
31 surface: Handle<Surface>,
32 geometry: SurfaceGeometry,
33 ) {
34 let mut events = Vec::new();
35 self.process(DefineSurface { surface, geometry }, &mut events);
36 }
37}
38
39pub struct DefineHalfEdge {
41 half_edge: Handle<HalfEdge>,
42 geometry: HalfEdgeGeometry,
43}
44
45impl Command<Geometry> for DefineHalfEdge {
46 type Result = ();
47 type Event = Self;
48
49 fn decide(
50 self,
51 _: &Geometry,
52 events: &mut Vec<Self::Event>,
53 ) -> Self::Result {
54 events.push(self);
55 }
56}
57
58impl Event<Geometry> for DefineHalfEdge {
59 fn evolve(&self, state: &mut Geometry) {
60 state.define_half_edge_inner(self.half_edge.clone(), self.geometry);
61 }
62}
63
64pub struct DefineSurface {
66 surface: Handle<Surface>,
67 geometry: SurfaceGeometry,
68}
69
70impl Command<Geometry> for DefineSurface {
71 type Result = ();
72 type Event = Self;
73
74 fn decide(
75 self,
76 _: &Geometry,
77 events: &mut Vec<Self::Event>,
78 ) -> Self::Result {
79 events.push(self);
80 }
81}
82
83impl Event<Geometry> for DefineSurface {
84 fn evolve(&self, state: &mut Geometry) {
85 state.define_surface_inner(self.surface.clone(), self.geometry);
86 }
87}