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![],
|
||
|
}],
|
||
|
}
|
||
|
}
|