use microcad_builtin_proc_macros::BuiltinOperation2D;
use microcad_core::*;
use microcad_lang::{builtin::*, render::*};
#[derive(BuiltinOperation2D)]
pub struct Buffer {
distance: Length,
}
impl Operation for Buffer {
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 geo::Buffer;
Ok(Geometry2D::MultiPolygon(geometries.buffer(*self.distance)))
})
}
}