#[cfg(feature = "genmesh")]
extern crate genmesh;
pub use mtl::{Material, Mtl};
pub use obj::{GenPolygon, Group, IndexTuple, Obj, Object, SimplePolygon};
use std::collections::HashMap;
use std::fs::File;
use std::io::{BufReader, Result as IoResult};
use std::path::Path;
use std::rc::Rc;
mod obj;
mod mtl;
pub fn load<P: GenPolygon>(path: &Path) -> IoResult<Obj<Rc<Material>, P>> {
let f = File::open(path)?;
let obj = Obj::load(&mut BufReader::new(f));
let mut materials = HashMap::new();
for m in &obj.materials {
let p = path.with_file_name(m);
let file = File::open(&p)?;
let mtl = Mtl::load(&mut BufReader::new(file));
for m in mtl.materials {
materials.insert(m.name.clone(), Rc::new(m));
}
}
Ok(obj.map(|Group { name, index, material, indices }| {
Group {
name,
index,
material: material.and_then(|m| materials.get(&m).cloned()),
indices,
}
}))
}