mirror of
https://github.com/hannobraun/Fornjot
synced 2025-05-04 09:58:27 +00:00
Fix API for defining curve geometry
The previous version would not allow defining local curve geometry for multiple surfaces.
This commit is contained in:
parent
635fc51645
commit
128a15df53
@ -7,7 +7,7 @@ use crate::{
|
||||
topology::{Curve, HalfEdge, Surface, Topology},
|
||||
};
|
||||
|
||||
use super::{CurveGeom, GlobalPath, HalfEdgeGeom, SurfaceGeom};
|
||||
use super::{CurveGeom, GlobalPath, HalfEdgeGeom, LocalCurveGeom, SurfaceGeom};
|
||||
|
||||
/// Geometric data that is associated with topological objects
|
||||
pub struct Geometry {
|
||||
@ -65,9 +65,14 @@ impl Geometry {
|
||||
pub(crate) fn define_curve_inner(
|
||||
&mut self,
|
||||
curve: Handle<Curve>,
|
||||
geometry: CurveGeom,
|
||||
surface: Handle<Surface>,
|
||||
geometry: LocalCurveGeom,
|
||||
) {
|
||||
self.curve.insert(curve, geometry);
|
||||
self.curve
|
||||
.entry(curve)
|
||||
.or_default()
|
||||
.definitions
|
||||
.insert(surface, geometry);
|
||||
}
|
||||
|
||||
pub(crate) fn define_half_edge_inner(
|
||||
|
@ -1,7 +1,7 @@
|
||||
//! Layer infrastructure for [`Geometry`]
|
||||
|
||||
use crate::{
|
||||
geometry::{CurveGeom, Geometry, HalfEdgeGeom, SurfaceGeom},
|
||||
geometry::{Geometry, HalfEdgeGeom, LocalCurveGeom, SurfaceGeom},
|
||||
storage::Handle,
|
||||
topology::{Curve, HalfEdge, Surface},
|
||||
};
|
||||
@ -10,9 +10,21 @@ 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) {
|
||||
pub fn define_curve(
|
||||
&mut self,
|
||||
curve: Handle<Curve>,
|
||||
surface: Handle<Surface>,
|
||||
geometry: LocalCurveGeom,
|
||||
) {
|
||||
let mut events = Vec::new();
|
||||
self.process(DefineCurve { curve, geometry }, &mut events);
|
||||
self.process(
|
||||
DefineCurve {
|
||||
curve,
|
||||
surface,
|
||||
geometry,
|
||||
},
|
||||
&mut events,
|
||||
);
|
||||
}
|
||||
|
||||
/// Define the geometry of the provided half-edge
|
||||
@ -50,7 +62,8 @@ impl Layer<Geometry> {
|
||||
/// Define the geometry of a curve
|
||||
pub struct DefineCurve {
|
||||
curve: Handle<Curve>,
|
||||
geometry: CurveGeom,
|
||||
surface: Handle<Surface>,
|
||||
geometry: LocalCurveGeom,
|
||||
}
|
||||
|
||||
impl Command<Geometry> for DefineCurve {
|
||||
@ -68,7 +81,11 @@ impl Command<Geometry> for DefineCurve {
|
||||
|
||||
impl Event<Geometry> for DefineCurve {
|
||||
fn evolve(&self, state: &mut Geometry) {
|
||||
state.define_curve_inner(self.curve.clone(), self.geometry.clone());
|
||||
state.define_curve_inner(
|
||||
self.curve.clone(),
|
||||
self.surface.clone(),
|
||||
self.geometry.clone(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@ use fj_interop::ext::ArrayExt;
|
||||
use fj_math::{Arc, Point, Scalar};
|
||||
|
||||
use crate::{
|
||||
geometry::{CurveGeom, HalfEdgeGeom, SurfacePath},
|
||||
geometry::{HalfEdgeGeom, LocalCurveGeom, SurfacePath},
|
||||
operations::{geometry::UpdateHalfEdgeGeometry, insert::Insert},
|
||||
storage::Handle,
|
||||
topology::{Curve, HalfEdge, Surface, Vertex},
|
||||
@ -65,7 +65,8 @@ pub trait BuildHalfEdge {
|
||||
|
||||
core.layers.geometry.define_curve(
|
||||
half_edge.curve().clone(),
|
||||
CurveGeom::from_path_and_surface(path, surface),
|
||||
surface,
|
||||
LocalCurveGeom { path },
|
||||
);
|
||||
core.layers.geometry.define_half_edge(
|
||||
half_edge.clone(),
|
||||
@ -93,7 +94,8 @@ pub trait BuildHalfEdge {
|
||||
|
||||
core.layers.geometry.define_curve(
|
||||
half_edge.curve().clone(),
|
||||
CurveGeom::from_path_and_surface(path, surface),
|
||||
surface,
|
||||
LocalCurveGeom { path },
|
||||
);
|
||||
core.layers.geometry.define_half_edge(
|
||||
half_edge.clone(),
|
||||
@ -123,7 +125,8 @@ pub trait BuildHalfEdge {
|
||||
|
||||
core.layers.geometry.define_curve(
|
||||
half_edge.curve().clone(),
|
||||
CurveGeom::from_path_and_surface(path, surface),
|
||||
surface,
|
||||
LocalCurveGeom { path },
|
||||
);
|
||||
core.layers.geometry.define_half_edge(
|
||||
half_edge.clone(),
|
||||
|
@ -1,5 +1,5 @@
|
||||
use crate::{
|
||||
geometry::{CurveGeom, Geometry, SurfacePath},
|
||||
geometry::{Geometry, LocalCurveGeom, SurfacePath},
|
||||
layers::Layer,
|
||||
storage::Handle,
|
||||
topology::{Curve, Surface},
|
||||
@ -23,10 +23,7 @@ impl UpdateCurveGeometry for Handle<Curve> {
|
||||
surface: Handle<Surface>,
|
||||
geometry: &mut Layer<Geometry>,
|
||||
) -> Self {
|
||||
geometry.define_curve(
|
||||
self.clone(),
|
||||
CurveGeom::from_path_and_surface(path, surface),
|
||||
);
|
||||
geometry.define_curve(self.clone(), surface, LocalCurveGeom { path });
|
||||
|
||||
self
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user