summaryrefslogtreecommitdiff
path: root/make.py
diff options
context:
space:
mode:
authorStan Seibert <stan@mtrr.org>2011-08-17 14:38:45 -0400
committerStan Seibert <stan@mtrr.org>2011-08-17 14:38:45 -0400
commitb88e37c5c7de5411fb003a3c146a1b697b5813ad (patch)
treece6b6bc992a901da7e83097bfe22d2b1f3ced09f /make.py
parentee07d0165f86ef6942bffd6ae88057926ab4e775 (diff)
parent11210ce25a543875eb51cff8efc06e7f02984214 (diff)
downloadchroma-b88e37c5c7de5411fb003a3c146a1b697b5813ad.tar.gz
chroma-b88e37c5c7de5411fb003a3c146a1b697b5813ad.tar.bz2
chroma-b88e37c5c7de5411fb003a3c146a1b697b5813ad.zip
merge
Diffstat (limited to 'make.py')
-rw-r--r--make.py20
1 files changed, 15 insertions, 5 deletions
diff --git a/make.py b/make.py
index 1da5d0e..523b10f 100644
--- a/make.py
+++ b/make.py
@@ -1,12 +1,12 @@
import numpy as np
-from geometry import Mesh
-from transform import rotate
-from itertoolset import *
+from chroma.geometry import Mesh
+from chroma.transform import rotate
+from chroma.itertoolset import *
def mesh_grid(grid):
return np.vstack(zip(grid[:-1].flatten(),grid[1:].flatten(),np.roll(grid[1:],-1,1).flatten()) + zip(grid[:-1].flatten(),np.roll(grid[1:],-1,1).flatten(),np.roll(grid[:-1],-1,1).flatten()))
-def linear_extrude(x1, y1, height, x2=None, y2=None):
+def linear_extrude(x1, y1, height, x2=None, y2=None, center=None):
"""
Return the solid mesh formed by linearly extruding the polygon formed by
the x and y points `x1` and `y1` by a distance `height`. If `x2` and `y2`
@@ -41,6 +41,9 @@ def linear_extrude(x1, y1, height, x2=None, y2=None):
vertices = np.fromiter(flatten(roundrobin(*vertex_iterators)), float)
vertices = vertices.reshape((len(vertices)//3,3))
+ if center is not None:
+ vertices += center
+
triangles = mesh_grid(np.arange(len(vertices)).reshape((len(x1),len(vertices)//len(x1))).transpose()[::-1])
return Mesh(vertices, triangles, remove_duplicate_vertices=True)
@@ -65,8 +68,15 @@ def rotate_extrude(x, y, nsteps=64):
return Mesh(vertices, triangles, remove_duplicate_vertices=True)
-def cube(size=1):
+def box(dx, dy, dz, center=(0,0,0)):
+ "Return a box with linear dimensions `dx`, `dy`, and `dz`."
+ return linear_extrude([-dx/2.0,dx/2.0,dx/2.0,-dx/2.0],[-dy/2.0,-dy/2.0,dy/2.0,dy/2.0],height=dz,center=center)
+
+def cube(size=1, height=None):
"Return a cube mesh whose sides have length `size`."
+ if height is None:
+ height = size
+
return linear_extrude([-size/2.0,size/2.0,size/2.0,-size/2.0],[-size/2.0,-size/2.0,size/2.0,size/2.0], height=size)
def cylinder(radius=1, height=2, radius2=None, nsteps=64):