mirror of
https://github.com/hannobraun/Fornjot
synced 2025-02-26 09:05:52 +00:00
Replace Edge::line_segment
with Edges
method
I'm aware that I did the opposite not that long ago, but that was then. Now, I'm facing the need of having to track curves in the `Shape` API, and then the constructors will no longer work on `Edge`, at least without passing a `&mut Shape` into them.
This commit is contained in:
parent
10f8bb9eed
commit
8a578e3782
@ -150,10 +150,7 @@ mod tests {
|
|||||||
kernel::{
|
kernel::{
|
||||||
geometry::Surface,
|
geometry::Surface,
|
||||||
shape::Shape,
|
shape::Shape,
|
||||||
topology::{
|
topology::{edges::Cycle, faces::Face},
|
||||||
edges::{Cycle, Edge},
|
|
||||||
faces::Face,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
math::{Point, Scalar, Segment},
|
math::{Point, Scalar, Segment},
|
||||||
};
|
};
|
||||||
@ -214,11 +211,9 @@ mod tests {
|
|||||||
let v2 = shape.vertices().add(b);
|
let v2 = shape.vertices().add(b);
|
||||||
let v3 = shape.vertices().add(c);
|
let v3 = shape.vertices().add(c);
|
||||||
|
|
||||||
let ab = shape
|
let ab = shape.edges().add_line_segment([v1.clone(), v2.clone()]);
|
||||||
.edges()
|
let bc = shape.edges().add_line_segment([v2, v3.clone()]);
|
||||||
.add(Edge::line_segment([v1.clone(), v2.clone()]));
|
let ca = shape.edges().add_line_segment([v3, v1]);
|
||||||
let bc = shape.edges().add(Edge::line_segment([v2, v3.clone()]));
|
|
||||||
let ca = shape.edges().add(Edge::line_segment([v3, v1]));
|
|
||||||
|
|
||||||
let cycle = Cycle {
|
let cycle = Cycle {
|
||||||
edges: vec![ab, bc, ca],
|
edges: vec![ab, bc, ca],
|
||||||
@ -255,12 +250,10 @@ mod tests {
|
|||||||
let v3 = shape.vertices().add(c);
|
let v3 = shape.vertices().add(c);
|
||||||
let v4 = shape.vertices().add(d);
|
let v4 = shape.vertices().add(d);
|
||||||
|
|
||||||
let ab = shape
|
let ab = shape.edges().add_line_segment([v1.clone(), v2.clone()]);
|
||||||
.edges()
|
let bc = shape.edges().add_line_segment([v2, v3.clone()]);
|
||||||
.add(Edge::line_segment([v1.clone(), v2.clone()]));
|
let cd = shape.edges().add_line_segment([v3, v4.clone()]);
|
||||||
let bc = shape.edges().add(Edge::line_segment([v2, v3.clone()]));
|
let da = shape.edges().add_line_segment([v4, v1]);
|
||||||
let cd = shape.edges().add(Edge::line_segment([v3, v4.clone()]));
|
|
||||||
let da = shape.edges().add(Edge::line_segment([v4, v1]));
|
|
||||||
|
|
||||||
let abcd = shape.cycles().add(Cycle {
|
let abcd = shape.cycles().add(Cycle {
|
||||||
edges: vec![ab, bc, cd, da],
|
edges: vec![ab, bc, cd, da],
|
||||||
|
@ -71,10 +71,7 @@ mod tests {
|
|||||||
kernel::{
|
kernel::{
|
||||||
geometry::{surfaces::Swept, Surface},
|
geometry::{surfaces::Swept, Surface},
|
||||||
shape::{handle::Handle, Shape},
|
shape::{handle::Handle, Shape},
|
||||||
topology::{
|
topology::{edges::Cycle, faces::Face},
|
||||||
edges::{Cycle, Edge},
|
|
||||||
faces::Face,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
math::{Point, Scalar, Vector},
|
math::{Point, Scalar, Vector},
|
||||||
};
|
};
|
||||||
@ -115,15 +112,9 @@ mod tests {
|
|||||||
let b = shape.vertices().add(b.into());
|
let b = shape.vertices().add(b.into());
|
||||||
let c = shape.vertices().add(c.into());
|
let c = shape.vertices().add(c.into());
|
||||||
|
|
||||||
let ab = shape
|
let ab = shape.edges().add_line_segment([a.clone(), b.clone()]);
|
||||||
.edges()
|
let bc = shape.edges().add_line_segment([b.clone(), c.clone()]);
|
||||||
.add(Edge::line_segment([a.clone(), b.clone()]));
|
let ca = shape.edges().add_line_segment([c.clone(), a.clone()]);
|
||||||
let bc = shape
|
|
||||||
.edges()
|
|
||||||
.add(Edge::line_segment([b.clone(), c.clone()]));
|
|
||||||
let ca = shape
|
|
||||||
.edges()
|
|
||||||
.add(Edge::line_segment([c.clone(), a.clone()]));
|
|
||||||
|
|
||||||
let cycles = shape.cycles().add(Cycle {
|
let cycles = shape.cycles().add(Cycle {
|
||||||
edges: vec![ab, bc, ca],
|
edges: vec![ab, bc, ca],
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
use crate::kernel::topology::edges::Edge;
|
use crate::kernel::{
|
||||||
|
geometry::{Curve, Line},
|
||||||
|
topology::{edges::Edge, vertices::Vertex},
|
||||||
|
};
|
||||||
|
|
||||||
use super::handle::{Handle, Storage};
|
use super::handle::{Handle, Storage};
|
||||||
|
|
||||||
@ -23,4 +26,20 @@ impl Edges {
|
|||||||
pub fn add(&mut self, edge: Edge) -> Handle<Edge> {
|
pub fn add(&mut self, edge: Edge) -> Handle<Edge> {
|
||||||
Storage::new(edge).handle()
|
Storage::new(edge).handle()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Add a line segment to the shape
|
||||||
|
///
|
||||||
|
/// Calls [`Edges::add`] internally, and is subject to the same
|
||||||
|
/// restrictions.
|
||||||
|
pub fn add_line_segment(
|
||||||
|
&mut self,
|
||||||
|
vertices: [Handle<Vertex>; 2],
|
||||||
|
) -> Handle<Edge> {
|
||||||
|
self.add(Edge {
|
||||||
|
curve: Curve::Line(Line::from_points(
|
||||||
|
vertices.clone().map(|vertex| vertex.point()),
|
||||||
|
)),
|
||||||
|
vertices: Some(vertices),
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,7 @@ use crate::{
|
|||||||
kernel::{
|
kernel::{
|
||||||
geometry::Surface,
|
geometry::Surface,
|
||||||
shape::Shape,
|
shape::Shape,
|
||||||
topology::{
|
topology::{edges::Cycle, faces::Face},
|
||||||
edges::{Cycle, Edge},
|
|
||||||
faces::Face,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
math::{Aabb, Point, Scalar},
|
math::{Aabb, Point, Scalar},
|
||||||
};
|
};
|
||||||
@ -40,7 +37,7 @@ impl ToShape for fj::Sketch {
|
|||||||
let a = window[0].clone();
|
let a = window[0].clone();
|
||||||
let b = window[1].clone();
|
let b = window[1].clone();
|
||||||
|
|
||||||
let edge = shape.edges().add(Edge::line_segment([a, b]));
|
let edge = shape.edges().add_line_segment([a, b]);
|
||||||
edges.push(edge);
|
edges.push(edge);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
kernel::{
|
kernel::{
|
||||||
geometry::{Circle, Curve, Line},
|
geometry::{Circle, Curve},
|
||||||
shape::handle::Handle,
|
shape::handle::Handle,
|
||||||
},
|
},
|
||||||
math::{Point, Scalar, Vector},
|
math::{Point, Scalar, Vector},
|
||||||
@ -46,16 +46,6 @@ pub struct Edge {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Edge {
|
impl Edge {
|
||||||
/// Create a line segment
|
|
||||||
pub fn line_segment(vertices: [Handle<Vertex>; 2]) -> Self {
|
|
||||||
Edge {
|
|
||||||
curve: Curve::Line(Line::from_points(
|
|
||||||
vertices.clone().map(|vertex| vertex.point()),
|
|
||||||
)),
|
|
||||||
vertices: Some(vertices),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Create a circle
|
/// Create a circle
|
||||||
pub fn circle(radius: Scalar) -> Self {
|
pub fn circle(radius: Scalar) -> Self {
|
||||||
Edge {
|
Edge {
|
||||||
|
Loading…
Reference in New Issue
Block a user