Add CurveGeom

This commit is contained in:
Hanno Braun 2024-03-25 12:48:56 +01:00
parent 6b065639d2
commit b94f3e46dd
2 changed files with 38 additions and 0 deletions

View File

@ -0,0 +1,36 @@
use crate::{storage::Handle, topology::Surface};
use super::SurfacePath;
/// The geometric definition of a curve
#[derive(Clone)]
pub struct CurveGeom {
/// # The redundant local definitions of the curve geometry
///
/// ## Implementation Note
///
/// Having multiple redundant definitions is undesirable. However, we can't
/// just use one global definition in 3D, as we need the local 2D
/// definitions to approximate and triangulate curves, and we currently
/// don't have the tools to project a global definition into a local
/// context.
///
/// Eventually, it should be possible to define the geometry of a curve
/// once, either locally or globally, and then convert that single
/// definition into (other) local contexts, as needed. There currently is no
/// issue to track that specifically, but there is the following issue,
/// which is a prerequisite for making the required tooling practical:
///
/// <https://github.com/hannobraun/fornjot/issues/2118>
pub definitions: Vec<LocalCurveGeom>,
}
/// The geometric definition of a curve in 2D surface coordinates
#[derive(Clone)]
pub struct LocalCurveGeom {
/// The path that defines the curve on its surface
pub path: SurfacePath,
/// The surface that the curve is defined on
pub surface: Handle<Surface>,
}

View File

@ -1,6 +1,7 @@
//! Types that are tied to objects, but aren't objects themselves
mod boundary;
mod curve;
mod geometry;
mod half_edge;
mod path;
@ -8,6 +9,7 @@ mod surface;
pub use self::{
boundary::{CurveBoundary, CurveBoundaryElement},
curve::{CurveGeom, LocalCurveGeom},
geometry::Geometry,
half_edge::HalfEdgeGeom,
path::{GlobalPath, SurfacePath},