tree_thing - fix non-manifold issue (I think)

This commit is contained in:
Chris Hodapp 2021-07-06 18:52:41 -04:00
parent 603acc8832
commit 070b1e46b8

View File

@ -1,8 +1,6 @@
# Hasty conversion from the Rust in prosha/src/examples.rs & Barbs # Hasty conversion from the Rust in prosha/src/examples.rs & Barbs
# This is mostly right, except: # This is mostly right, except:
# - Something near the transition is wrong. Some verts are in
# duplicate positions. The Rust code may have this same issue.
# - It doesn't yet do creases. # - It doesn't yet do creases.
import numpy as np import numpy as np
@ -117,9 +115,9 @@ class TreeThing(object):
self.faces.append(verts) self.faces.append(verts)
return return
xf2 = xf.compose(self.incr)
if depth > 0: if depth > 0:
# Just recurse on the current path: # Just recurse on the current path:
xf2 = xf.compose(self.incr)
n0 = len(self.verts) n0 = len(self.verts)
self.verts.extend(xf2.apply_to(self.base)) self.verts.extend(xf2.apply_to(self.base))
@ -135,9 +133,9 @@ class TreeThing(object):
self.child(xf2, depth - 1, [n0, n0 + 1, n0 + 2, n0 + 3]); self.child(xf2, depth - 1, [n0, n0 + 1, n0 + 2, n0 + 3]);
else: else:
n = len(self.verts) n = len(self.verts)
self.verts.extend(xf.apply_to(self.base)) self.verts.extend(xf2.apply_to(self.base))
m01 = len(self.verts) m01 = len(self.verts)
self.verts.extend(xf.apply_to(self.trans)) self.verts.extend(xf2.apply_to(self.trans))
m12, m23, m30, c = m01 + 1, m01 + 2, m01 + 3, m01 + 4 m12, m23, m30, c = m01 + 1, m01 + 2, m01 + 3, m01 + 4
self.faces.extend([ self.faces.extend([
# two faces straddling edge from vertex 0: # two faces straddling edge from vertex 0:
@ -159,7 +157,7 @@ class TreeThing(object):
(b[3], m30, b[0]), (b[3], m30, b[0]),
]) ])
self.child(xf.compose(self.splits[0]), self.depth, [c, m12, n+2, m23]); self.child(xf2.compose(self.splits[0]), self.depth, [c, m12, n+2, m23]);
self.child(xf.compose(self.splits[1]), self.depth, [c, m01, n+1, m12]); self.child(xf2.compose(self.splits[1]), self.depth, [c, m01, n+1, m12]);
self.child(xf.compose(self.splits[2]), self.depth, [c, m30, n+0, m01]); self.child(xf2.compose(self.splits[2]), self.depth, [c, m30, n+0, m01]);
self.child(xf.compose(self.splits[3]), self.depth, [c, m23, n+3, m30]); self.child(xf2.compose(self.splits[3]), self.depth, [c, m23, n+3, m30]);