diff options
author | Stan Seibert <stan@mtrr.org> | 2011-08-05 18:38:02 -0400 |
---|---|---|
committer | Stan Seibert <stan@mtrr.org> | 2011-08-05 18:38:02 -0400 |
commit | 2f668983993971d8ca997e6f7d15ec086f55b702 (patch) | |
tree | 2cc07c215ca382e6cdf98adf5f901880f77bca0f /geometry.py | |
parent | ef9a4f8925f6693044f8c14a744d9c9fe3120f83 (diff) | |
parent | 643f3df7b8538d5c52ea782ec3c22406cadc7c6e (diff) | |
download | chroma-2f668983993971d8ca997e6f7d15ec086f55b702.tar.gz chroma-2f668983993971d8ca997e6f7d15ec086f55b702.tar.bz2 chroma-2f668983993971d8ca997e6f7d15ec086f55b702.zip |
merge with tony
Diffstat (limited to 'geometry.py')
-rw-r--r-- | geometry.py | 32 |
1 files changed, 11 insertions, 21 deletions
diff --git a/geometry.py b/geometry.py index ac71429..d80b730 100644 --- a/geometry.py +++ b/geometry.py @@ -49,8 +49,13 @@ class Mesh(object): self.vertices = np.array(unique_vertices) - def __getitem__(self, key): - return self.vertices[self.triangles[key]] + def assemble(self, key=slice(None), group=True): + if group: + vertex_indices = self.triangles[key] + else: + vertex_indices = self.triangles[key].flatten() + + return self.vertices[vertex_indices] def __len__(self): return len(self.triangles) @@ -167,15 +172,6 @@ def morton_order(mesh, bits): bits of the quantized center coordinates of each triangle. Each coordinate axis is quantized into 2**bits bins. """ - - #lower_bound = np.array([np.min(mesh[:,:,0]), - # np.min(mesh[:,:,1]), - # np.min(mesh[:,:,2])]) - - #upper_bound = np.array([np.max(mesh[:,:,0]), - # np.max(mesh[:,:,1]), - # np.max(mesh[:,:,2])]) - lower_bound, upper_bound = mesh.get_bounds() if bits <= 0 or bits > 10: @@ -186,8 +182,7 @@ def morton_order(mesh, bits): def quantize(x): return np.uint32((x-lower_bound)*max_value/(upper_bound-lower_bound)) - #mean_positions = quantize(np.mean(mesh, axis=1)) - mean_positions = quantize(np.mean(mesh[:], axis=1)) + mean_positions = quantize(np.mean(mesh.assemble(), axis=1)) return interleave(mean_positions, bits) @@ -288,14 +283,9 @@ class Geometry(object): i1 = np.searchsorted(zvalues_mesh, z) i2 = np.searchsorted(zvalues_mesh, z, side='right') - self.lower_bounds[i] = [np.min(self.mesh[i1:i2][:,:,0]), - np.min(self.mesh[i1:i2][:,:,1]), - np.min(self.mesh[i1:i2][:,:,2])] - - self.upper_bounds[i] = [np.max(self.mesh[i1:i2][:,:,0]), - np.max(self.mesh[i1:i2][:,:,1]), - np.max(self.mesh[i1:i2][:,:,2])] - + self.lower_bounds[i] = np.min(self.mesh.assemble(slice(i1,i2), group=False), axis=0) + self.upper_bounds[i] = np.max(self.mesh.assemble(slice(i1,i2), group=False), axis=0) + self.node_map[i] = i1 self.node_length[i] = i2-i1 self.layers[i] = layer |