mirror of
https://github.com/hannobraun/Fornjot
synced 2025-05-07 19:38:29 +00:00
Merge pull request #2419 from hannobraun/geom
Remove all code dealing with half-edge geometry
This commit is contained in:
commit
44955d9b0a
@ -4,18 +4,17 @@ use fj_math::Vector;
|
||||
|
||||
use crate::{
|
||||
storage::Handle,
|
||||
topology::{Curve, HalfEdge, Surface, Topology, Vertex},
|
||||
topology::{Curve, Surface, Topology, Vertex},
|
||||
};
|
||||
|
||||
use super::{
|
||||
vertex::LocalVertexGeom, CurveGeom, GlobalPath, HalfEdgeGeom,
|
||||
LocalCurveGeom, SurfaceGeom, VertexGeom,
|
||||
vertex::LocalVertexGeom, CurveGeom, GlobalPath, LocalCurveGeom,
|
||||
SurfaceGeom, VertexGeom,
|
||||
};
|
||||
|
||||
/// Geometric data that is associated with topological objects
|
||||
pub struct Geometry {
|
||||
curve: BTreeMap<Handle<Curve>, CurveGeom>,
|
||||
half_edge: BTreeMap<Handle<HalfEdge>, HalfEdgeGeom>,
|
||||
surface: BTreeMap<Handle<Surface>, SurfaceGeom>,
|
||||
vertex: BTreeMap<Handle<Vertex>, VertexGeom>,
|
||||
|
||||
@ -31,7 +30,6 @@ impl Geometry {
|
||||
pub fn new(topology: &Topology) -> Self {
|
||||
let mut self_ = Self {
|
||||
curve: BTreeMap::new(),
|
||||
half_edge: BTreeMap::new(),
|
||||
surface: BTreeMap::new(),
|
||||
vertex: BTreeMap::new(),
|
||||
|
||||
@ -80,14 +78,6 @@ impl Geometry {
|
||||
.insert(surface, geometry);
|
||||
}
|
||||
|
||||
pub(crate) fn define_half_edge_inner(
|
||||
&mut self,
|
||||
half_edge: Handle<HalfEdge>,
|
||||
geometry: HalfEdgeGeom,
|
||||
) {
|
||||
self.half_edge.insert(half_edge, geometry);
|
||||
}
|
||||
|
||||
pub(crate) fn define_surface_inner(
|
||||
&mut self,
|
||||
surface: Handle<Surface>,
|
||||
@ -126,17 +116,6 @@ impl Geometry {
|
||||
self.curve.get(curve)
|
||||
}
|
||||
|
||||
/// # Access the geometry of the provided half-edge
|
||||
///
|
||||
/// ## Panics
|
||||
///
|
||||
/// Panics, if the geometry of the half-edge is not defined.
|
||||
pub fn of_half_edge(&self, half_edge: &Handle<HalfEdge>) -> &HalfEdgeGeom {
|
||||
self.half_edge
|
||||
.get(half_edge)
|
||||
.expect("Expected geometry of half-edge to be defined")
|
||||
}
|
||||
|
||||
/// # Access the geometry of the provided surface
|
||||
///
|
||||
/// ## Panics
|
||||
|
@ -1,31 +0,0 @@
|
||||
use fj_math::Point;
|
||||
|
||||
use super::{CurveBoundary, SurfacePath};
|
||||
|
||||
/// The geometry of a half-edge
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
pub struct HalfEdgeGeom {
|
||||
/// # The boundary of the half-edge on its curve
|
||||
pub boundary: CurveBoundary<Point<1>>,
|
||||
}
|
||||
|
||||
impl HalfEdgeGeom {
|
||||
/// Update the boundary
|
||||
pub fn with_boundary(
|
||||
mut self,
|
||||
boundary: impl Into<CurveBoundary<Point<1>>>,
|
||||
) -> Self {
|
||||
self.boundary = boundary.into();
|
||||
self
|
||||
}
|
||||
|
||||
/// Compute the surface position where the half-edge starts
|
||||
pub fn start_position(&self, path: &SurfacePath) -> Point<2> {
|
||||
// Computing the surface position from the curve position is fine.
|
||||
// `HalfEdge` "owns" its start position. There is no competing code that
|
||||
// could compute the surface position from slightly different data.
|
||||
|
||||
let [start, _] = self.boundary.inner;
|
||||
path.point_from_path_coords(start)
|
||||
}
|
||||
}
|
@ -1,9 +1,8 @@
|
||||
//! Types that are tied to objects, but aren't objects themselves
|
||||
//! Geometry that is applied to the topological object graph
|
||||
|
||||
mod boundary;
|
||||
mod curve;
|
||||
mod geometry;
|
||||
mod half_edge;
|
||||
mod path;
|
||||
mod surface;
|
||||
mod vertex;
|
||||
@ -12,7 +11,6 @@ pub use self::{
|
||||
boundary::{CurveBoundary, CurveBoundaryElement},
|
||||
curve::{CurveGeom, LocalCurveGeom},
|
||||
geometry::Geometry,
|
||||
half_edge::HalfEdgeGeom,
|
||||
path::{GlobalPath, SurfacePath},
|
||||
surface::SurfaceGeom,
|
||||
vertex::{LocalVertexGeom, VertexGeom},
|
||||
|
@ -1,11 +1,9 @@
|
||||
//! Layer infrastructure for [`Geometry`]
|
||||
|
||||
use crate::{
|
||||
geometry::{
|
||||
Geometry, HalfEdgeGeom, LocalCurveGeom, LocalVertexGeom, SurfaceGeom,
|
||||
},
|
||||
geometry::{Geometry, LocalCurveGeom, LocalVertexGeom, SurfaceGeom},
|
||||
storage::Handle,
|
||||
topology::{Curve, HalfEdge, Surface, Vertex},
|
||||
topology::{Curve, Surface, Vertex},
|
||||
};
|
||||
|
||||
use super::{Command, Event, Layer};
|
||||
@ -29,22 +27,6 @@ impl Layer<Geometry> {
|
||||
);
|
||||
}
|
||||
|
||||
/// Define the geometry of the provided half-edge
|
||||
pub fn define_half_edge(
|
||||
&mut self,
|
||||
half_edge: Handle<HalfEdge>,
|
||||
geometry: HalfEdgeGeom,
|
||||
) {
|
||||
let mut events = Vec::new();
|
||||
self.process(
|
||||
DefineHalfEdge {
|
||||
half_edge,
|
||||
geometry,
|
||||
},
|
||||
&mut events,
|
||||
);
|
||||
}
|
||||
|
||||
/// # Define the geometry of the provided surface
|
||||
///
|
||||
/// ## Panics
|
||||
@ -109,31 +91,6 @@ impl Event<Geometry> for DefineCurve {
|
||||
}
|
||||
}
|
||||
|
||||
/// Define the geometry of a half-edge
|
||||
pub struct DefineHalfEdge {
|
||||
half_edge: Handle<HalfEdge>,
|
||||
geometry: HalfEdgeGeom,
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// Define the geometry of a surface
|
||||
pub struct DefineSurface {
|
||||
surface: Handle<Surface>,
|
||||
|
@ -1,11 +1,8 @@
|
||||
use fj_math::{Arc, Point, Scalar};
|
||||
|
||||
use crate::{
|
||||
geometry::{CurveBoundary, HalfEdgeGeom, LocalCurveGeom, SurfacePath},
|
||||
operations::{
|
||||
geometry::{UpdateCurveGeometry, UpdateHalfEdgeGeometry},
|
||||
insert::Insert,
|
||||
},
|
||||
geometry::{CurveBoundary, LocalCurveGeom, SurfacePath},
|
||||
operations::{geometry::UpdateCurveGeometry, insert::Insert},
|
||||
storage::Handle,
|
||||
topology::{Curve, HalfEdge, Surface, Vertex},
|
||||
Core,
|
||||
@ -31,12 +28,7 @@ pub trait BuildHalfEdge {
|
||||
start_vertex: Handle<Vertex>,
|
||||
core: &mut Core,
|
||||
) -> Handle<HalfEdge> {
|
||||
let mut geometry = *core.layers.geometry.of_half_edge(sibling);
|
||||
geometry.boundary = geometry.boundary.reverse();
|
||||
|
||||
HalfEdge::new(sibling.curve().clone(), start_vertex)
|
||||
.insert(core)
|
||||
.set_geometry(geometry, &mut core.layers.geometry)
|
||||
HalfEdge::new(sibling.curve().clone(), start_vertex).insert(core)
|
||||
}
|
||||
|
||||
/// Create an arc
|
||||
@ -72,9 +64,6 @@ pub trait BuildHalfEdge {
|
||||
surface,
|
||||
LocalCurveGeom { path },
|
||||
);
|
||||
core.layers
|
||||
.geometry
|
||||
.define_half_edge(half_edge.clone(), HalfEdgeGeom { boundary });
|
||||
|
||||
(half_edge, boundary)
|
||||
}
|
||||
@ -96,10 +85,6 @@ pub trait BuildHalfEdge {
|
||||
&mut core.layers.geometry,
|
||||
);
|
||||
|
||||
core.layers
|
||||
.geometry
|
||||
.define_half_edge(half_edge.clone(), HalfEdgeGeom { boundary });
|
||||
|
||||
(half_edge, boundary)
|
||||
}
|
||||
}
|
||||
|
@ -4,10 +4,10 @@ use fj_interop::ext::ArrayExt;
|
||||
use fj_math::Point;
|
||||
|
||||
use crate::{
|
||||
geometry::{CurveBoundary, HalfEdgeGeom, LocalVertexGeom},
|
||||
geometry::{CurveBoundary, LocalVertexGeom},
|
||||
operations::{
|
||||
build::{BuildFace, BuildHalfEdge, BuildSurface, Polygon},
|
||||
geometry::{UpdateCurveGeometry, UpdateHalfEdgeGeometry},
|
||||
geometry::UpdateCurveGeometry,
|
||||
insert::{Insert, IsInserted, IsInsertedNo, IsInsertedYes},
|
||||
join::JoinCycle,
|
||||
reverse::ReverseCurveCoordinateSystems,
|
||||
@ -123,10 +123,6 @@ pub trait BuildShell {
|
||||
)
|
||||
.update_curve(|_, _| curve.clone(), core)
|
||||
.insert(core)
|
||||
.set_geometry(
|
||||
HalfEdgeGeom { boundary },
|
||||
&mut core.layers.geometry,
|
||||
)
|
||||
},
|
||||
)
|
||||
};
|
||||
|
@ -1,27 +0,0 @@
|
||||
use crate::{
|
||||
geometry::{Geometry, HalfEdgeGeom},
|
||||
layers::Layer,
|
||||
storage::Handle,
|
||||
topology::HalfEdge,
|
||||
};
|
||||
|
||||
/// Update the geometry of a [`HalfEdge`]
|
||||
pub trait UpdateHalfEdgeGeometry {
|
||||
/// Set the path of the half-edge
|
||||
fn set_geometry(
|
||||
self,
|
||||
geometry: HalfEdgeGeom,
|
||||
layer: &mut Layer<Geometry>,
|
||||
) -> Self;
|
||||
}
|
||||
|
||||
impl UpdateHalfEdgeGeometry for Handle<HalfEdge> {
|
||||
fn set_geometry(
|
||||
self,
|
||||
geometry: HalfEdgeGeom,
|
||||
layer: &mut Layer<Geometry>,
|
||||
) -> Self {
|
||||
layer.define_half_edge(self.clone(), geometry);
|
||||
self
|
||||
}
|
||||
}
|
@ -1,6 +1,5 @@
|
||||
//! Operations to update the geometry of objects
|
||||
|
||||
mod curve;
|
||||
mod half_edge;
|
||||
|
||||
pub use self::{curve::UpdateCurveGeometry, half_edge::UpdateHalfEdgeGeometry};
|
||||
pub use self::curve::UpdateCurveGeometry;
|
||||
|
@ -3,10 +3,9 @@ use std::ops::RangeInclusive;
|
||||
use itertools::Itertools;
|
||||
|
||||
use crate::{
|
||||
geometry::{HalfEdgeGeom, LocalCurveGeom},
|
||||
geometry::LocalCurveGeom,
|
||||
operations::{
|
||||
build::BuildHalfEdge,
|
||||
geometry::UpdateHalfEdgeGeometry,
|
||||
insert::Insert,
|
||||
update::{UpdateCycle, UpdateHalfEdge},
|
||||
},
|
||||
@ -34,9 +33,7 @@ pub trait JoinCycle {
|
||||
core: &mut Core,
|
||||
) -> Self
|
||||
where
|
||||
Es: IntoIterator<
|
||||
Item = (Handle<HalfEdge>, HalfEdgeGeom, LocalCurveGeom),
|
||||
>,
|
||||
Es: IntoIterator<Item = (Handle<HalfEdge>, LocalCurveGeom)>,
|
||||
Es::IntoIter: Clone + ExactSizeIterator;
|
||||
|
||||
/// Join the cycle to another
|
||||
@ -99,40 +96,29 @@ impl JoinCycle for Cycle {
|
||||
core: &mut Core,
|
||||
) -> Self
|
||||
where
|
||||
Es: IntoIterator<
|
||||
Item = (Handle<HalfEdge>, HalfEdgeGeom, LocalCurveGeom),
|
||||
>,
|
||||
Es: IntoIterator<Item = (Handle<HalfEdge>, LocalCurveGeom)>,
|
||||
Es::IntoIter: Clone + ExactSizeIterator,
|
||||
{
|
||||
let half_edges = edges
|
||||
.into_iter()
|
||||
.circular_tuple_windows()
|
||||
.map(
|
||||
|(
|
||||
(prev_half_edge, _, _),
|
||||
(half_edge, half_edge_geom, curve_geom),
|
||||
)| {
|
||||
let half_edge = HalfEdge::unjoined(core)
|
||||
.update_curve(|_, _| half_edge.curve().clone(), core)
|
||||
.update_start_vertex(
|
||||
|_, _| prev_half_edge.start_vertex().clone(),
|
||||
core,
|
||||
)
|
||||
.insert(core)
|
||||
.set_geometry(
|
||||
half_edge_geom,
|
||||
&mut core.layers.geometry,
|
||||
);
|
||||
.map(|((prev_half_edge, _), (half_edge, curve_geom))| {
|
||||
let half_edge = HalfEdge::unjoined(core)
|
||||
.update_curve(|_, _| half_edge.curve().clone(), core)
|
||||
.update_start_vertex(
|
||||
|_, _| prev_half_edge.start_vertex().clone(),
|
||||
core,
|
||||
)
|
||||
.insert(core);
|
||||
|
||||
core.layers.geometry.define_curve(
|
||||
half_edge.curve().clone(),
|
||||
surface.clone(),
|
||||
curve_geom,
|
||||
);
|
||||
core.layers.geometry.define_curve(
|
||||
half_edge.curve().clone(),
|
||||
surface.clone(),
|
||||
curve_geom,
|
||||
);
|
||||
|
||||
half_edge
|
||||
},
|
||||
)
|
||||
half_edge
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
self.add_half_edges(half_edges, core)
|
||||
}
|
||||
@ -260,14 +246,7 @@ impl JoinCycle for Cycle {
|
||||
},
|
||||
core,
|
||||
)
|
||||
.insert(core)
|
||||
.set_geometry(
|
||||
*core
|
||||
.layers
|
||||
.geometry
|
||||
.of_half_edge(half_edge),
|
||||
&mut core.layers.geometry,
|
||||
)]
|
||||
.insert(core)]
|
||||
},
|
||||
core,
|
||||
)
|
||||
@ -299,14 +278,7 @@ impl JoinCycle for Cycle {
|
||||
},
|
||||
core,
|
||||
)
|
||||
.insert(core)
|
||||
.set_geometry(
|
||||
*core
|
||||
.layers
|
||||
.geometry
|
||||
.of_half_edge(half_edge),
|
||||
&mut core.layers.geometry,
|
||||
)]
|
||||
.insert(core)]
|
||||
},
|
||||
core,
|
||||
)
|
||||
|
@ -1,7 +1,5 @@
|
||||
use crate::{
|
||||
operations::{
|
||||
derive::DeriveFrom, geometry::UpdateHalfEdgeGeometry, insert::Insert,
|
||||
},
|
||||
operations::{derive::DeriveFrom, insert::Insert},
|
||||
topology::{Cycle, HalfEdge},
|
||||
Core,
|
||||
};
|
||||
@ -14,17 +12,12 @@ impl Reverse for Cycle {
|
||||
.half_edges()
|
||||
.pairs()
|
||||
.map(|(current, next)| {
|
||||
let mut half_edge_geom =
|
||||
*core.layers.geometry.of_half_edge(current);
|
||||
half_edge_geom.boundary = half_edge_geom.boundary.reverse();
|
||||
|
||||
HalfEdge::new(
|
||||
current.curve().clone(),
|
||||
next.start_vertex().clone(),
|
||||
)
|
||||
.insert(core)
|
||||
.derive_from(current, core)
|
||||
.set_geometry(half_edge_geom, &mut core.layers.geometry)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
|
@ -35,9 +35,6 @@ impl ReverseCurveCoordinateSystems
|
||||
.unwrap()
|
||||
.clone();
|
||||
|
||||
let mut half_edge_geom = *core.layers.geometry.of_half_edge(half_edge);
|
||||
half_edge_geom.boundary = half_edge_geom.boundary.reverse();
|
||||
|
||||
let curve =
|
||||
(half_edge.curve(), surface).reverse_curve_coordinate_systems(core);
|
||||
|
||||
@ -56,10 +53,6 @@ impl ReverseCurveCoordinateSystems
|
||||
vertex_geom_start,
|
||||
);
|
||||
|
||||
core.layers
|
||||
.geometry
|
||||
.define_half_edge(half_edge.clone(), half_edge_geom);
|
||||
|
||||
half_edge
|
||||
}
|
||||
}
|
||||
|
@ -2,8 +2,8 @@ use fj_math::Point;
|
||||
|
||||
use crate::{
|
||||
operations::{
|
||||
geometry::UpdateHalfEdgeGeometry, insert::Insert,
|
||||
replace::ReplaceHalfEdge, split::SplitHalfEdge, update::UpdateHalfEdge,
|
||||
insert::Insert, replace::ReplaceHalfEdge, split::SplitHalfEdge,
|
||||
update::UpdateHalfEdge,
|
||||
},
|
||||
queries::{CycleOfHalfEdge, SiblingOfHalfEdge},
|
||||
storage::Handle,
|
||||
@ -53,11 +53,7 @@ impl SplitEdge for Shell {
|
||||
|_, _| half_edge_b.start_vertex().clone(),
|
||||
core,
|
||||
)
|
||||
.insert(core)
|
||||
.set_geometry(
|
||||
*core.layers.geometry.of_half_edge(&sibling_b),
|
||||
&mut core.layers.geometry,
|
||||
);
|
||||
.insert(core);
|
||||
|
||||
[sibling_a, sibling_b]
|
||||
};
|
||||
|
@ -7,7 +7,6 @@ use crate::{
|
||||
operations::{
|
||||
build::{BuildCycle, BuildHalfEdge},
|
||||
derive::DeriveFrom,
|
||||
geometry::UpdateHalfEdgeGeometry,
|
||||
insert::Insert,
|
||||
split::SplitEdge,
|
||||
update::{
|
||||
@ -163,10 +162,6 @@ impl SplitFace for Shell {
|
||||
half_edge
|
||||
.update_start_vertex(|_, _| b.start_vertex().clone(), core)
|
||||
.insert(core)
|
||||
.set_geometry(
|
||||
*core.layers.geometry.of_half_edge(&half_edge),
|
||||
&mut core.layers.geometry,
|
||||
)
|
||||
};
|
||||
let dividing_half_edge_c_to_b = HalfEdge::from_sibling(
|
||||
&dividing_half_edge_a_to_d,
|
||||
|
@ -2,9 +2,7 @@ use fj_math::Point;
|
||||
|
||||
use crate::{
|
||||
geometry::LocalVertexGeom,
|
||||
operations::{
|
||||
derive::DeriveFrom, geometry::UpdateHalfEdgeGeometry, insert::Insert,
|
||||
},
|
||||
operations::{derive::DeriveFrom, insert::Insert},
|
||||
storage::Handle,
|
||||
topology::{Cycle, HalfEdge, Vertex},
|
||||
Core,
|
||||
@ -45,49 +43,18 @@ impl SplitHalfEdge for Cycle {
|
||||
) -> [Handle<HalfEdge>; 2] {
|
||||
let point = point.into();
|
||||
|
||||
let geometry = *core.layers.geometry.of_half_edge(half_edge);
|
||||
let [start, end] = [
|
||||
core.layers
|
||||
.geometry
|
||||
.of_vertex(half_edge.start_vertex())
|
||||
.unwrap()
|
||||
.local_on(half_edge.curve())
|
||||
.unwrap()
|
||||
.position,
|
||||
core.layers
|
||||
.geometry
|
||||
.of_vertex(
|
||||
self.half_edges()
|
||||
.after(half_edge)
|
||||
.expect("Expected half-edge to be in cycle")
|
||||
.start_vertex(),
|
||||
)
|
||||
.unwrap()
|
||||
.local_on(half_edge.curve())
|
||||
.unwrap()
|
||||
.position,
|
||||
];
|
||||
|
||||
let a = HalfEdge::new(
|
||||
half_edge.curve().clone(),
|
||||
half_edge.start_vertex().clone(),
|
||||
)
|
||||
.insert(core)
|
||||
.derive_from(half_edge, core)
|
||||
.set_geometry(
|
||||
geometry.with_boundary([start, point]),
|
||||
&mut core.layers.geometry,
|
||||
);
|
||||
.derive_from(half_edge, core);
|
||||
let b = HalfEdge::new(
|
||||
half_edge.curve().clone(),
|
||||
Vertex::new().insert(core),
|
||||
)
|
||||
.insert(core)
|
||||
.derive_from(half_edge, core)
|
||||
.set_geometry(
|
||||
geometry.with_boundary([point, end]),
|
||||
&mut core.layers.geometry,
|
||||
);
|
||||
.derive_from(half_edge, core);
|
||||
|
||||
core.layers.geometry.define_vertex(
|
||||
b.start_vertex().clone(),
|
||||
|
@ -82,7 +82,6 @@ impl SweepCycle for Cycle {
|
||||
top_half_edges.push((
|
||||
swept_half_edge.top_half_edge,
|
||||
swept_half_edge.top_boundary,
|
||||
*core.layers.geometry.of_half_edge(bottom_half_edge),
|
||||
core.layers
|
||||
.geometry
|
||||
.of_curve(bottom_half_edge.curve())
|
||||
@ -98,8 +97,8 @@ impl SweepCycle for Cycle {
|
||||
.circular_tuple_windows()
|
||||
.map(
|
||||
|(
|
||||
(half_edge, boundary, half_edge_geom, curve_geom),
|
||||
(next_half_edge, _, _, _),
|
||||
(half_edge, boundary, curve_geom),
|
||||
(next_half_edge, _, _),
|
||||
)| {
|
||||
let [start, end] = boundary.inner;
|
||||
|
||||
@ -114,7 +113,7 @@ impl SweepCycle for Cycle {
|
||||
);
|
||||
}
|
||||
|
||||
(half_edge, half_edge_geom, curve_geom)
|
||||
(half_edge, curve_geom)
|
||||
},
|
||||
)
|
||||
.collect::<Vec<_>>();
|
||||
|
@ -2,10 +2,10 @@ use fj_interop::{ext::ArrayExt, Color};
|
||||
use fj_math::{Point, Scalar, Vector};
|
||||
|
||||
use crate::{
|
||||
geometry::{CurveBoundary, HalfEdgeGeom, LocalVertexGeom},
|
||||
geometry::{CurveBoundary, LocalVertexGeom},
|
||||
operations::{
|
||||
build::{BuildCycle, BuildHalfEdge},
|
||||
geometry::{UpdateCurveGeometry, UpdateHalfEdgeGeometry},
|
||||
geometry::UpdateCurveGeometry,
|
||||
insert::Insert,
|
||||
presentation::SetColor,
|
||||
update::{UpdateCycle, UpdateHalfEdge},
|
||||
@ -184,11 +184,7 @@ impl SweepHalfEdge for Handle<HalfEdge> {
|
||||
let half_edge = HalfEdge::unjoined(core)
|
||||
.update_start_vertex(|_, _| start_vertex, core)
|
||||
.update_curve(|_, _| curve.clone(), core)
|
||||
.insert(core)
|
||||
.set_geometry(
|
||||
HalfEdgeGeom { boundary },
|
||||
&mut core.layers.geometry,
|
||||
);
|
||||
.insert(core);
|
||||
|
||||
exterior =
|
||||
exterior.add_half_edges([half_edge.clone()], core);
|
||||
|
@ -27,14 +27,6 @@ impl TransformObject for (&Handle<HalfEdge>, &Handle<Surface>) {
|
||||
.clone()
|
||||
.transform_with_cache(transform, core, cache);
|
||||
|
||||
let transformed_half_edge =
|
||||
HalfEdge::new(curve, start_vertex).insert(core);
|
||||
|
||||
core.layers.geometry.define_half_edge(
|
||||
transformed_half_edge.clone(),
|
||||
*core.layers.geometry.of_half_edge(half_edge),
|
||||
);
|
||||
|
||||
transformed_half_edge
|
||||
HalfEdge::new(curve, start_vertex).insert(core)
|
||||
}
|
||||
}
|
||||
|
@ -236,7 +236,7 @@ mod tests {
|
||||
use crate::{
|
||||
operations::{
|
||||
build::BuildShell,
|
||||
geometry::{UpdateCurveGeometry, UpdateHalfEdgeGeometry},
|
||||
geometry::UpdateCurveGeometry,
|
||||
insert::Insert,
|
||||
update::{
|
||||
UpdateCycle, UpdateFace, UpdateHalfEdge, UpdateRegion,
|
||||
@ -313,14 +313,7 @@ mod tests {
|
||||
|
||||
[half_edge
|
||||
.update_curve(|_, _| curve, core)
|
||||
.insert(core)
|
||||
.set_geometry(
|
||||
*core
|
||||
.layers
|
||||
.geometry
|
||||
.of_half_edge(half_edge),
|
||||
&mut core.layers.geometry,
|
||||
)]
|
||||
.insert(core)]
|
||||
},
|
||||
core,
|
||||
)
|
||||
|
@ -192,7 +192,6 @@ mod tests {
|
||||
use crate::{
|
||||
operations::{
|
||||
build::BuildShell,
|
||||
geometry::UpdateHalfEdgeGeometry,
|
||||
insert::Insert,
|
||||
update::{UpdateCycle, UpdateFace, UpdateRegion, UpdateShell},
|
||||
},
|
||||
@ -224,13 +223,6 @@ mod tests {
|
||||
cycle.update_half_edge(
|
||||
cycle.half_edges().nth_circular(0),
|
||||
|half_edge, core| {
|
||||
let mut half_edge_geom = *core
|
||||
.layers
|
||||
.geometry
|
||||
.of_half_edge(half_edge);
|
||||
half_edge_geom.boundary =
|
||||
half_edge_geom.boundary.reverse();
|
||||
|
||||
let mut curve_geom = core
|
||||
.layers
|
||||
.geometry
|
||||
@ -246,11 +238,7 @@ mod tests {
|
||||
half_edge.curve().clone(),
|
||||
half_edge.start_vertex().clone(),
|
||||
)
|
||||
.insert(core)
|
||||
.set_geometry(
|
||||
half_edge_geom,
|
||||
&mut core.layers.geometry,
|
||||
);
|
||||
.insert(core);
|
||||
|
||||
core.layers.geometry.define_curve(
|
||||
half_edge.curve().clone(),
|
||||
|
Loading…
Reference in New Issue
Block a user