use crate::{
geometry::{Geometry, HalfEdgeGeometry, SurfaceGeometry},
objects::{HalfEdge, Surface},
storage::Handle,
};
use super::{Command, Event, Layer};
impl Layer<Geometry> {
pub fn define_half_edge(
&mut self,
half_edge: Handle<HalfEdge>,
geometry: HalfEdgeGeometry,
) {
let mut events = Vec::new();
self.process(
DefineHalfEdge {
half_edge,
geometry,
},
&mut events,
);
}
pub fn define_surface(
&mut self,
surface: Handle<Surface>,
geometry: SurfaceGeometry,
) {
let mut events = Vec::new();
self.process(DefineSurface { surface, geometry }, &mut events);
}
}
pub struct DefineHalfEdge {
half_edge: Handle<HalfEdge>,
geometry: HalfEdgeGeometry,
}
impl Command<Geometry> for DefineHalfEdge {
type Result = ();
type Event = Self;
fn decide(
self,
_: &Geometry,
events: &mut Vec<Self::Event>,
) -> Self::Result {
events.push(self);
}
}
impl Event<Geometry> for DefineHalfEdge {
fn evolve(&self, state: &mut Geometry) {
state.define_half_edge_inner(self.half_edge.clone(), self.geometry);
}
}
pub struct DefineSurface {
surface: Handle<Surface>,
geometry: SurfaceGeometry,
}
impl Command<Geometry> for DefineSurface {
type Result = ();
type Event = Self;
fn decide(
self,
_: &Geometry,
events: &mut Vec<Self::Event>,
) -> Self::Result {
events.push(self);
}
}
impl Event<Geometry> for DefineSurface {
fn evolve(&self, state: &mut Geometry) {
state.define_surface_inner(self.surface.clone(), self.geometry);
}
}