objex 0.2.0

object entity creation and persistence using matcat and geospec
Documentation
use crate::core::Object;
use geospec::{Dimensions, Volume, SurfaceArea};
use matcat::MatCatId;

pub struct CompositeObject<T: Dimensions + Volume + SurfaceArea> {
    pub layers: Vec<Object<T>>,
}

impl<T: Dimensions + Volume + SurfaceArea> CompositeObject<T> {
    pub fn new(layers: Vec<Object<T>>) -> Self {
        CompositeObject { layers }
    }

    pub fn total_mass(&self) -> f64 {
        self.layers.iter()
            .map(|obj| obj.material.density as f64 * obj.shape.volume())
            .sum()
    }

    pub fn average_conductivity(&self) -> f32 {
        let n = self.layers.len() as f32;
        self.layers.iter().map(|obj| obj.material.thermal_conductivity).sum::<f32>() / n
    }

    pub fn weakest_strength(&self) -> f32 {
        self.layers.iter()
            .map(|obj| obj.material.tensile_strength)
            .fold(f32::INFINITY, f32::min)
    }
}