use super::arena::Arena;
use super::id::{Placement3dId, ProductId, ShellId, SolidId};
#[derive(Debug, Clone, Default)]
pub struct AssemblyTree {
pub products: Arena<Product>,
pub root: Option<ProductId>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Product {
pub id: String,
pub name: String,
pub description: Option<String>,
pub content: ProductContent,
pub shape_ref_frame: Placement3dId,
}
#[derive(Debug, Clone, PartialEq)]
pub enum ProductContent {
Group(Vec<Instance>),
Solid(SolidId),
SurfaceBody(Vec<ShellId>),
}
#[derive(Debug, Clone, PartialEq)]
pub struct Instance {
pub child: ProductId,
pub transform: Transform3d,
pub occurrence_id: String,
pub occurrence_name: String,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Transform3d {
pub source: Placement3dId,
pub target: Placement3dId,
}