aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs96
-rw-r--r--src/obj_export.rs12
2 files changed, 10 insertions, 98 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 6b0542e..29e5a12 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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());