mirror of https://github.com/hannobraun/Fornjot
Use richer face representation in `Tetrahedron`
This commit is contained in:
parent
f2d47ad9df
commit
fe186e0b7d
|
@ -2,12 +2,11 @@ use fj_math::Point;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
objects::{Face, Shell},
|
objects::{Face, Shell},
|
||||||
operations::{Insert, JoinCycle, UpdateFace},
|
operations::{Insert, IsInsertedYes, JoinCycle, UpdateFace},
|
||||||
services::Services,
|
services::Services,
|
||||||
storage::Handle,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::BuildFace;
|
use super::{BuildFace, Polygon};
|
||||||
|
|
||||||
/// Build a [`Shell`]
|
/// Build a [`Shell`]
|
||||||
pub trait BuildShell {
|
pub trait BuildShell {
|
||||||
|
@ -58,8 +57,9 @@ pub trait BuildShell {
|
||||||
.insert(services)
|
.insert(services)
|
||||||
});
|
});
|
||||||
|
|
||||||
let faces = [abc, bad, dac, cbd].map(|face| face.insert(services).face);
|
let faces = [abc, bad, dac, cbd].map(|face| face.insert(services));
|
||||||
let shell = Shell::new(faces.clone());
|
let shell =
|
||||||
|
Shell::new(faces.iter().map(|triangle| triangle.face.clone()));
|
||||||
|
|
||||||
let [abc, bad, dac, cbd] = faces;
|
let [abc, bad, dac, cbd] = faces;
|
||||||
|
|
||||||
|
@ -87,14 +87,14 @@ pub struct Tetrahedron {
|
||||||
pub shell: Shell,
|
pub shell: Shell,
|
||||||
|
|
||||||
/// The face formed by the points `a`, `b`, and `c`.
|
/// The face formed by the points `a`, `b`, and `c`.
|
||||||
pub abc: Handle<Face>,
|
pub abc: Polygon<3, IsInsertedYes>,
|
||||||
|
|
||||||
/// The face formed by the points `b`, `a`, and `d`.
|
/// The face formed by the points `b`, `a`, and `d`.
|
||||||
pub bad: Handle<Face>,
|
pub bad: Polygon<3, IsInsertedYes>,
|
||||||
|
|
||||||
/// The face formed by the points `d`, `a`, and `c`.
|
/// The face formed by the points `d`, `a`, and `c`.
|
||||||
pub dac: Handle<Face>,
|
pub dac: Polygon<3, IsInsertedYes>,
|
||||||
|
|
||||||
/// The face formed by the points `c`, `b`, and `d`.
|
/// The face formed by the points `c`, `b`, and `d`.
|
||||||
pub cbd: Handle<Face>,
|
pub cbd: Polygon<3, IsInsertedYes>,
|
||||||
}
|
}
|
||||||
|
|
|
@ -210,7 +210,7 @@ mod tests {
|
||||||
[[0., 0., 0.], [0., 1., 0.], [1., 0., 0.], [0., 0., 1.]],
|
[[0., 0., 0.], [0., 1., 0.], [1., 0., 0.], [0., 0., 1.]],
|
||||||
&mut services,
|
&mut services,
|
||||||
);
|
);
|
||||||
let invalid = valid.shell.update_face(&valid.abc, |face| {
|
let invalid = valid.shell.update_face(&valid.abc.face, |face| {
|
||||||
face.update_exterior(|cycle| {
|
face.update_exterior(|cycle| {
|
||||||
cycle
|
cycle
|
||||||
.update_nth_half_edge(0, |half_edge| {
|
.update_nth_half_edge(0, |half_edge| {
|
||||||
|
@ -243,7 +243,7 @@ mod tests {
|
||||||
[[0., 0., 0.], [0., 1., 0.], [1., 0., 0.], [0., 0., 1.]],
|
[[0., 0., 0.], [0., 1., 0.], [1., 0., 0.], [0., 0., 1.]],
|
||||||
&mut services,
|
&mut services,
|
||||||
);
|
);
|
||||||
let invalid = valid.shell.remove_face(&valid.abc);
|
let invalid = valid.shell.remove_face(&valid.abc.face);
|
||||||
|
|
||||||
valid.shell.validate_and_return_first_error()?;
|
valid.shell.validate_and_return_first_error()?;
|
||||||
assert_contains_err!(
|
assert_contains_err!(
|
||||||
|
|
Loading…
Reference in New Issue