cookie_cutter/cookie_generator.py

57 lines
1.6 KiB
Python

#print "Hello"
from __future__ import division
from math import sqrt
from math import atan
def distance(pos1, pos2):
return sqrt(sum([ (x[0] -x[1])**2 for x in zip(pos1, pos2)]))
def compute_lengths(positions):
lengths = []
for i in range(len(positions)):
if (i < len(positions) -1):
lengths.append(distance(positions[i], positions[i+1]))
else:
lengths.append(distance(positions[i], positions[0]))
return lengths
def direction(pos1, pos2):
if ((pos1[1] - pos2[1]) != 0):
if (atan((pos1[0]-pos2[0])/(pos1[1] - pos2[1]))!= 0):
return atan((pos1[0]-pos2[0])/(pos1[1] - pos2[1]))*180/3.1415
def compute_angles(positions):
return [direction(x, positions[(i+1)% len(positions)]) for i, x in enumerate(positions)]
def generate_scad_script(positions, angles, lengths):
#positions[len(positions) -1] = positions[0]
text = ""
for element in zip(positions, angles, lengths):
text += "translate(" + str(element[0]) + ") "
text += "rotate([0, 0," + str(element[1]) +"]) "
text += "cube([" + str(element[2]) + ", 2, 6]);\n"
return text
def main():
sample_positions = [
[0, 3, 0],
[5, 5, 0],
[-8, 6, 0]
]
lengths = compute_lengths(sample_positions)
angles = compute_angles(sample_positions)
print lengths
print angles
print distance([1, 0, 3], [2, 5, 5])
print direction([1, 0, 3], [2, 5, 5])
print generate_scad_script(sample_positions, angles, lengths )
main()