diff --git a/experiments/2024-12-09/src/geometry/operation.rs b/experiments/2024-12-09/src/geometry/operation.rs index 79e4e91a6..e661c1c72 100644 --- a/experiments/2024-12-09/src/geometry/operation.rs +++ b/experiments/2024-12-09/src/geometry/operation.rs @@ -20,6 +20,13 @@ impl Handle { } } + pub fn get(&self) -> T + where + T: Copy, + { + *self.as_ref() + } + pub fn to_any(&self) -> HandleAny where T: Operation + 'static, @@ -35,6 +42,12 @@ impl Handle { } } +impl AsRef for Handle { + fn as_ref(&self) -> &T { + self.inner.as_ref() + } +} + impl Clone for Handle { fn clone(&self) -> Self { Self { diff --git a/experiments/2024-12-09/src/geometry/shape.rs b/experiments/2024-12-09/src/geometry/shape.rs index 66352e254..5a775dd11 100644 --- a/experiments/2024-12-09/src/geometry/shape.rs +++ b/experiments/2024-12-09/src/geometry/shape.rs @@ -16,11 +16,11 @@ impl Shape { pub fn vertex( &mut self, vertex: impl Into, - ) -> OperationResult<(Vertex,)> { - let vertex = vertex.into(); + ) -> OperationResult<(Handle,)> { + let vertex = Handle::new(vertex.into()); self.operations.push(OperationInSequence { - operation: HandleAny::new(vertex), + operation: vertex.to_any(), previous: self .operations .last() @@ -124,7 +124,7 @@ impl<'r, T> OperationResult<'r, T> { vertex: impl Into, ) -> OperationResult<'r, T::Out> where - T: CombinRight, + T: CombinRight>, { let OperationResult { results: (vertex,), .. diff --git a/experiments/2024-12-09/src/model.rs b/experiments/2024-12-09/src/model.rs index 12fbd031f..f87e7e536 100644 --- a/experiments/2024-12-09/src/model.rs +++ b/experiments/2024-12-09/src/model.rs @@ -12,6 +12,9 @@ pub fn model(shape: &mut Shape) { .vertex([0.5, 0.5, 0.5]) .results(); + let [a, b, c, d, e, f, g, h] = + [a, b, c, d, e, f, g, h].map(|vertex| vertex.get()); + shape .triangle([a, e, g]) // left .triangle([a, g, c])