shambler 0.2.0

A rusty, hulking, lighting-tossing geometry processor.
Documentation
use std::collections::BTreeMap;

use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
use usage::Usage;

use super::BrushId;
use crate::{face::FaceId, ConvexHull, FacePlanes};

pub enum BrushHullsTag {}

pub type BrushHulls = Usage<BrushHullsTag, BTreeMap<BrushId, ConvexHull>>;

pub fn brush_hulls(brush_planes: &BTreeMap<BrushId, Vec<FaceId>>, geo_planes: &FacePlanes) -> BrushHulls {
    brush_planes
        .par_iter()
        .map(|(brush_id, plane_ids)| {
            let planes = plane_ids
                .par_iter()
                .map(|plane_id| geo_planes[plane_id])
                .collect::<Vec<_>>();
            (*brush_id, planes.into())
        })
        .collect()
}