summaryrefslogtreecommitdiff
path: root/make.py
diff options
context:
space:
mode:
Diffstat (limited to 'make.py')
-rw-r--r--make.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/make.py b/make.py
new file mode 100644
index 0000000..72b8406
--- /dev/null
+++ b/make.py
@@ -0,0 +1,55 @@
+import numpy as np
+from mesh import Mesh
+
+def cylinder(radius=1.0, height=1.0, theta=np.pi/32):
+ angles = np.arange(0, 2*np.pi, theta)
+
+ vertices = np.empty((2*len(angles) + 2, 3), dtype=np.float32)
+ vertices[:2*len(angles),0] = radius*np.tile(np.cos(angles),2)
+ vertices[:2*len(angles),1] = radius*np.tile(np.sin(angles),2)
+ vertices[:len(angles),2] = height/2.0
+ vertices[len(angles):2*len(angles),2] = -height/2.0
+ vertices[-2] = [0,0,height/2.0]
+ vertices[-1] = [0,0,-height/2.0]
+
+ triangles = np.zeros((len(angles)*4, 3), dtype=np.uint32)
+
+ # top
+ triangles[:len(angles),0] = np.arange(len(angles))
+ triangles[:len(angles),2] = np.roll(np.arange(len(angles)),1)
+ triangles[:len(angles),1] = len(vertices) - 2
+
+ # bottom
+ triangles[len(angles):2*len(angles),0] = \
+ np.arange(len(angles),2*len(angles))
+ triangles[len(angles):2*len(angles),1] = \
+ np.roll(np.arange(len(angles),2*len(angles)),1)
+ triangles[len(angles):2*len(angles),2] = len(vertices) - 1
+
+ # side
+ triangles[2*len(angles):3*len(angles),0] = np.arange(len(angles))
+ triangles[2*len(angles):3*len(angles),2] = \
+ np.arange(len(angles),2*len(angles))
+ triangles[2*len(angles):3*len(angles),1] = \
+ np.roll(np.arange(len(angles),2*len(angles)),1)
+
+ # side
+ triangles[3*len(angles):4*len(angles),0] = np.arange(len(angles))
+ triangles[3*len(angles):4*len(angles),2] = \
+ np.roll(np.arange(len(angles),2*len(angles)),1)
+ triangles[3*len(angles):4*len(angles),1] = \
+ np.roll(np.arange(len(angles)),1)
+
+ return Mesh(vertices, triangles)
+
+if __name__ == '__main__':
+ from solid import Solid
+ from geometry import Geometry
+ from view import view
+
+ cylinder_mesh = cylinder()
+ cylinder_solid = Solid(0, cylinder_mesh)
+ geometry = Geometry([cylinder_solid])
+ geometry.build(bits=8)
+
+ view(geometry)