From a9bcd5df1bdc36ee835f90222474c7be201831b9 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Mon, 9 Dec 2024 20:26:10 +0100 Subject: [PATCH] Add `Operation::children` --- .../2024-12-09/src/geometry/operation.rs | 1 + .../2024-12-09/src/geometry/ops_log.rs | 26 +++++++++++++++++++ .../2024-12-09/src/geometry/primitives.rs | 8 ++++++ 3 files changed, 35 insertions(+) diff --git a/experiments/2024-12-09/src/geometry/operation.rs b/experiments/2024-12-09/src/geometry/operation.rs index 27796e2d0..4664f3340 100644 --- a/experiments/2024-12-09/src/geometry/operation.rs +++ b/experiments/2024-12-09/src/geometry/operation.rs @@ -5,4 +5,5 @@ use super::{Triangle, Vertex}; pub trait Operation: fmt::Display { fn vertices(&self, vertices: &mut Vec); fn triangles(&self, triangles: &mut Vec); + fn children(&self) -> Vec>; } diff --git a/experiments/2024-12-09/src/geometry/ops_log.rs b/experiments/2024-12-09/src/geometry/ops_log.rs index 62489eb73..74510256c 100644 --- a/experiments/2024-12-09/src/geometry/ops_log.rs +++ b/experiments/2024-12-09/src/geometry/ops_log.rs @@ -73,6 +73,13 @@ impl Operation for OpsLog { op.triangles(triangles); } } + + fn children(&self) -> Vec> { + self.operations + .iter() + .map(|op| Box::new(op.clone()) as _) + .collect() + } } #[derive(Clone)] @@ -95,6 +102,10 @@ impl Operation for OperationInSequence { } self.operation.triangles(triangles); } + + fn children(&self) -> Vec> { + self.operation.children() + } } impl fmt::Display for OperationInSequence { @@ -154,6 +165,7 @@ pub struct ClonedOperation { pub description: String, pub vertices: Vec, pub triangles: Vec, + pub children: Vec, } impl ClonedOperation { @@ -164,10 +176,17 @@ impl ClonedOperation { let mut triangles = Vec::new(); op.triangles(&mut triangles); + let children = op + .children() + .into_iter() + .map(|op| Self::from_op(op.as_ref())) + .collect(); + Self { description: op.to_string(), vertices, triangles, + children, } } } @@ -186,4 +205,11 @@ impl Operation for ClonedOperation { fn triangles(&self, triangles: &mut Vec) { triangles.extend(&self.triangles); } + + fn children(&self) -> Vec> { + self.children + .iter() + .map(|op| Box::new(op.clone()) as _) + .collect() + } } diff --git a/experiments/2024-12-09/src/geometry/primitives.rs b/experiments/2024-12-09/src/geometry/primitives.rs index 71f004d5a..99fdfb852 100644 --- a/experiments/2024-12-09/src/geometry/primitives.rs +++ b/experiments/2024-12-09/src/geometry/primitives.rs @@ -33,6 +33,10 @@ impl Operation for Vertex { } fn triangles(&self, _: &mut Vec) {} + + fn children(&self) -> Vec> { + Vec::new() + } } #[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)] @@ -64,4 +68,8 @@ impl Operation for Triangle { fn triangles(&self, triangles: &mut Vec) { triangles.push(*self) } + + fn children(&self) -> Vec> { + Vec::new() + } }