Prepare to track internal triangles

This commit is contained in:
Hanno Braun 2025-02-25 12:26:02 +01:00
parent 4b8c25c89d
commit ab8b2b9b9c
6 changed files with 21 additions and 8 deletions

View File

@ -11,7 +11,7 @@ pub fn export(op: &dyn Object) -> anyhow::Result<()> {
let mut triangles = Vec::new();
for triangle in tri_mesh.triangles {
let triangle = triangle.points.map(|point| {
let triangle = triangle.inner.points.map(|point| {
*indices_by_vertex.entry(point).or_insert_with(|| {
let index = points.len();
points.push(point);

View File

@ -7,7 +7,7 @@ use geo::{Contains, Coord, LineString, Polygon};
use spade::Triangulation;
use crate::{
geometry::{TriMesh, Triangle},
geometry::{MeshTriangle, TriMesh, Triangle},
math::{Plane, Point},
object::Handle,
topology::half_edge::HalfEdge,
@ -32,7 +32,9 @@ pub fn triangulate(
})
.map(|triangle| {
let points = triangle.map(|point| point.point_vertex);
Triangle { points }
MeshTriangle {
inner: Triangle { points },
}
});
let mut mesh = TriMesh::new();

View File

@ -2,4 +2,8 @@ mod sketch;
mod tri_mesh;
mod triangle;
pub use self::{sketch::Sketch, tri_mesh::TriMesh, triangle::Triangle};
pub use self::{
sketch::Sketch,
tri_mesh::{MeshTriangle, TriMesh},
triangle::Triangle,
};

View File

@ -2,7 +2,7 @@ use super::Triangle;
#[derive(Debug)]
pub struct TriMesh {
pub triangles: Vec<Triangle<3>>,
pub triangles: Vec<MeshTriangle>,
}
impl TriMesh {
@ -17,3 +17,8 @@ impl TriMesh {
self
}
}
#[derive(Debug)]
pub struct MeshTriangle {
pub inner: Triangle<3>,
}

View File

@ -5,7 +5,7 @@ use crate::{
object::{HandleAny, Object},
};
use super::TriMesh;
use super::{MeshTriangle, TriMesh};
#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
pub struct Triangle<const D: usize> {
@ -38,7 +38,9 @@ impl Object for Triangle<3> {
fn tri_mesh(&self) -> TriMesh {
TriMesh {
triangles: vec![self.clone()],
triangles: vec![MeshTriangle {
inner: self.clone(),
}],
}
}

View File

@ -19,7 +19,7 @@ impl Geometry {
let mut vertices = Vec::new();
for triangle in &tri_mesh.triangles {
let triangle = triangle.points.each_ref().map(|point| {
let triangle = triangle.inner.points.each_ref().map(|point| {
Vec3::from(
point.coords.components.map(|coord| coord.value() as f32),
)