summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--geometry.py13
-rw-r--r--make.py3
2 files changed, 4 insertions, 12 deletions
diff --git a/geometry.py b/geometry.py
index 9ef49bc..b08de54 100644
--- a/geometry.py
+++ b/geometry.py
@@ -39,16 +39,9 @@ class Mesh(object):
return np.min(self.vertices, axis=0), np.max(self.vertices, axis=0)
def remove_duplicate_vertices(self):
- unique_vertices = list(unique_everseen(map(tuple, self.vertices)))
-
- if len(unique_vertices) == len(self.vertices):
- return
-
- for i in range(len(self.triangles)):
- for j in range(3):
- self.triangles[i,j] = unique_vertices.index(tuple(self.vertices[self.triangles[i,j]]))
-
- self.vertices = np.array(unique_vertices)
+ unique_vertices, inverse = np.unique(self.vertices.view([('', self.vertices.dtype)]*self.vertices.shape[1]), return_inverse=True)
+ self.vertices = unique_vertices.view(self.vertices.dtype).reshape((unique_vertices.shape[0], self.vertices.shape[1]))
+ self.triangles = np.vectorize(lambda i: inverse[i])(self.triangles)
def assemble(self, key=slice(None), group=True):
if group:
diff --git a/make.py b/make.py
index 8f07b05..ed02cb1 100644
--- a/make.py
+++ b/make.py
@@ -55,8 +55,7 @@ def segmented_cylinder(radius, height=2, theta=np.pi/32, n=50):
y = np.concatenate(([-height/2.0] * n,
np.linspace(-height/2.0, height/2.0, n, endpoint=False),
[height/2.0] * (n+1)))
- #return x,y
- return rotate_extrude(x, y, theta, remove_duplicate_vertices=False)
+ return rotate_extrude(x, y, theta)
def sphere(radius=1, theta=np.pi/32):
profile_angles = np.arange(-np.pi/2, np.pi/2+theta, theta)