import numpy as np
import cPickle as pickle
from numpy2stl import writeSTL
with open('../data/10^2.pkl') as f:
data=pickle.load(f)["iterations"]
writer = STL_Writer('test.stl', ascii=False)
WIDTH = 1
num_y, num_x = data.shape
x_edge = (num_x//2)*WIDTH + WIDTH/2
y_edge = (num_y//2)*WIDTH + WIDTH/2
x_grid = np.linspace(-x_edge, x_edge, num_x+1)
y_grid = np.linspace(y_edge, -y_edge, num_y+1)
left_x = np.column_stack( (x_grid[0:-1],)*num_x ).transpose()
right_x = np.column_stack( (x_grid[1:], )*num_x ).transpose()
top_y = np.column_stack( (y_grid[0:-1],)*num_y )
bot_y = np.column_stack( (y_grid[1:], )*num_y )
p4 = np.dstack( (left_x, bot_y, data) )
p3 = np.dstack( (left_x, top_y, data) )
p2 = np.dstack( (right_x, top_y, data) )
p1 = np.dstack( (right_x, bot_y, data) )
norm = np.array( [0,0,1]*(p1.shape[0]*p1.shape[1]) ).reshape( p1.shape )
triangles_1 = np.dstack( (norm, p1,p2,p3) )
triangles_2 = np.dstack( (norm, p1,p3,p4) )
triangles = np.vstack( (triangles_1, triangles_2) )
triangles = triangles.reshape( ( triangles.shape[0]*triangles.shape[1],12) )
writer.add_faces(triangles)
p4 = np.dstack( (left_x[:-1,:], bot_y[:-1,:], data[1:,:]) )
p3 = np.dstack( (left_x[:-1,:], bot_y[:-1,:], data[:-1,:]) )
p2 = np.dstack( (right_x[:-1,:], bot_y[:-1,:], data[:-1,:]) )
p1 = np.dstack( (right_x[:-1,:], bot_y[:-1,:], data[1:,:]) )
norm = np.array( [0,-1,0]*(p1.shape[0]*p1.shape[1]) ).reshape( p1.shape )
triangles_1 = np.dstack( (norm, p1,p2,p3) )
triangles_2 = np.dstack( (norm, p1,p3,p4) )
triangles = np.vstack( (triangles_1, triangles_2) )
triangles = np.delete( triangles, np.where(triangles[:,:,5]==triangles[:,:,8] ), axis=1 )
triangles = triangles.reshape( ( triangles.shape[0]*triangles.shape[1],12) )
writer.add_faces(triangles)
p1 = np.dstack( (left_x[-1,:], bot_y[-1,:], np.zeros( (1,num_x) )) )
p2 = np.dstack( (left_x[-1,:], bot_y[-1,:], data[-1,:]) )
p3 = np.dstack( (right_x[-1,:], bot_y[-1,:], data[-1,:]) )
p4 = np.dstack( (right_x[-1,:], bot_y[-1,:], np.zeros( (1,num_x) )) )
norm = np.array( [0,-1,0]*(p1.shape[0]*p1.shape[1]) ).reshape( p1.shape )
triangles_1 = np.dstack( (norm, p1,p2,p3) )
triangles_2 = np.dstack( (norm, p1,p3,p4) )
triangles = np.vstack( (triangles_1, triangles_2) )
triangles = triangles.reshape( ( triangles.shape[0]*triangles.shape[1],12) )
writer.add_faces(triangles)
p1 = np.dstack( (left_x[:,1:], top_y[:,1:], data[:,:-1] ) )
p2 = np.dstack( (left_x[:,1:], top_y[:,1:], data[:,1:] ) )
p3 = np.dstack( (left_x[:,1:], bot_y[:,1:], data[:,1:] ) )
p4 = np.dstack( (left_x[:,1:], bot_y[:,1:], data[:,:-1] ) )
norm = np.array( [-1,0,0]*(p1.shape[0]*p1.shape[1]) ).reshape( p1.shape )
triangles_1 = np.dstack( (norm, p1,p2,p3) )
triangles_2 = np.dstack( (norm, p1,p3,p4) )
triangles = np.vstack( (triangles_1, triangles_2) )
triangles = np.delete( triangles, np.where(triangles[:,:,5]==triangles[:,:,8] ), axis=1 )
triangles = triangles.reshape( ( triangles.shape[0]*triangles.shape[1],12) )
writer.add_faces(triangles)
p1 = np.dstack( (left_x[:,1], top_y[:,1], np.zeros( (num_y,) ) ) )
p2 = np.dstack( (left_x[:,1], top_y[:,1], data[:,1]) )
p3 = np.dstack( (left_x[:,1], bot_y[:,1], data[:,1]) )
p4 = np.dstack( (left_x[:,1], bot_y[:,1], np.zeros( (num_y,) ) ) )
norm = np.array( [-1,0,0]*(p1.shape[0]*p1.shape[1]) ).reshape( p1.shape )
triangles_1 = np.dstack( (norm, p1,p2,p3) )
triangles_2 = np.dstack( (norm, p1,p3,p4) )
triangles = np.vstack( (triangles_1, triangles_2) )
triangles = triangles.reshape( ( triangles.shape[0]*triangles.shape[1],12) )
writer.add_faces(triangles)
p1 = np.dstack( (right_x[1:,:], top_y[1:,:], data[:-1,:]) )
p2 = np.dstack( (right_x[1:,:], top_y[1:,:], data[1:,:]) )
p3 = np.dstack( (left_x[1:,:], top_y[1:,:], data[1:,:]) )
p4 = np.dstack( (left_x[1:,:], top_y[1:,:], data[:-1,:]) )
norm = np.array( [0,1,0]*(p1.shape[0]*p1.shape[1]) ).reshape( p1.shape )
triangles_1 = np.dstack( (norm, p1,p2,p3) )
triangles_2 = np.dstack( (norm, p1,p3,p4) )
triangles = np.vstack( (triangles_1, triangles_2) )
triangles = np.delete( triangles, np.where(triangles[:,:,5]==triangles[:,:,8] ), axis=1 )
triangles = triangles.reshape( ( triangles.shape[0]*triangles.shape[1],12) )
writer.add_faces(triangles)
p1 = np.dstack( (right_x[1,:], top_y[1,:], np.zeros( (1,num_x) ) ) )
p2 = np.dstack( (right_x[1,:], top_y[1,:], data[1,:]) )
p3 = np.dstack( (left_x[1,:], top_y[1,:], data[1,:]) )
p4 = np.dstack( (left_x[1,:], top_y[1,:], np.zeros( (1,num_x) ) ) )
norm = np.array( [0,1,0]*(p1.shape[0]*p1.shape[1]) ).reshape( p1.shape )
triangles_1 = np.dstack( (norm, p1,p2,p3) )
triangles_2 = np.dstack( (norm, p1,p3,p4) )
triangles = np.vstack( (triangles_1, triangles_2) )
triangles = triangles.reshape( ( triangles.shape[0]*triangles.shape[1],12) )
writer.add_faces(triangles)
p1 = np.dstack( (right_x[:,:-1], bot_y[:,:-1], data[:,1:]) )
p2 = np.dstack( (right_x[:,:-1], bot_y[:,:-1], data[:,:-1]) )
p3 = np.dstack( (right_x[:,:-1], top_y[:,:-1], data[:,:-1]) )
p4 = np.dstack( (right_x[:,:-1], top_y[:,:-1], data[:,1:]) )
norm = np.array( [1,0,0]*(p1.shape[0]*p1.shape[1]) ).reshape( p1.shape )
triangles_1 = np.dstack( (norm, p1,p2,p3) )
triangles_2 = np.dstack( (norm, p1,p3,p4) )
triangles = np.vstack( (triangles_1, triangles_2) )
triangles = np.delete( triangles, np.where(triangles[:,:,5]==triangles[:,:,8] ), axis=1 )
triangles = triangles.reshape( ( triangles.shape[0]*triangles.shape[1],12) )
writer.add_faces(triangles)
p1 = np.dstack( (right_x[:,-1], bot_y[:,-1], np.zeros( (num_y,) ) ) )
p2 = np.dstack( (right_x[:,-1], bot_y[:,-1], data[:,-1]) )
p3 = np.dstack( (right_x[:,-1], top_y[:,-1], data[:,-1]) )
p4 = np.dstack( (right_x[:,-1], top_y[:,-1], np.zeros( (num_y,) ) ) )
norm = np.array( [1,0,0]*(p1.shape[0]*p1.shape[1]) ).reshape( p1.shape )
triangles_1 = np.dstack( (norm, p1,p2,p3) )
triangles_2 = np.dstack( (norm, p1,p3,p4) )
triangles = np.vstack( (triangles_1, triangles_2) )
triangles = triangles.reshape( ( triangles.shape[0]*triangles.shape[1],12) )
writer.add_faces(triangles)
writer.close()