1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
pub mod pmx_writer;
pub mod binary_writer;
macro_rules! read_bin {
($F:ident,$T:ty) => {
pub(crate) fn $F(&mut self) -> $T {
let temp;
let mut buf = [0u8; std::mem::size_of::<$T>()];
self.inner.read_exact(&mut buf).unwrap();
unsafe {
temp = transmute(buf);
}
temp
}
};
}
pub mod binary_reader;
pub mod pmx_loader;
pub mod pmx_types;
#[cfg(test)]
mod test {
use std::env;
use crate::pmx_loader::{MaterialsLoader, TexturesLoader, BonesLoader, MorphsLoader, PMXLoader, ModelInfoLoader, VerticesLoader, FacesLoader, FrameLoader};
use crate::pmx_writer::PMXWriter;
use crate::pmx_types::pmx_types::PMXModelInfo;
#[test]
fn copy_test(){
let from ="./from.pmx";
let to ="./to.pmx";
let mut writer =PMXWriter::begin_writer(to);
let mut copy_from=PMXLoader::open(from);
let (model_info,ns)=ModelInfoLoader::read_pmx_model_info(copy_from);
let (vertices,ns)=VerticesLoader::read_pmx_vertices(ns);
let (faces,ns)=FacesLoader::read_pmx_faces(ns);
let(textures,ns)=TexturesLoader::read_texture_list(ns);
let (materials,ns)=MaterialsLoader::read_pmx_materials(ns);
let(bones,ns)=BonesLoader::read_pmx_bones(ns);
let(morphs,ns)=MorphsLoader::read_pmx_morphs(ns);
let (frames,ns)=FrameLoader::read_frames(ns);
for frame in frames{
println!("{:#?}",frame)
}
writer.set_model_info(Some(&model_info.name),Some(&model_info.name_en),Some(&model_info.comment),Some(&model_info.comment_en));
writer.add_vertices(&vertices);
writer.add_faces(&faces);
writer.add_textures(&textures.textures);
writer.add_materials(&materials);
writer.add_bones(&bones);
writer.add_morphs(&morphs);
PMXWriter::write(writer);
let reader=PMXLoader::open(to);
let (model_info_cpy,ns)=ModelInfoLoader::read_pmx_model_info(reader);
let (vertices_cpy,ns)=VerticesLoader::read_pmx_vertices(ns);
let (faces_cpy,ns)=FacesLoader::read_pmx_faces(ns);
let(textures_cpy,ns)=TexturesLoader::read_texture_list(ns);
let (materials_cpy,ns)=MaterialsLoader::read_pmx_materials(ns);
let(bones_cpy,ns)=BonesLoader::read_pmx_bones(ns);
let(morphs_cpy,ns)=MorphsLoader::read_pmx_morphs(ns);
assert_eq!(model_info,model_info_cpy);
assert_eq!(vertices,vertices_cpy);
assert_eq!(faces,faces_cpy);
assert_eq!(textures,textures_cpy);
assert_eq!(materials,materials_cpy);
assert_eq!(bones,bones_cpy);
assert_eq!(morphs,morphs_cpy);
}
}