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 | |
parent | 4b7532ca0d6ff21d5531febb749b43112d0451e8 (diff) | |
download | dcel-f552c45b5f08c4cf7af9dda1f4251d130b38ab15.tar.xz |
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 96 | ||||
-rw-r--r-- | src/obj_export.rs | 12 |
2 files changed, 10 insertions, 98 deletions
@@ -167,6 +167,7 @@ fn short_debug_fn<'tok, 'brand, 'arena, T: Entity<'brand, 'arena>>(x: lens_t!(T) DisplayFn(move |f| short_debug_(T::type_name(), id, f)) } +/* fn short_debug_list<'tok, 'brand, 'arena, T, I>(iter: I, f: &mut Formatter) -> fmt::Result where 'brand: 'tok + 'arena, @@ -175,6 +176,7 @@ where { f.debug_list().entries(iter.map(short_debug_fn)).finish() } +*/ fn or_err<T>(cond: bool, err: T) -> Result<(), T> { if cond { @@ -948,97 +950,3 @@ impl<'brand, 'arena, V> Dcel<'brand, 'arena, V> { Kpmh::new(new_shell, old_face, new_face).apply(self) } } - -use std::io::Write; - -fn _main() { - let show = |name, dcel: &Dcel<(&'static str, [i64; 2])>| { - write!( - &mut std::fs::File::create(name).unwrap(), - "{}", - DisplayFn(|f: &mut fmt::Formatter<'_>| dcel_write_dot( - dcel, - |v| v.1.map(|x| x as _), - |v, f| write!(f, "{}", v.0), - f, - DcelDotOptions { - prev: false, - next: true, - twin: true, - } - )) - ) - .unwrap(); - }; - - GhostToken::new(|token| { - let arena = DcelArena::default(); - let mut dcel = Dcel::from_token(token, &arena); - - let body = dcel.new_body(); - // Mevvlfs(a, [w, n], l, f, s) - - //let op = dcel.mevvlfs(*body, [("W", [-4, 0]), ("N", [0, 4])]); - let op = dcel - .mevvlfs(*body, [("W", [-4, 0]), ("N", [0, 4])]) - .unwrap(); - let op2 = dcel.mev(*op.loop_, *op.vertices[1], ("E", [4, 0])).unwrap(); - let op3 = dcel.mev(*op.loop_, *op2.vertex, ("S", [0, -4])).unwrap(); - - dcel.melf([*op3.vertex, *op.vertices[0]], *op.loop_) - .unwrap(); - dcel.melf([*op.vertices[0], *op2.vertex], *op.loop_) - .unwrap(); - - show("cool_stuff.dot", &dcel); - - /*println!("{:?}", op.edge.lens(&dcel)); - println!("{:?}", op.vertices[0].lens(&dcel)); - println!("{:?}", op.vertices[1].lens(&dcel)); - println!("{:?}", op.loop_.lens(&dcel)); - println!("{:?}", op.face.lens(&dcel)); - println!("{:?}", op.shell.lens(&dcel));*/ - - //dbg!(body.lens(&dcel)); - - // dcel.undo(op); - - /* - - let (a, [w, n], _) = dcel.mevvls([("W", [-4, 0]), ("N", [0, 4])]); - show("1.dot", &dcel); - - let b = dcel.mve(a, ("E", [4, 0])).unwrap().0; - show("2.dot", &dcel); - - dcel.mve(a, ("S", [0, -4])).unwrap(); - show("3.dot", &dcel); - - //dcel.mel(w, n); - show("4.dot", &dcel);*/ - - /* - eprintln!( - "{} {}", - a.borrow(&dcel.token).id.unwrap(), - b.borrow(&dcel.token).id.unwrap() - );*/ - - /* - print!( - "{}", - "{}", - layFn(|f: &mut fmt::Formatter<'_>| { - v in dcel.vertices.elements.iter() { - } - - - h in dcel.half_edges.elements.iter() { - } - - Ok(()) - }) - }) - );*/ - }); -} 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()); |