From f552c45b5f08c4cf7af9dda1f4251d130b38ab15 Mon Sep 17 00:00:00 2001 From: Charlotte Pabst Date: Sun, 24 Mar 2024 16:27:11 +0100 Subject: --- src/obj_export.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/obj_export.rs') 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, + pos_ids: Vec>, textures: VertAttr)>), V>, normals: VertAttr, } @@ -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()); -- cgit v1.2.3