10 backfront_space_inside = 12;
12 backfront_mate_size = 25;
13 tower_frontheight = 20;
17 tower_over_angle = 45;
18 tower_wall_thick = 1.6;
19 tower_base_height = 10;
20 tower_forehead_angle = 30;
27 test_thicks = [9,14,21];
29 module Tests(){ ////toplevel
30 for (thicki=[0:len(test_thicks)-1]) {
31 translate([thicki*test_width-0.5, 0, 0]) {
34 test_thicks[thicki] + led_depth,
36 translate([test_width/2, -1, test_height/2])
38 cylinder(r=led_dia/2, h=led_depth+1, $fn=30);
48 tower_overhang = led_dia * 2.5;
50 tower_over_max_y = tower_overhang * sin(tower_over_angle);
51 tower_over_max_z = tower_frontheight + tower_overhang * cos(tower_over_angle);
52 tower_total_max_z = tower_over_max_z + vert_space_inside + led_depth;
53 tower_rearwall_y = -(backfront_space_inside + tower_wall_thick);
55 backfront_mate_extra = (backfront_mate_size - (-tower_rearwall_y));
57 module TowerWallCrossSection(){
58 // generates a 2D shape - a polygon
59 // x is what is going to be -y
60 // y is what is going to be z
62 [0, tower_frontheight],
63 [-tower_over_max_y, tower_over_max_z],
65 + tan(tower_forehead_angle) * (vert_space_inside + led_depth),
67 [-tower_rearwall_y, tower_total_max_z],
68 [-tower_rearwall_y, 0],
69 [-tower_rearwall_y, -tower_base_height],
70 [-backfront_mate_extra, -tower_base_height]]);
73 module TowerWallSomeEdge(front){
76 TowerWallCrossSection();
77 translate([front ? 0.10 : -0.10, 0])
78 TowerWallCrossSection();
80 circle(r=tower_wall_thick, $fn=8);
84 module TowerBulkCrossSection(){
86 TowerWallCrossSection();
88 translate([-tower_over_max_y/2,
89 tower_frontheight + tower_overhang*sin(tower_over_angle)/2])
90 circle(r = led_depth);
91 TowerWallSomeEdge(true);
98 module TowerRearWallCrossSection(){
100 TowerWallCrossSection();
103 translate([0,-10]) square([100, 10+tower_frontheight]);
104 TowerWallSomeEdge(false);
106 TowerBulkCrossSection();
112 %TowerWallCrossSection();
113 //TowerBulkCrossSection();
114 TowerRearWallCrossSection();
118 //TowerWallSomeEdge(false);
119 //TowerWallFrontEdge();