gltforge_unity_export/
export_context.rs1use crate::{mesh_data::MeshData, node_data::NodeData, submesh_data::SubmeshData};
2
3pub struct ExportContext {
5 pub nodes: Vec<NodeData>,
6 pub meshes: Vec<MeshData>,
7}
8
9impl Default for ExportContext {
10 fn default() -> Self {
11 Self::new()
12 }
13}
14
15impl ExportContext {
16 pub fn new() -> Self {
17 Self {
18 nodes: Vec::new(),
19 meshes: Vec::new(),
20 }
21 }
22
23 pub fn add_node(
24 &mut self,
25 name: Option<String>,
26 parent: Option<u32>,
27 translation: Option<[f32; 3]>,
28 rotation: Option<[f32; 4]>,
29 scale: Option<[f32; 3]>,
30 ) -> u32 {
31 let idx = self.nodes.len() as u32;
32 self.nodes.push(NodeData {
33 name,
34 parent,
35 mesh_index: None,
36 translation,
37 rotation,
38 scale,
39 });
40 idx
41 }
42
43 pub fn add_mesh(&mut self, name: Option<String>) -> u32 {
44 let idx = self.meshes.len() as u32;
45 self.meshes.push(MeshData {
46 name,
47 positions: Vec::new(),
48 normals: Vec::new(),
49 uvs: Vec::new(),
50 submeshes: Vec::new(),
51 });
52 idx
53 }
54
55 pub fn set_positions(&mut self, mesh_idx: u32, positions: Vec<[f32; 3]>) {
56 if let Some(mesh) = self.meshes.get_mut(mesh_idx as usize) {
57 mesh.positions = positions;
58 }
59 }
60
61 pub fn set_normals(&mut self, mesh_idx: u32, normals: Vec<[f32; 3]>) {
62 if let Some(mesh) = self.meshes.get_mut(mesh_idx as usize) {
63 mesh.normals = normals;
64 }
65 }
66
67 pub fn set_uvs(&mut self, mesh_idx: u32, channel: u32, uvs: Vec<[f32; 2]>) {
68 if let Some(mesh) = self.meshes.get_mut(mesh_idx as usize) {
69 let ch = channel as usize;
70 if mesh.uvs.len() <= ch {
71 mesh.uvs.resize(ch + 1, Vec::new());
72 }
73 mesh.uvs[ch] = uvs;
74 }
75 }
76
77 pub fn add_submesh(&mut self, mesh_idx: u32, indices: Vec<u32>) {
78 if let Some(mesh) = self.meshes.get_mut(mesh_idx as usize) {
79 mesh.submeshes.push(SubmeshData { indices });
80 }
81 }
82
83 pub fn set_node_mesh(&mut self, node_idx: u32, mesh_idx: u32) {
84 if let Some(node) = self.nodes.get_mut(node_idx as usize) {
85 node.mesh_index = Some(mesh_idx);
86 }
87 }
88}