diff options
author | Charlotte Pabst <charlotte.pabst@stud.tu-darmstadt.de> | 2024-03-24 16:27:11 +0100 |
---|---|---|
committer | Charlotte Pabst <charlotte.pabst@stud.tu-darmstadt.de> | 2024-03-24 17:20:07 +0100 |
commit | f552c45b5f08c4cf7af9dda1f4251d130b38ab15 (patch) | |
tree | 35952d917346a99f9403e6913e5cda720933f0a9 /src/obj_export.rs | |
parent | 4b7532ca0d6ff21d5531febb749b43112d0451e8 (diff) | |
download | dcel-f552c45b5f08c4cf7af9dda1f4251d130b38ab15.tar.xz |
Diffstat (limited to 'src/obj_export.rs')
-rw-r--r-- | src/obj_export.rs | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/obj_export.rs b/src/obj_export.rs index 7998112..d7d1c41 100644 --- a/src/obj_export.rs +++ b/src/obj_export.rs @@ -41,7 +41,7 @@ pub struct ObjExport<'tok, 'brand, 'arena, V, W, VPos, VTex, VNorm> { writer: &'tok mut W, dcel: &'tok Dcel<'brand, 'arena, V>, vertex_pos: VPos, - pos_ids: HashMap<usize, usize>, + pos_ids: Vec<Option<usize>>, textures: VertAttr<lens!(Face), VTex, (f64, Option<(f64, Option<f64>)>), V>, normals: VertAttr<lens!(Face), VNorm, (f64, f64, f64), V>, } @@ -65,7 +65,7 @@ where writer, dcel, vertex_pos, - pos_ids: HashMap::new(), + pos_ids: Vec::new(), textures: VertAttr::new(vertex_texture), normals: VertAttr::new(vertex_normal), } @@ -76,7 +76,11 @@ where let mut next_id = 1; for shell in self.dcel.iter_bodies().flat_map(Lens::iter_shells) { for vertex in shell.iter_vertices() { - self.pos_ids.insert(vertex.id(), next_id); + let v_id = vertex.id(); + if v_id <= self.pos_ids.len() { + self.pos_ids.resize(v_id + 1, None); + } + self.pos_ids.insert(v_id, Some(next_id)); next_id += 1; let (x, y, z, w) = (self.vertex_pos)(vertex.data()); @@ -132,7 +136,7 @@ where half_edge: lens!(HalfEdge), ) -> std::io::Result<()> { let vert = half_edge.origin(); - write!(self.writer, " {}", self.pos_ids[&vert.id()])?; + write!(self.writer, " {}", self.pos_ids[vert.id()].unwrap())?; let t = self.textures.add(face, vert.id(), vert.data()); let n = self.normals.add(face, vert.id(), vert.data()); |