use microcad_core::{Geometries2D, Geometry2D};
use microcad_lang::{builtin::*, render::*};
#[derive(Debug)]
pub struct Align;
impl Operation for Align {
fn process_2d(&self, context: &mut RenderContext) -> RenderResult<Geometry2DOutput> {
context.update_2d(|context, model| {
let model_ = model.borrow();
let geometries: Geometries2D = model_.children.render_with_context(context)?;
use microcad_core::traits::Align;
Ok(Geometry2D::Collection(geometries).align())
})
}
fn process_3d(&self, _context: &mut RenderContext) -> RenderResult<Geometry3DOutput> {
todo!()
}
}
impl BuiltinWorkbenchDefinition for Align {
fn id() -> &'static str {
"align"
}
fn kind() -> BuiltinWorkbenchKind {
BuiltinWorkbenchKind::Operation
}
fn workpiece_function() -> &'static BuiltinWorkpieceFn {
&|_| Ok(BuiltinWorkpieceOutput::Operation(Box::new(Align)))
}
}