diff options
Diffstat (limited to 'make.py')
-rw-r--r-- | make.py | 55 |
1 files changed, 55 insertions, 0 deletions
@@ -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) |