Add infrastructure for defining curve geometry

This commit is contained in:
Hanno Braun 2024-03-25 12:55:46 +01:00
parent e6229c3f0d
commit 79ebba2009
2 changed files with 41 additions and 2 deletions

View File

@ -62,6 +62,14 @@ impl Geometry {
self_
}
pub(crate) fn define_curve_inner(
&mut self,
curve: Handle<Curve>,
geometry: CurveGeom,
) {
self.curve.insert(curve, geometry);
}
pub(crate) fn define_half_edge_inner(
&mut self,
half_edge: Handle<HalfEdge>,

View File

@ -1,14 +1,20 @@
//! Layer infrastructure for [`Geometry`]
use crate::{
geometry::{Geometry, HalfEdgeGeom, SurfaceGeom},
geometry::{CurveGeom, Geometry, HalfEdgeGeom, SurfaceGeom},
storage::Handle,
topology::{HalfEdge, Surface},
topology::{Curve, HalfEdge, Surface},
};
use super::{Command, Event, Layer};
impl Layer<Geometry> {
/// Define the geometry of the provided curve
pub fn define_curve(&mut self, curve: Handle<Curve>, geometry: CurveGeom) {
let mut events = Vec::new();
self.process(DefineCurve { curve, geometry }, &mut events);
}
/// Define the geometry of the provided half-edge
pub fn define_half_edge(
&mut self,
@ -41,6 +47,31 @@ impl Layer<Geometry> {
}
}
/// Define the geometry of a curve
pub struct DefineCurve {
curve: Handle<Curve>,
geometry: CurveGeom,
}
impl Command<Geometry> for DefineCurve {
type Result = ();
type Event = Self;
fn decide(
self,
_: &Geometry,
events: &mut Vec<Self::Event>,
) -> Self::Result {
events.push(self);
}
}
impl Event<Geometry> for DefineCurve {
fn evolve(&self, state: &mut Geometry) {
state.define_curve_inner(self.curve.clone(), self.geometry.clone());
}
}
/// Define the geometry of a half-edge
pub struct DefineHalfEdge {
half_edge: Handle<HalfEdge>,