diff --git a/experiments/2024-12-09/src/geometry/operation.rs b/experiments/2024-12-09/src/geometry/operation.rs index b89f8734e..a513780f7 100644 --- a/experiments/2024-12-09/src/geometry/operation.rs +++ b/experiments/2024-12-09/src/geometry/operation.rs @@ -3,6 +3,7 @@ use std::{fmt, ops::Deref, rc::Rc}; use super::tri_mesh::TriMesh; pub trait Operation: fmt::Display { + fn label(&self) -> &'static str; fn tri_mesh(&self) -> TriMesh; fn children(&self) -> Vec; } @@ -68,6 +69,10 @@ impl fmt::Display for AnyOp { } impl Operation for AnyOp { + fn label(&self) -> &'static str { + self.inner.label() + } + fn tri_mesh(&self) -> TriMesh { self.inner.tri_mesh() } diff --git a/experiments/2024-12-09/src/geometry/shape.rs b/experiments/2024-12-09/src/geometry/shape.rs index 3ce7c44d0..5bcb2b606 100644 --- a/experiments/2024-12-09/src/geometry/shape.rs +++ b/experiments/2024-12-09/src/geometry/shape.rs @@ -31,6 +31,10 @@ impl fmt::Display for Shape { } impl Operation for Shape { + fn label(&self) -> &'static str { + "Shape" + } + fn tri_mesh(&self) -> TriMesh { if let Some(op) = self.sequence.last() { op.tri_mesh() @@ -54,6 +58,10 @@ struct OperationInSequence { } impl Operation for OperationInSequence { + fn label(&self) -> &'static str { + self.operation.label() + } + fn tri_mesh(&self) -> TriMesh { let mesh = if let Some(op) = &self.previous { op.tri_mesh() diff --git a/experiments/2024-12-09/src/geometry/triangle.rs b/experiments/2024-12-09/src/geometry/triangle.rs index a8265461a..2b8cac266 100644 --- a/experiments/2024-12-09/src/geometry/triangle.rs +++ b/experiments/2024-12-09/src/geometry/triangle.rs @@ -27,6 +27,10 @@ impl fmt::Display for Triangle { } impl Operation for Triangle { + fn label(&self) -> &'static str { + "Triangle" + } + fn tri_mesh(&self) -> TriMesh { TriMesh { triangles: vec![self.clone()], diff --git a/experiments/2024-12-09/src/topology/face.rs b/experiments/2024-12-09/src/topology/face.rs index 692820dbb..d8912a950 100644 --- a/experiments/2024-12-09/src/topology/face.rs +++ b/experiments/2024-12-09/src/topology/face.rs @@ -47,6 +47,10 @@ impl fmt::Display for Face { } impl Operation for Face { + fn label(&self) -> &'static str { + "Face" + } + fn tri_mesh(&self) -> TriMesh { // This is a placeholder implementation that only supports convex faces. diff --git a/experiments/2024-12-09/src/topology/vertex.rs b/experiments/2024-12-09/src/topology/vertex.rs index 2721b3ea6..73bc1b7b8 100644 --- a/experiments/2024-12-09/src/topology/vertex.rs +++ b/experiments/2024-12-09/src/topology/vertex.rs @@ -29,6 +29,10 @@ impl fmt::Display for Vertex { } impl Operation for Vertex { + fn label(&self) -> &'static str { + "Vertex" + } + fn tri_mesh(&self) -> TriMesh { TriMesh::new() } diff --git a/experiments/2024-12-09/src/view.rs b/experiments/2024-12-09/src/view.rs index 0a49a7a2c..60435cd67 100644 --- a/experiments/2024-12-09/src/view.rs +++ b/experiments/2024-12-09/src/view.rs @@ -128,6 +128,10 @@ impl fmt::Display for OperationView { } impl Operation for OperationView { + fn label(&self) -> &'static str { + self.operation.label() + } + fn tri_mesh(&self) -> TriMesh { self.operation.tri_mesh() }