39 lines
1.1 KiB
Rust
39 lines
1.1 KiB
Rust
use crate::model;
|
|
|
|
pub fn load_stl(path: std::path::PathBuf) -> model::Model {
|
|
let name = path.file_name().map(|v| v.to_string_lossy().to_string());
|
|
|
|
let mut file = std::fs::File::open(path).unwrap();
|
|
let stl = stl::read_stl(&mut file).unwrap();
|
|
|
|
let mut vertices = Vec::new();
|
|
let mut indices = Vec::new();
|
|
|
|
for tri in stl.triangles.iter() {
|
|
indices.push(vertices.len() as u32);
|
|
vertices.push(model::BasicVertex {
|
|
position: tri.v1.into(),
|
|
});
|
|
indices.push(vertices.len() as u32);
|
|
vertices.push(model::BasicVertex {
|
|
position: tri.v2.into(),
|
|
});
|
|
indices.push(vertices.len() as u32);
|
|
vertices.push(model::BasicVertex {
|
|
position: tri.v3.into(),
|
|
});
|
|
}
|
|
|
|
model::Model {
|
|
name: name.clone(),
|
|
objects: vec![model::Object {
|
|
name,
|
|
mesh: model::Mesh {
|
|
transform: Default::default(),
|
|
data: model::MeshData { vertices, indices },
|
|
},
|
|
children: vec![],
|
|
}],
|
|
}
|
|
}
|