aboutsummaryrefslogtreecommitdiff
path: root/src/obj_export.rs
diff options
context:
space:
mode:
authorCharlotte Pabst <charlotte.pabst@stud.tu-darmstadt.de>2024-03-24 16:27:11 +0100
committerCharlotte Pabst <charlotte.pabst@stud.tu-darmstadt.de>2024-03-24 17:20:07 +0100
commitf552c45b5f08c4cf7af9dda1f4251d130b38ab15 (patch)
tree35952d917346a99f9403e6913e5cda720933f0a9 /src/obj_export.rs
parent4b7532ca0d6ff21d5531febb749b43112d0451e8 (diff)
downloaddcel-f552c45b5f08c4cf7af9dda1f4251d130b38ab15.tar.xz
Diffstat (limited to 'src/obj_export.rs')
-rw-r--r--src/obj_export.rs12
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());