diff --git a/examples.scad b/examples.scad new file mode 100644 index 0000000..a30e01d --- /dev/null +++ b/examples.scad @@ -0,0 +1,47 @@ +include ; + +thickness = 3.1; +x = 100; +y = 200; +z = 50; +height = 75; + + +module support() +{ + lasercutoutSquare(thickness=thickness, x=x, y=height, + simple_tab_holes=[ + [MID, x*.25-thickness/2, height/2], + [MID, x*.75-thickness/2, height/2] + ], + captive_nuts=[[UP, x/2, height] ] + ); +} + +module stut() +{ + lasercutoutSquare(thickness=thickness, x=x, y=y-thickness*6, + simple_tabs=[ + [UP, x*.75, y-thickness*6], [UP, x*.25, y-thickness*6], + [DOWN, x*.75, 0], [DOWN, x*.25, 0] + ] + ); +} + +module box() +{ + circles_remove_a = [ + [], + [[x/4, x/2, y/2]] + ]; + captive_nut_holes_a = [ + [[UP, x/2, y-2*thickness,], [DOWN, x/2, 0,], ] + ]; + lasercutoutBox(thickness = thickness, x=x, y=y, z=z, sides=6, captive_nut_holes_a = captive_nut_holes_a, circles_remove_a=circles_remove_a ); +} + + +translate([0,thickness*3,0]) rotate([90,0,0]) support(); +translate([0,y-thickness*2,0]) rotate([90,0,0]) support(); +translate([0,thickness*3,height/2]) stut(); +translate([0,0,height]) box(); diff --git a/generate.dxf b/generate.dxf new file mode 100644 index 0000000..73f845b --- /dev/null +++ b/generate.dxf @@ -0,0 +1,6142 @@ + 0 +SECTION + 2 +BLOCKS + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +LINE + 8 +0 + 10 +10.95 + 20 +1074.8 + 11 +16.425 + 21 +1074.8 + 0 +LINE + 8 +0 + 10 +16.425 + 20 +1074.8 + 11 +16.425 + 21 +1071.7 + 0 +LINE + 8 +0 + 10 +16.425 + 20 +1071.7 + 11 +21.9 + 21 +1071.7 + 0 +LINE + 8 +0 + 10 +21.9 + 20 +1071.7 + 11 +21.9 + 21 +1074.8 + 0 +LINE + 8 +0 + 10 +21.9 + 20 +1074.8 + 11 +27.375 + 21 +1074.8 + 0 +LINE + 8 +0 + 10 +27.375 + 20 +1074.8 + 11 +27.375 + 21 +1071.7 + 0 +LINE + 8 +0 + 10 +27.375 + 20 +1071.7 + 11 +32.85 + 21 +1071.7 + 0 +LINE + 8 +0 + 10 +32.85 + 20 +1071.7 + 11 +32.85 + 21 +1074.8 + 0 +LINE + 8 +0 + 10 +32.85 + 20 +1074.8 + 11 +38.325 + 21 +1074.8 + 0 +LINE + 8 +0 + 10 +38.325 + 20 +1074.8 + 11 +38.325 + 21 +1071.7 + 0 +LINE + 8 +0 + 10 +38.325 + 20 +1071.7 + 11 +43.8 + 21 +1071.7 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +1071.7 + 11 +43.8 + 21 +1099.03 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +1099.03 + 11 +46.9 + 21 +1099.03 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +1099.03 + 11 +46.9 + 21 +1123.25 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +1123.25 + 11 +43.8 + 21 +1123.25 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +1123.25 + 11 +43.8 + 21 +1147.47 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +1147.47 + 11 +46.9 + 21 +1147.47 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +1147.47 + 11 +46.9 + 21 +1171.7 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +1171.7 + 11 +43.8 + 21 +1171.7 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +1171.7 + 11 +43.8 + 21 +1195.93 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +1195.93 + 11 +46.9 + 21 +1195.93 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +1195.93 + 11 +46.9 + 21 +1220.15 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +1220.15 + 11 +43.8 + 21 +1220.15 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +1220.15 + 11 +43.8 + 21 +1244.38 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +1244.38 + 11 +46.9 + 21 +1244.38 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +1244.38 + 11 +46.9 + 21 +1271.7 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +1271.7 + 11 +38.325 + 21 +1271.7 + 0 +LINE + 8 +0 + 10 +38.325 + 20 +1271.7 + 11 +38.325 + 21 +1268.6 + 0 +LINE + 8 +0 + 10 +38.325 + 20 +1268.6 + 11 +32.85 + 21 +1268.6 + 0 +LINE + 8 +0 + 10 +32.85 + 20 +1268.6 + 11 +32.85 + 21 +1271.7 + 0 +LINE + 8 +0 + 10 +32.85 + 20 +1271.7 + 11 +27.375 + 21 +1271.7 + 0 +LINE + 8 +0 + 10 +27.375 + 20 +1271.7 + 11 +27.375 + 21 +1268.6 + 0 +LINE + 8 +0 + 10 +27.375 + 20 +1268.6 + 11 +21.9 + 21 +1268.6 + 0 +LINE + 8 +0 + 10 +21.9 + 20 +1268.6 + 11 +21.9 + 21 +1271.7 + 0 +LINE + 8 +0 + 10 +21.9 + 20 +1271.7 + 11 +16.425 + 21 +1271.7 + 0 +LINE + 8 +0 + 10 +16.425 + 20 +1271.7 + 11 +16.425 + 21 +1268.6 + 0 +LINE + 8 +0 + 10 +16.425 + 20 +1268.6 + 11 +10.95 + 21 +1268.6 + 0 +LINE + 8 +0 + 10 +10.95 + 20 +1268.6 + 11 +10.95 + 21 +1271.7 + 0 +LINE + 8 +0 + 10 +10.95 + 20 +1271.7 + 11 +5.47499 + 21 +1271.7 + 0 +LINE + 8 +0 + 10 +5.47499 + 20 +1271.7 + 11 +5.47499 + 21 +1268.6 + 0 +LINE + 8 +0 + 10 +5.47499 + 20 +1268.6 + 11 +-3.09999 + 21 +1268.6 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +1268.6 + 11 +-3.09999 + 21 +1244.38 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +1244.38 + 11 +0 + 21 +1244.38 + 0 +LINE + 8 +0 + 10 +0 + 20 +1244.38 + 11 +0 + 21 +1220.15 + 0 +LINE + 8 +0 + 10 +0 + 20 +1220.15 + 11 +-3.09999 + 21 +1220.15 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +1220.15 + 11 +-3.09999 + 21 +1195.93 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +1195.93 + 11 +0 + 21 +1195.93 + 0 +LINE + 8 +0 + 10 +0 + 20 +1195.93 + 11 +0 + 21 +1171.7 + 0 +LINE + 8 +0 + 10 +0 + 20 +1171.7 + 11 +-3.09999 + 21 +1171.7 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +1171.7 + 11 +-3.09999 + 21 +1147.47 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +1147.47 + 11 +0 + 21 +1147.47 + 0 +LINE + 8 +0 + 10 +0 + 20 +1147.47 + 11 +0 + 21 +1123.25 + 0 +LINE + 8 +0 + 10 +0 + 20 +1123.25 + 11 +-3.09999 + 21 +1123.25 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +1123.25 + 11 +-3.09999 + 21 +1099.03 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +1099.03 + 11 +0 + 21 +1099.03 + 0 +LINE + 8 +0 + 10 +0 + 20 +1099.03 + 11 +0 + 21 +1074.8 + 0 +LINE + 8 +0 + 10 +0 + 20 +1074.8 + 11 +5.47499 + 21 +1074.8 + 0 +LINE + 8 +0 + 10 +5.47499 + 20 +1074.8 + 11 +5.47499 + 21 +1071.7 + 0 +LINE + 8 +0 + 10 +5.47499 + 20 +1071.7 + 11 +10.95 + 21 +1071.7 + 0 +LINE + 8 +0 + 10 +10.95 + 20 +1071.7 + 11 +10.95 + 21 +1074.8 + 0 +LINE + 8 +0 + 10 +10.95 + 20 +871.7 + 11 +16.425 + 21 +871.7 + 0 +LINE + 8 +0 + 10 +16.425 + 20 +871.7 + 11 +16.425 + 21 +868.6 + 0 +LINE + 8 +0 + 10 +16.425 + 20 +868.6 + 11 +21.9 + 21 +868.6 + 0 +LINE + 8 +0 + 10 +21.9 + 20 +868.6 + 11 +21.9 + 21 +871.7 + 0 +LINE + 8 +0 + 10 +21.9 + 20 +871.7 + 11 +27.375 + 21 +871.7 + 0 +LINE + 8 +0 + 10 +27.375 + 20 +871.7 + 11 +27.375 + 21 +868.6 + 0 +LINE + 8 +0 + 10 +27.375 + 20 +868.6 + 11 +32.85 + 21 +868.6 + 0 +LINE + 8 +0 + 10 +32.85 + 20 +868.6 + 11 +32.85 + 21 +871.7 + 0 +LINE + 8 +0 + 10 +32.85 + 20 +871.7 + 11 +38.325 + 21 +871.7 + 0 +LINE + 8 +0 + 10 +38.325 + 20 +871.7 + 11 +38.325 + 21 +868.6 + 0 +LINE + 8 +0 + 10 +38.325 + 20 +868.6 + 11 +43.8 + 21 +868.6 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +868.6 + 11 +43.8 + 21 +895.925 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +895.925 + 11 +46.9 + 21 +895.925 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +895.925 + 11 +46.9 + 21 +920.15 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +920.15 + 11 +43.8 + 21 +920.15 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +920.15 + 11 +43.8 + 21 +944.375 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +944.375 + 11 +46.9 + 21 +944.375 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +944.375 + 11 +46.9 + 21 +968.6 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +968.6 + 11 +43.8 + 21 +968.6 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +968.6 + 11 +43.8 + 21 +992.825 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +992.825 + 11 +46.9 + 21 +992.825 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +992.825 + 11 +46.9 + 21 +1017.05 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +1017.05 + 11 +43.8 + 21 +1017.05 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +1017.05 + 11 +43.8 + 21 +1041.28 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +1041.28 + 11 +46.9 + 21 +1041.28 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +1041.28 + 11 +46.9 + 21 +1065.5 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +1065.5 + 11 +43.8 + 21 +1065.5 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +1065.5 + 11 +43.8 + 21 +1068.6 + 0 +LINE + 8 +0 + 10 +43.8 + 20 +1068.6 + 11 +38.325 + 21 +1068.6 + 0 +LINE + 8 +0 + 10 +38.325 + 20 +1068.6 + 11 +38.325 + 21 +1065.5 + 0 +LINE + 8 +0 + 10 +38.325 + 20 +1065.5 + 11 +32.85 + 21 +1065.5 + 0 +LINE + 8 +0 + 10 +32.85 + 20 +1065.5 + 11 +32.85 + 21 +1068.6 + 0 +LINE + 8 +0 + 10 +32.85 + 20 +1068.6 + 11 +27.375 + 21 +1068.6 + 0 +LINE + 8 +0 + 10 +27.375 + 20 +1068.6 + 11 +27.375 + 21 +1065.5 + 0 +LINE + 8 +0 + 10 +27.375 + 20 +1065.5 + 11 +21.9 + 21 +1065.5 + 0 +LINE + 8 +0 + 10 +21.9 + 20 +1065.5 + 11 +21.9 + 21 +1068.6 + 0 +LINE + 8 +0 + 10 +21.9 + 20 +1068.6 + 11 +16.425 + 21 +1068.6 + 0 +LINE + 8 +0 + 10 +16.425 + 20 +1068.6 + 11 +16.425 + 21 +1065.5 + 0 +LINE + 8 +0 + 10 +16.425 + 20 +1065.5 + 11 +10.95 + 21 +1065.5 + 0 +LINE + 8 +0 + 10 +10.95 + 20 +1065.5 + 11 +10.95 + 21 +1068.6 + 0 +LINE + 8 +0 + 10 +10.95 + 20 +1068.6 + 11 +5.47499 + 21 +1068.6 + 0 +LINE + 8 +0 + 10 +5.47499 + 20 +1068.6 + 11 +5.47499 + 21 +1065.5 + 0 +LINE + 8 +0 + 10 +5.47499 + 20 +1065.5 + 11 +-3.09999 + 21 +1065.5 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +1065.5 + 11 +-3.09999 + 21 +1041.28 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +1041.28 + 11 +0 + 21 +1041.28 + 0 +LINE + 8 +0 + 10 +0 + 20 +1041.28 + 11 +0 + 21 +1017.05 + 0 +LINE + 8 +0 + 10 +0 + 20 +1017.05 + 11 +-3.09999 + 21 +1017.05 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +1017.05 + 11 +-3.09999 + 21 +992.825 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +992.825 + 11 +0 + 21 +992.825 + 0 +LINE + 8 +0 + 10 +0 + 20 +992.825 + 11 +0 + 21 +968.6 + 0 +LINE + 8 +0 + 10 +0 + 20 +968.6 + 11 +-3.09999 + 21 +968.6 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +968.6 + 11 +-3.09999 + 21 +944.375 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +944.375 + 11 +0 + 21 +944.375 + 0 +LINE + 8 +0 + 10 +0 + 20 +944.375 + 11 +0 + 21 +920.15 + 0 +LINE + 8 +0 + 10 +0 + 20 +920.15 + 11 +-3.09999 + 21 +920.15 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +920.15 + 11 +-3.09999 + 21 +895.925 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +895.925 + 11 +0 + 21 +895.925 + 0 +LINE + 8 +0 + 10 +0 + 20 +895.925 + 11 +0 + 21 +871.7 + 0 +LINE + 8 +0 + 10 +0 + 20 +871.7 + 11 +5.47499 + 21 +871.7 + 0 +LINE + 8 +0 + 10 +5.47499 + 20 +871.7 + 11 +5.47499 + 21 +868.6 + 0 +LINE + 8 +0 + 10 +5.47499 + 20 +868.6 + 11 +10.95 + 21 +868.6 + 0 +LINE + 8 +0 + 10 +10.95 + 20 +868.6 + 11 +10.95 + 21 +871.7 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +818.6 + 11 +35.175 + 21 +818.6 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +818.6 + 11 +35.175 + 21 +815.5 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +815.5 + 11 +46.9 + 21 +815.5 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +815.5 + 11 +46.9 + 21 +818.6 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +818.6 + 11 +58.625 + 21 +818.6 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +818.6 + 11 +58.625 + 21 +815.5 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +815.5 + 11 +70.35 + 21 +815.5 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +815.5 + 11 +70.35 + 21 +818.6 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +818.6 + 11 +82.075 + 21 +818.6 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +818.6 + 11 +82.075 + 21 +815.5 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +815.5 + 11 +96.9 + 21 +815.5 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +815.5 + 11 +96.9 + 21 +824.075 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +824.075 + 11 +93.8 + 21 +824.075 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +824.075 + 11 +93.8 + 21 +829.55 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +829.55 + 11 +96.9 + 21 +829.55 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +829.55 + 11 +96.9 + 21 +835.025 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +835.025 + 11 +93.8 + 21 +835.025 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +835.025 + 11 +93.8 + 21 +840.5 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +840.5 + 11 +96.9 + 21 +840.5 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +840.5 + 11 +96.9 + 21 +845.975 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +845.975 + 11 +93.8 + 21 +845.975 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +845.975 + 11 +93.8 + 21 +851.45 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +851.45 + 11 +96.9 + 21 +851.45 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +851.45 + 11 +96.9 + 21 +856.925 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +856.925 + 11 +93.8 + 21 +856.925 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +856.925 + 11 +93.8 + 21 +862.4 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +862.4 + 11 +82.075 + 21 +862.4 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +862.4 + 11 +82.075 + 21 +865.5 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +865.5 + 11 +70.35 + 21 +865.5 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +865.5 + 11 +70.35 + 21 +862.4 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +862.4 + 11 +58.625 + 21 +862.4 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +862.4 + 11 +58.625 + 21 +865.5 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +865.5 + 11 +46.9 + 21 +865.5 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +865.5 + 11 +46.9 + 21 +862.4 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +862.4 + 11 +35.175 + 21 +862.4 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +862.4 + 11 +35.175 + 21 +865.5 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +865.5 + 11 +23.45 + 21 +865.5 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +865.5 + 11 +23.45 + 21 +862.4 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +862.4 + 11 +11.725 + 21 +862.4 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +862.4 + 11 +11.725 + 21 +865.5 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +865.5 + 11 +-3.09999 + 21 +865.5 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +865.5 + 11 +-3.09999 + 21 +862.4 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +862.4 + 11 +0 + 21 +862.4 + 0 +LINE + 8 +0 + 10 +0 + 20 +862.4 + 11 +0 + 21 +856.925 + 0 +LINE + 8 +0 + 10 +0 + 20 +856.925 + 11 +-3.09999 + 21 +856.925 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +856.925 + 11 +-3.09999 + 21 +851.45 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +851.45 + 11 +0 + 21 +851.45 + 0 +LINE + 8 +0 + 10 +0 + 20 +851.45 + 11 +0 + 21 +845.975 + 0 +LINE + 8 +0 + 10 +0 + 20 +845.975 + 11 +-3.09999 + 21 +845.975 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +845.975 + 11 +-3.09999 + 21 +840.5 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +840.5 + 11 +0 + 21 +840.5 + 0 +LINE + 8 +0 + 10 +0 + 20 +840.5 + 11 +0 + 21 +835.025 + 0 +LINE + 8 +0 + 10 +0 + 20 +835.025 + 11 +-3.09999 + 21 +835.025 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +835.025 + 11 +-3.09999 + 21 +829.55 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +829.55 + 11 +0 + 21 +829.55 + 0 +LINE + 8 +0 + 10 +0 + 20 +829.55 + 11 +0 + 21 +824.075 + 0 +LINE + 8 +0 + 10 +0 + 20 +824.075 + 11 +-3.09999 + 21 +824.075 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +824.075 + 11 +-3.09999 + 21 +818.6 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +818.6 + 11 +11.725 + 21 +818.6 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +818.6 + 11 +11.725 + 21 +815.5 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +815.5 + 11 +23.45 + 21 +815.5 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +815.5 + 11 +23.45 + 21 +818.6 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +812.4 + 11 +70.35 + 21 +809.3 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +809.3 + 11 +58.625 + 21 +809.3 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +809.3 + 11 +58.625 + 21 +812.4 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +812.4 + 11 +46.9 + 21 +812.4 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +812.4 + 11 +46.9 + 21 +809.3 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +809.3 + 11 +35.175 + 21 +809.3 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +809.3 + 11 +35.175 + 21 +812.4 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +812.4 + 11 +23.45 + 21 +812.4 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +812.4 + 11 +23.45 + 21 +809.3 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +809.3 + 11 +11.725 + 21 +809.3 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +809.3 + 11 +11.725 + 21 +812.4 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +812.4 + 11 +0 + 21 +812.4 + 0 +LINE + 8 +0 + 10 +0 + 20 +812.4 + 11 +0 + 21 +803.825 + 0 +LINE + 8 +0 + 10 +0 + 20 +803.825 + 11 +-3.09999 + 21 +803.825 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +803.825 + 11 +-3.09999 + 21 +798.35 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +798.35 + 11 +0 + 21 +798.35 + 0 +LINE + 8 +0 + 10 +0 + 20 +798.35 + 11 +0 + 21 +792.875 + 0 +LINE + 8 +0 + 10 +0 + 20 +792.875 + 11 +-3.09999 + 21 +792.875 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +792.875 + 11 +-3.09999 + 21 +787.4 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +787.4 + 11 +0 + 21 +787.4 + 0 +LINE + 8 +0 + 10 +0 + 20 +787.4 + 11 +0 + 21 +781.925 + 0 +LINE + 8 +0 + 10 +0 + 20 +781.925 + 11 +-3.09999 + 21 +781.925 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +781.925 + 11 +-3.09999 + 21 +776.45 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +776.45 + 11 +0 + 21 +776.45 + 0 +LINE + 8 +0 + 10 +0 + 20 +776.45 + 11 +0 + 21 +770.975 + 0 +LINE + 8 +0 + 10 +0 + 20 +770.975 + 11 +-3.09999 + 21 +770.975 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +770.975 + 11 +-3.09999 + 21 +765.5 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +765.5 + 11 +0 + 21 +765.5 + 0 +LINE + 8 +0 + 10 +0 + 20 +765.5 + 11 +0 + 21 +762.4 + 0 +LINE + 8 +0 + 10 +0 + 20 +762.4 + 11 +11.725 + 21 +762.4 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +762.4 + 11 +11.725 + 21 +765.5 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +765.5 + 11 +23.45 + 21 +765.5 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +765.5 + 11 +23.45 + 21 +762.4 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +762.4 + 11 +35.175 + 21 +762.4 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +762.4 + 11 +35.175 + 21 +765.5 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +765.5 + 11 +46.9 + 21 +765.5 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +765.5 + 11 +46.9 + 21 +762.4 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +762.4 + 11 +58.625 + 21 +762.4 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +762.4 + 11 +58.625 + 21 +765.5 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +765.5 + 11 +70.35 + 21 +765.5 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +765.5 + 11 +70.35 + 21 +762.4 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +762.4 + 11 +82.075 + 21 +762.4 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +762.4 + 11 +82.075 + 21 +765.5 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +765.5 + 11 +96.9 + 21 +765.5 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +765.5 + 11 +96.9 + 21 +770.975 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +770.975 + 11 +93.8 + 21 +770.975 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +770.975 + 11 +93.8 + 21 +776.45 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +776.45 + 11 +96.9 + 21 +776.45 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +776.45 + 11 +96.9 + 21 +781.925 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +781.925 + 11 +93.8 + 21 +781.925 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +781.925 + 11 +93.8 + 21 +787.4 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +787.4 + 11 +96.9 + 21 +787.4 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +787.4 + 11 +96.9 + 21 +792.875 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +792.875 + 11 +93.8 + 21 +792.875 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +792.875 + 11 +93.8 + 21 +798.35 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +798.35 + 11 +96.9 + 21 +798.35 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +798.35 + 11 +96.9 + 21 +803.825 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +803.825 + 11 +93.8 + 21 +803.825 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +803.825 + 11 +93.8 + 21 +809.3 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +809.3 + 11 +82.075 + 21 +809.3 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +809.3 + 11 +82.075 + 21 +812.4 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +812.4 + 11 +70.35 + 21 +812.4 + 0 +LINE + 8 +0 + 10 +0 + 20 +562.4 + 11 +11.725 + 21 +562.4 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +562.4 + 11 +11.725 + 21 +559.3 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +559.3 + 11 +23.45 + 21 +559.3 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +559.3 + 11 +23.45 + 21 +562.4 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +562.4 + 11 +35.175 + 21 +562.4 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +562.4 + 11 +35.175 + 21 +559.3 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +559.3 + 11 +46.9 + 21 +559.3 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +559.3 + 11 +46.9 + 21 +562.4 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +562.4 + 11 +58.625 + 21 +562.4 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +562.4 + 11 +58.625 + 21 +559.3 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +559.3 + 11 +70.35 + 21 +559.3 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +559.3 + 11 +70.35 + 21 +562.4 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +562.4 + 11 +82.075 + 21 +562.4 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +562.4 + 11 +82.075 + 21 +559.3 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +559.3 + 11 +96.9 + 21 +559.3 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +559.3 + 11 +96.9 + 21 +586.625 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +586.625 + 11 +93.8 + 21 +586.625 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +586.625 + 11 +93.8 + 21 +610.85 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +610.85 + 11 +96.9 + 21 +610.85 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +610.85 + 11 +96.9 + 21 +635.075 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +635.075 + 11 +93.8 + 21 +635.075 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +635.075 + 11 +93.8 + 21 +659.3 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +659.3 + 11 +96.9 + 21 +659.3 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +659.3 + 11 +96.9 + 21 +683.525 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +683.525 + 11 +93.8 + 21 +683.525 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +683.525 + 11 +93.8 + 21 +707.75 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +707.75 + 11 +96.9 + 21 +707.75 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +707.75 + 11 +96.9 + 21 +731.975 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +731.975 + 11 +93.8 + 21 +731.975 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +731.975 + 11 +93.8 + 21 +759.3 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +759.3 + 11 +82.075 + 21 +759.3 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +759.3 + 11 +82.075 + 21 +756.2 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +756.2 + 11 +70.35 + 21 +756.2 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +756.2 + 11 +70.35 + 21 +759.3 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +759.3 + 11 +58.625 + 21 +759.3 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +759.3 + 11 +58.625 + 21 +756.2 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +756.2 + 11 +46.9 + 21 +756.2 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +756.2 + 11 +46.9 + 21 +759.3 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +759.3 + 11 +35.175 + 21 +759.3 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +759.3 + 11 +35.175 + 21 +756.2 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +756.2 + 11 +23.45 + 21 +756.2 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +756.2 + 11 +23.45 + 21 +759.3 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +759.3 + 11 +11.725 + 21 +759.3 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +759.3 + 11 +11.725 + 21 +756.2 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +756.2 + 11 +0 + 21 +756.2 + 0 +LINE + 8 +0 + 10 +0 + 20 +756.2 + 11 +0 + 21 +731.975 + 0 +LINE + 8 +0 + 10 +0 + 20 +731.975 + 11 +-3.09999 + 21 +731.975 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +731.975 + 11 +-3.09999 + 21 +707.75 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +707.75 + 11 +0 + 21 +707.75 + 0 +LINE + 8 +0 + 10 +0 + 20 +707.75 + 11 +0 + 21 +683.525 + 0 +LINE + 8 +0 + 10 +0 + 20 +683.525 + 11 +-3.09999 + 21 +683.525 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +683.525 + 11 +-3.09999 + 21 +659.3 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +659.3 + 11 +0 + 21 +659.3 + 0 +LINE + 8 +0 + 10 +0 + 20 +659.3 + 11 +0 + 21 +635.075 + 0 +LINE + 8 +0 + 10 +0 + 20 +635.075 + 11 +-3.09999 + 21 +635.075 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +635.075 + 11 +-3.09999 + 21 +610.85 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +610.85 + 11 +0 + 21 +610.85 + 0 +LINE + 8 +0 + 10 +0 + 20 +610.85 + 11 +0 + 21 +586.625 + 0 +LINE + 8 +0 + 10 +0 + 20 +586.625 + 11 +-3.09999 + 21 +586.625 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +586.625 + 11 +-3.09999 + 21 +559.3 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +559.3 + 11 +0 + 21 +559.3 + 0 +LINE + 8 +0 + 10 +0 + 20 +559.3 + 11 +0 + 21 +562.4 + 0 +LINE + 8 +0 + 10 +47.3868 + 20 +637.537 + 11 +42.2746 + 21 +638.624 + 0 +LINE + 8 +0 + 10 +42.2746 + 20 +638.624 + 11 +37.5 + 21 +640.749 + 0 +LINE + 8 +0 + 10 +37.5 + 20 +640.749 + 11 +33.2717 + 21 +643.821 + 0 +LINE + 8 +0 + 10 +33.2717 + 20 +643.821 + 11 +29.7746 + 21 +647.705 + 0 +LINE + 8 +0 + 10 +29.7746 + 20 +647.705 + 11 +27.1614 + 21 +652.232 + 0 +LINE + 8 +0 + 10 +27.1614 + 20 +652.232 + 11 +25.5463 + 21 +657.202 + 0 +LINE + 8 +0 + 10 +25.5463 + 20 +657.202 + 11 +25 + 21 +662.4 + 0 +LINE + 8 +0 + 10 +25 + 20 +662.4 + 11 +25.5463 + 21 +667.598 + 0 +LINE + 8 +0 + 10 +25.5463 + 20 +667.598 + 11 +27.1614 + 21 +672.568 + 0 +LINE + 8 +0 + 10 +27.1614 + 20 +672.568 + 11 +29.7746 + 21 +677.095 + 0 +LINE + 8 +0 + 10 +29.7746 + 20 +677.095 + 11 +33.2717 + 21 +680.979 + 0 +LINE + 8 +0 + 10 +33.2717 + 20 +680.979 + 11 +37.5 + 21 +684.051 + 0 +LINE + 8 +0 + 10 +37.5 + 20 +684.051 + 11 +42.2746 + 21 +686.176 + 0 +LINE + 8 +0 + 10 +42.2746 + 20 +686.176 + 11 +47.3868 + 21 +687.263 + 0 +LINE + 8 +0 + 10 +47.3868 + 20 +687.263 + 11 +52.6132 + 21 +687.263 + 0 +LINE + 8 +0 + 10 +52.6132 + 20 +687.263 + 11 +57.7254 + 21 +686.176 + 0 +LINE + 8 +0 + 10 +57.7254 + 20 +686.176 + 11 +62.5 + 21 +684.051 + 0 +LINE + 8 +0 + 10 +62.5 + 20 +684.051 + 11 +66.7283 + 21 +680.979 + 0 +LINE + 8 +0 + 10 +66.7283 + 20 +680.979 + 11 +70.2254 + 21 +677.095 + 0 +LINE + 8 +0 + 10 +70.2254 + 20 +677.095 + 11 +72.8386 + 21 +672.568 + 0 +LINE + 8 +0 + 10 +72.8386 + 20 +672.568 + 11 +74.4537 + 21 +667.598 + 0 +LINE + 8 +0 + 10 +74.4537 + 20 +667.598 + 11 +75 + 21 +662.4 + 0 +LINE + 8 +0 + 10 +75 + 20 +662.4 + 11 +74.4537 + 21 +657.202 + 0 +LINE + 8 +0 + 10 +74.4537 + 20 +657.202 + 11 +72.8386 + 21 +652.232 + 0 +LINE + 8 +0 + 10 +72.8386 + 20 +652.232 + 11 +70.2254 + 21 +647.705 + 0 +LINE + 8 +0 + 10 +70.2254 + 20 +647.705 + 11 +66.7283 + 21 +643.821 + 0 +LINE + 8 +0 + 10 +66.7283 + 20 +643.821 + 11 +62.5 + 21 +640.749 + 0 +LINE + 8 +0 + 10 +62.5 + 20 +640.749 + 11 +57.7254 + 21 +638.624 + 0 +LINE + 8 +0 + 10 +57.7254 + 20 +638.624 + 11 +52.6132 + 21 +637.537 + 0 +LINE + 8 +0 + 10 +52.6132 + 20 +637.537 + 11 +47.3868 + 21 +637.537 + 0 +LINE + 8 +0 + 10 +0 + 20 +359.3 + 11 +11.725 + 21 +359.3 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +359.3 + 11 +11.725 + 21 +356.2 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +356.2 + 11 +23.45 + 21 +356.2 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +356.2 + 11 +23.45 + 21 +359.3 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +359.3 + 11 +35.175 + 21 +359.3 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +359.3 + 11 +35.175 + 21 +356.2 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +356.2 + 11 +46.9 + 21 +356.2 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +356.2 + 11 +46.9 + 21 +359.3 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +359.3 + 11 +58.625 + 21 +359.3 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +359.3 + 11 +58.625 + 21 +356.2 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +356.2 + 11 +70.35 + 21 +356.2 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +356.2 + 11 +70.35 + 21 +359.3 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +359.3 + 11 +82.075 + 21 +359.3 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +359.3 + 11 +82.075 + 21 +356.2 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +356.2 + 11 +96.9 + 21 +356.2 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +356.2 + 11 +96.9 + 21 +383.525 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +383.525 + 11 +93.8 + 21 +383.525 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +383.525 + 11 +93.8 + 21 +407.75 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +407.75 + 11 +96.9 + 21 +407.75 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +407.75 + 11 +96.9 + 21 +431.975 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +431.975 + 11 +93.8 + 21 +431.975 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +431.975 + 11 +93.8 + 21 +456.2 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +456.2 + 11 +96.9 + 21 +456.2 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +456.2 + 11 +96.9 + 21 +480.425 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +480.425 + 11 +93.8 + 21 +480.425 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +480.425 + 11 +93.8 + 21 +504.65 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +504.65 + 11 +96.9 + 21 +504.65 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +504.65 + 11 +96.9 + 21 +528.875 + 0 +LINE + 8 +0 + 10 +96.9 + 20 +528.875 + 11 +93.8 + 21 +528.875 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +528.875 + 11 +93.8 + 21 +553.1 + 0 +LINE + 8 +0 + 10 +93.8 + 20 +553.1 + 11 +82.075 + 21 +553.1 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +553.1 + 11 +82.075 + 21 +556.2 + 0 +LINE + 8 +0 + 10 +82.075 + 20 +556.2 + 11 +70.35 + 21 +556.2 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +556.2 + 11 +70.35 + 21 +553.1 + 0 +LINE + 8 +0 + 10 +70.35 + 20 +553.1 + 11 +58.625 + 21 +553.1 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +553.1 + 11 +58.625 + 21 +556.2 + 0 +LINE + 8 +0 + 10 +58.625 + 20 +556.2 + 11 +46.9 + 21 +556.2 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +556.2 + 11 +46.9 + 21 +553.1 + 0 +LINE + 8 +0 + 10 +46.9 + 20 +553.1 + 11 +35.175 + 21 +553.1 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +553.1 + 11 +35.175 + 21 +556.2 + 0 +LINE + 8 +0 + 10 +35.175 + 20 +556.2 + 11 +23.45 + 21 +556.2 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +556.2 + 11 +23.45 + 21 +553.1 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +553.1 + 11 +11.725 + 21 +553.1 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +553.1 + 11 +11.725 + 21 +556.2 + 0 +LINE + 8 +0 + 10 +11.725 + 20 +556.2 + 11 +-3.09999 + 21 +556.2 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +556.2 + 11 +-3.09999 + 21 +553.1 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +553.1 + 11 +0 + 21 +553.1 + 0 +LINE + 8 +0 + 10 +0 + 20 +553.1 + 11 +0 + 21 +528.875 + 0 +LINE + 8 +0 + 10 +0 + 20 +528.875 + 11 +-3.09999 + 21 +528.875 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +528.875 + 11 +-3.09999 + 21 +504.65 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +504.65 + 11 +0 + 21 +504.65 + 0 +LINE + 8 +0 + 10 +0 + 20 +504.65 + 11 +0 + 21 +480.425 + 0 +LINE + 8 +0 + 10 +0 + 20 +480.425 + 11 +-3.09999 + 21 +480.425 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +480.425 + 11 +-3.09999 + 21 +456.2 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +456.2 + 11 +0 + 21 +456.2 + 0 +LINE + 8 +0 + 10 +0 + 20 +456.2 + 11 +0 + 21 +431.975 + 0 +LINE + 8 +0 + 10 +0 + 20 +431.975 + 11 +-3.09999 + 21 +431.975 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +431.975 + 11 +-3.09999 + 21 +407.75 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +407.75 + 11 +0 + 21 +407.75 + 0 +LINE + 8 +0 + 10 +0 + 20 +407.75 + 11 +0 + 21 +383.525 + 0 +LINE + 8 +0 + 10 +0 + 20 +383.525 + 11 +-3.09999 + 21 +383.525 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +383.525 + 11 +-3.09999 + 21 +356.2 + 0 +LINE + 8 +0 + 10 +-3.09999 + 20 +356.2 + 11 +0 + 21 +356.2 + 0 +LINE + 8 +0 + 10 +0 + 20 +356.2 + 11 +0 + 21 +359.3 + 0 +LINE + 8 +0 + 10 +48.45 + 20 +546.9 + 11 +48.45 + 21 +550 + 0 +LINE + 8 +0 + 10 +48.45 + 20 +550 + 11 +51.55 + 21 +550 + 0 +LINE + 8 +0 + 10 +51.55 + 20 +550 + 11 +51.55 + 21 +546.9 + 0 +LINE + 8 +0 + 10 +51.55 + 20 +546.9 + 11 +48.45 + 21 +546.9 + 0 +LINE + 8 +0 + 10 +54.65 + 20 +546.9 + 11 +54.65 + 21 +550 + 0 +LINE + 8 +0 + 10 +54.65 + 20 +550 + 11 +63.95 + 21 +550 + 0 +LINE + 8 +0 + 10 +63.95 + 20 +550 + 11 +63.95 + 21 +546.9 + 0 +LINE + 8 +0 + 10 +63.95 + 20 +546.9 + 11 +54.65 + 21 +546.9 + 0 +LINE + 8 +0 + 10 +36.05 + 20 +546.9 + 11 +36.05 + 21 +550 + 0 +LINE + 8 +0 + 10 +36.05 + 20 +550 + 11 +45.35 + 21 +550 + 0 +LINE + 8 +0 + 10 +45.35 + 20 +550 + 11 +45.35 + 21 +546.9 + 0 +LINE + 8 +0 + 10 +45.35 + 20 +546.9 + 11 +36.05 + 21 +546.9 + 0 +LINE + 8 +0 + 10 +48.45 + 20 +362.4 + 11 +48.45 + 21 +365.5 + 0 +LINE + 8 +0 + 10 +48.45 + 20 +365.5 + 11 +51.55 + 21 +365.5 + 0 +LINE + 8 +0 + 10 +51.55 + 20 +365.5 + 11 +51.55 + 21 +362.4 + 0 +LINE + 8 +0 + 10 +51.55 + 20 +362.4 + 11 +48.45 + 21 +362.4 + 0 +LINE + 8 +0 + 10 +36.05 + 20 +362.4 + 11 +36.05 + 21 +365.5 + 0 +LINE + 8 +0 + 10 +36.05 + 20 +365.5 + 11 +45.35 + 21 +365.5 + 0 +LINE + 8 +0 + 10 +45.35 + 20 +365.5 + 11 +45.35 + 21 +362.4 + 0 +LINE + 8 +0 + 10 +45.35 + 20 +362.4 + 11 +36.05 + 21 +362.4 + 0 +LINE + 8 +0 + 10 +54.65 + 20 +362.4 + 11 +54.65 + 21 +365.5 + 0 +LINE + 8 +0 + 10 +54.65 + 20 +365.5 + 11 +63.95 + 21 +365.5 + 0 +LINE + 8 +0 + 10 +63.95 + 20 +365.5 + 11 +63.95 + 21 +362.4 + 0 +LINE + 8 +0 + 10 +63.95 + 20 +362.4 + 11 +54.65 + 21 +362.4 + 0 +LINE + 8 +0 + 10 +26.55 + 20 +168.6 + 11 +73.45 + 21 +168.6 + 0 +LINE + 8 +0 + 10 +73.45 + 20 +168.6 + 11 +73.45 + 21 +165.5 + 0 +LINE + 8 +0 + 10 +73.45 + 20 +165.5 + 11 +76.55 + 21 +165.5 + 0 +LINE + 8 +0 + 10 +76.55 + 20 +165.5 + 11 +76.55 + 21 +168.6 + 0 +LINE + 8 +0 + 10 +76.55 + 20 +168.6 + 11 +100 + 21 +168.6 + 0 +LINE + 8 +0 + 10 +100 + 20 +168.6 + 11 +100 + 21 +350 + 0 +LINE + 8 +0 + 10 +100 + 20 +350 + 11 +76.55 + 21 +350 + 0 +LINE + 8 +0 + 10 +76.55 + 20 +350 + 11 +76.55 + 21 +353.1 + 0 +LINE + 8 +0 + 10 +76.55 + 20 +353.1 + 11 +73.45 + 21 +353.1 + 0 +LINE + 8 +0 + 10 +73.45 + 20 +353.1 + 11 +73.45 + 21 +350 + 0 +LINE + 8 +0 + 10 +73.45 + 20 +350 + 11 +26.55 + 21 +350 + 0 +LINE + 8 +0 + 10 +26.55 + 20 +350 + 11 +26.55 + 21 +353.1 + 0 +LINE + 8 +0 + 10 +26.55 + 20 +353.1 + 11 +23.45 + 21 +353.1 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +353.1 + 11 +23.45 + 21 +350 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +350 + 11 +0 + 21 +350 + 0 +LINE + 8 +0 + 10 +0 + 20 +350 + 11 +0 + 21 +168.6 + 0 +LINE + 8 +0 + 10 +0 + 20 +168.6 + 11 +23.45 + 21 +168.6 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +168.6 + 11 +23.45 + 21 +165.5 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +165.5 + 11 +26.55 + 21 +165.5 + 0 +LINE + 8 +0 + 10 +26.55 + 20 +165.5 + 11 +26.55 + 21 +168.6 + 0 +LINE + 8 +0 + 10 +100 + 20 +159.3 + 11 +63.95 + 21 +159.3 + 0 +LINE + 8 +0 + 10 +63.95 + 20 +159.3 + 11 +63.95 + 21 +162.4 + 0 +LINE + 8 +0 + 10 +63.95 + 20 +162.4 + 11 +54.65 + 21 +162.4 + 0 +LINE + 8 +0 + 10 +54.65 + 20 +162.4 + 11 +54.65 + 21 +159.3 + 0 +LINE + 8 +0 + 10 +54.65 + 20 +159.3 + 11 +51.55 + 21 +159.3 + 0 +LINE + 8 +0 + 10 +51.55 + 20 +159.3 + 11 +51.55 + 21 +156.2 + 0 +LINE + 8 +0 + 10 +51.55 + 20 +156.2 + 11 +54.65 + 21 +156.2 + 0 +LINE + 8 +0 + 10 +54.65 + 20 +156.2 + 11 +54.65 + 21 +153.1 + 0 +LINE + 8 +0 + 10 +54.65 + 20 +153.1 + 11 +51.55 + 21 +153.1 + 0 +LINE + 8 +0 + 10 +51.55 + 20 +153.1 + 11 +51.55 + 21 +150 + 0 +LINE + 8 +0 + 10 +51.55 + 20 +150 + 11 +48.45 + 21 +150 + 0 +LINE + 8 +0 + 10 +48.45 + 20 +150 + 11 +48.45 + 21 +153.1 + 0 +LINE + 8 +0 + 10 +48.45 + 20 +153.1 + 11 +45.35 + 21 +153.1 + 0 +LINE + 8 +0 + 10 +45.35 + 20 +153.1 + 11 +45.35 + 21 +156.2 + 0 +LINE + 8 +0 + 10 +45.35 + 20 +156.2 + 11 +48.45 + 21 +156.2 + 0 +LINE + 8 +0 + 10 +48.45 + 20 +156.2 + 11 +48.45 + 21 +159.3 + 0 +LINE + 8 +0 + 10 +48.45 + 20 +159.3 + 11 +45.35 + 21 +159.3 + 0 +LINE + 8 +0 + 10 +45.35 + 20 +159.3 + 11 +45.35 + 21 +162.4 + 0 +LINE + 8 +0 + 10 +45.35 + 20 +162.4 + 11 +36.05 + 21 +162.4 + 0 +LINE + 8 +0 + 10 +36.05 + 20 +162.4 + 11 +36.05 + 21 +159.3 + 0 +LINE + 8 +0 + 10 +36.05 + 20 +159.3 + 11 +0 + 21 +159.3 + 0 +LINE + 8 +0 + 10 +0 + 20 +159.3 + 11 +0 + 21 +84.3 + 0 +LINE + 8 +0 + 10 +0 + 20 +84.3 + 11 +100 + 21 +84.3 + 0 +LINE + 8 +0 + 10 +100 + 20 +84.3 + 11 +100 + 21 +159.3 + 0 +LINE + 8 +0 + 10 +73.45 + 20 +121.8 + 11 +73.45 + 21 +124.9 + 0 +LINE + 8 +0 + 10 +73.45 + 20 +124.9 + 11 +76.55 + 21 +124.9 + 0 +LINE + 8 +0 + 10 +76.55 + 20 +124.9 + 11 +76.55 + 21 +121.8 + 0 +LINE + 8 +0 + 10 +76.55 + 20 +121.8 + 11 +73.45 + 21 +121.8 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +121.8 + 11 +23.45 + 21 +124.9 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +124.9 + 11 +26.55 + 21 +124.9 + 0 +LINE + 8 +0 + 10 +26.55 + 20 +124.9 + 11 +26.55 + 21 +121.8 + 0 +LINE + 8 +0 + 10 +26.55 + 20 +121.8 + 11 +23.45 + 21 +121.8 + 0 +LINE + 8 +0 + 10 +100 + 20 +75 + 11 +63.95 + 21 +75 + 0 +LINE + 8 +0 + 10 +63.95 + 20 +75 + 11 +63.95 + 21 +78.1 + 0 +LINE + 8 +0 + 10 +63.95 + 20 +78.1 + 11 +54.65 + 21 +78.1 + 0 +LINE + 8 +0 + 10 +54.65 + 20 +78.1 + 11 +54.65 + 21 +75 + 0 +LINE + 8 +0 + 10 +54.65 + 20 +75 + 11 +51.55 + 21 +75 + 0 +LINE + 8 +0 + 10 +51.55 + 20 +75 + 11 +51.55 + 21 +71.9 + 0 +LINE + 8 +0 + 10 +51.55 + 20 +71.9 + 11 +54.65 + 21 +71.9 + 0 +LINE + 8 +0 + 10 +54.65 + 20 +71.9 + 11 +54.65 + 21 +68.8 + 0 +LINE + 8 +0 + 10 +54.65 + 20 +68.8 + 11 +51.55 + 21 +68.8 + 0 +LINE + 8 +0 + 10 +51.55 + 20 +68.8 + 11 +51.55 + 21 +65.7 + 0 +LINE + 8 +0 + 10 +51.55 + 20 +65.7 + 11 +48.45 + 21 +65.7 + 0 +LINE + 8 +0 + 10 +48.45 + 20 +65.7 + 11 +48.45 + 21 +68.8 + 0 +LINE + 8 +0 + 10 +48.45 + 20 +68.8 + 11 +45.35 + 21 +68.8 + 0 +LINE + 8 +0 + 10 +45.35 + 20 +68.8 + 11 +45.35 + 21 +71.9 + 0 +LINE + 8 +0 + 10 +45.35 + 20 +71.9 + 11 +48.45 + 21 +71.9 + 0 +LINE + 8 +0 + 10 +48.45 + 20 +71.9 + 11 +48.45 + 21 +75 + 0 +LINE + 8 +0 + 10 +48.45 + 20 +75 + 11 +45.35 + 21 +75 + 0 +LINE + 8 +0 + 10 +45.35 + 20 +75 + 11 +45.35 + 21 +78.1 + 0 +LINE + 8 +0 + 10 +45.35 + 20 +78.1 + 11 +36.05 + 21 +78.1 + 0 +LINE + 8 +0 + 10 +36.05 + 20 +78.1 + 11 +36.05 + 21 +75 + 0 +LINE + 8 +0 + 10 +36.05 + 20 +75 + 11 +0 + 21 +75 + 0 +LINE + 8 +0 + 10 +0 + 20 +75 + 11 +0 + 21 +0 + 0 +LINE + 8 +0 + 10 +0 + 20 +0 + 11 +100 + 21 +0 + 0 +LINE + 8 +0 + 10 +100 + 20 +0 + 11 +100 + 21 +75 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +37.5 + 11 +23.45 + 21 +40.6 + 0 +LINE + 8 +0 + 10 +23.45 + 20 +40.6 + 11 +26.55 + 21 +40.6 + 0 +LINE + 8 +0 + 10 +26.55 + 20 +40.6 + 11 +26.55 + 21 +37.5 + 0 +LINE + 8 +0 + 10 +26.55 + 20 +37.5 + 11 +23.45 + 21 +37.5 + 0 +LINE + 8 +0 + 10 +73.45 + 20 +37.5 + 11 +73.45 + 21 +40.6 + 0 +LINE + 8 +0 + 10 +73.45 + 20 +40.6 + 11 +76.55 + 21 +40.6 + 0 +LINE + 8 +0 + 10 +76.55 + 20 +40.6 + 11 +76.55 + 21 +37.5 + 0 +LINE + 8 +0 + 10 +76.55 + 20 +37.5 + 11 +73.45 + 21 +37.5 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 0 +ENDSEC + 0 +EOF diff --git a/generate.scad b/generate.scad new file mode 100644 index 0000000..dc26356 --- /dev/null +++ b/generate.scad @@ -0,0 +1,94 @@ +use ; +projection(cut = false) + +lasercutout(thickness=3.1, + points= [[0, 0], [100, 0], [100, 75], [0, 75], [0, 0]], + simple_tabs = [], + simple_tab_holes = [[360, 23.45, 37.5], [360, 73.45, 37.5]], + captive_nuts = [[0, 50, 75]], + captive_nut_holes = [], + finger_joints = [], + circles_add = [], + circles_remove = []) + +lasercutout(thickness=3.1, + points= [[0, 0], [100, 0], [100, 75], [0, 75], [0, 0]], + simple_tabs = [], + simple_tab_holes = [[360, 23.45, 37.5], [360, 73.45, 37.5]], + captive_nuts = [[0, 50, 75]], + captive_nut_holes = [], + finger_joints = [], + circles_add = [], + circles_remove = []) + +lasercutout(thickness=3.1, + points= [[0, 0], [100, 0], [100, 181.4], [0, 181.4], [0, 0]], + simple_tabs = [[0, 75, 181.4], [0, 25, 181.4], [180, 75, 0], [180, 25, 0]], + simple_tab_holes = [], + captive_nuts = [], + captive_nut_holes = [], + finger_joints = [], + circles_add = [], + circles_remove = []) + +lasercutout(thickness=3.1, + points= [[0, 0], [93.8, 0], [93.8, 193.8], [0, 193.8], [0, 0]], + simple_tabs = [[180, -1.55, 0], [180, -1.55, 196.9], [270, 93.8, -1.55]], + simple_tab_holes = undef, + captive_nuts = undef, + captive_nut_holes = [[0, 50, 193.8], [180, 50, 0]], + finger_joints = [[0, 1, 4], [180, 1, 4], [90, 1, 4], [270, 0, 4]], + circles_add = undef, + circles_remove = []) + +lasercutout(thickness=3.1, + points= [[0, 0], [93.8, 0], [93.8, 193.8], [0, 193.8], [0, 0]], + simple_tabs = [[180, -1.55, 0], [270, 93.8, -1.55]], + simple_tab_holes = undef, + captive_nuts = undef, + captive_nut_holes = undef, + finger_joints = [[0, 0, 4], [180, 1, 4], [90, 1, 4], [270, 0, 4]], + circles_add = undef, + circles_remove = [[25, 50, 100]]) + +lasercutout(thickness=3.1, + points= [[0, 0], [93.8, 0], [93.8, 43.8], [0, 43.8], [0, 0]], + simple_tabs = [], + simple_tab_holes = undef, + captive_nuts = undef, + captive_nut_holes = undef, + finger_joints = [[0, 1, 4], [180, 0, 4], [90, 1, 4], [270, 0, 4]], + circles_add = undef, + circles_remove = undef) + +lasercutout(thickness=3.1, + points= [[0, 0], [93.8, 0], [93.8, 43.8], [0, 43.8], [0, 0]], + simple_tabs = [[0, -1.55, 43.8], [180, 95.35, 0]], + simple_tab_holes = undef, + captive_nuts = undef, + captive_nut_holes = undef, + finger_joints = [[0, 1, 4], [180, 1, 4], [90, 1, 4], [270, 0, 4]], + circles_add = undef, + circles_remove = undef) + +lasercutout(thickness=3.1, + points= [[0, 0], [43.8, 0], [43.8, 193.8], [0, 193.8], [0, 0]], + simple_tabs = [], + simple_tab_holes = undef, + captive_nuts = undef, + captive_nut_holes = undef, + finger_joints = [[0, 0, 4], [180, 1, 4], [90, 0, 4], [270, 1, 4]], + circles_add = undef, + circles_remove = undef) + +lasercutout(thickness=3.1, + points= [[0, 0], [43.8, 0], [43.8, 193.8], [0, 193.8], [0, 0]], + simple_tabs = [[0, 45.35, 193.8]], + simple_tab_holes = undef, + captive_nuts = undef, + captive_nut_holes = undef, + finger_joints = [[0, 0, 4], [180, 1, 4], [90, 0, 4], [270, 1, 4]], + circles_add = undef, + circles_remove = undef) + +; diff --git a/lasercut.scad b/lasercut.scad new file mode 100644 index 0000000..3a1f45d --- /dev/null +++ b/lasercut.scad @@ -0,0 +1,351 @@ +UP = 0; +DOWN = 180; +LEFT = 90; +RIGHT = 270; +MID = 360; + +generate = $generate == undef ? 0: $generate; + +if (generate == 1) +{ + // openscad examples.scad -D generate=1 -o /tmp/d.csg 2>&1 >/dev/null | sed 's/ECHO: \"\[LC\] //' | sed 's/"$//' | sed '$a;' >./generate.scad ; openscad ./generate.scad -o generate.dxf + // (from http://forum.openscad.org/Sharing-Dump-echo-output-to-a-file-td12529.html) + echo("[LC] use ; \nprojection(cut = false) \n\t"); +} + + +module lasercutoutSquare(thickness=3.1, x=0, y=0, + simple_tabs=[], simple_tab_holes=[], + captive_nuts=[], captive_nut_holes = [], + finger_joints = [], + circles_add = [], + circles_remove = [], +) +{ + points = [[0,0], [x,0], [x,y], [0,y], [0,0]]; +lasercutout(thickness=thickness, + points = points, + simple_tabs = simple_tabs, + simple_tab_holes = simple_tab_holes, + captive_nuts = captive_nuts, + captive_nut_holes = captive_nut_holes, + finger_joints = finger_joints, + circles_add = circles_add, + circles_remove = circles_remove); +} + +module lasercutout(thickness=3.1, points= [], + simple_tabs=[], simple_tab_holes=[], + captive_nuts=[], captive_nut_holes = [], + finger_joints = [], + circles_add = [1], + circles_remove = [], +) +{ + path_total = len(points); + path = [ for (p = [0 : 1 : path_total]) p ]; + + function max_y(points) = max([for (a = [0:1:len(points)-1]) points[a][1]]); + function min_y(points) = min([for (a = [0:1:len(points)-1]) points[a][1]]); + function max_x(points) = max([for (a = [0:1:len(points)-1]) points[a][0]]); + function min_x(points) = min([for (a = [0:1:len(points)-1]) points[a][0]]); + + max_y = max_y(points); + min_y = min_y(points); + max_x = max_x(points); + min_x = min_x(points); + + difference() + { + union() + { + linear_extrude(height = thickness , center = false) polygon(points=points, path=path); + for (t = [0:1:len(simple_tabs)-1]) + { + simpleTab(simple_tabs[t][0], simple_tabs[t][1], simple_tabs[t][2], thickness); + } + for (t = [0:1:len(captive_nuts)-1]) + { + captiveNutTab(captive_nuts[t][0], captive_nuts[t][1], captive_nuts[t][2], thickness); + } + for (t = [0:1:len(circles_add)-1]) + { + circlesAdd(circles_add[t][0], circles_add[t][1], circles_add[t][2], thickness); + } + for (t = [0:1:len(finger_joints)-1]) + { + fingerJoint(finger_joints[t][0], finger_joints[t][1], finger_joints[t][2], thickness, max_y, min_y, max_x, min_x) ; + } + + } // end union + + for (t = [0:1:len(simple_tab_holes)-1]) + { + simpleTabHole(simple_tab_holes[t][0], simple_tab_holes[t][1], simple_tab_holes[t][2], thickness); + } + for (t = [0:1:len(captive_nuts)-1]) + { + captiveNutBoltHole(captive_nuts[t][0], captive_nuts[t][1], captive_nuts[t][2], thickness); + } + for (t = [0:1:len(captive_nut_holes)-1]) + { + captiveNutHole(captive_nut_holes[t][0], captive_nut_holes[t][1], captive_nut_holes[t][2], thickness); + } + for (t = [0:1:len(circles_remove)-1]) + { + circlesRemove(circles_remove[t][0], circles_remove[t][1], circles_remove[t][2], thickness); + } + + } + + if ($children) translate([0, max_y(points) + thickness*3, 0]) + children(); + + if (generate == 1) + { + output = str( + "[LC] lasercutout(thickness=", thickness, ", \n + points= ", points, ", \n + simple_tabs = ",simple_tabs,", \n + simple_tab_holes = ",simple_tab_holes,", \n + captive_nuts = ",captive_nuts,", \n + captive_nut_holes = ",captive_nut_holes,", \n + finger_joints = ",finger_joints,", \n + circles_add = ",circles_add,", \n + circles_remove = ",circles_remove,") \n" + ); + echo(output); + } +} + + + +module simpleTab(angle, x, y, thickness) +{ + translate([x,y,0]) rotate([0,0,angle]) translate([-thickness/2,0,0]) cube([thickness, thickness, thickness]); +} + +module simpleTabHole(angle, x, y, thickness) +{ + // Special case does not go past edge - so make only 1 thickness y + if (angle == 360) + { + translate([x,y,0]) rotate([0,0,0]) translate([0,0,-thickness]) cube([thickness, thickness, thickness*3]); + } + else + { + translate([x,y,0]) rotate([0,0,angle-180]) translate([-thickness/2,-thickness,-thickness]) cube([thickness, thickness*2, thickness*3]); + } +} + +module captiveNutBoltHole(angle, x, y, thickness) +{ + translate([x,y,0]) rotate([0,0,angle-180]) union() + { + translate([-thickness/2,-thickness,-thickness]) cube([thickness, thickness*4, thickness*3]); + translate([-thickness/2-thickness,thickness,-thickness]) cube([thickness*3, thickness, thickness*3]); + } +} + +module fingerJoint(angle, start_up, fingers, thickness, max_y, min_y, max_x, min_x) +{ + if ( angle == UP ) + { + range_min = min_x; + range_max = max_x; + t_x = min_x; + t_y = max_y; + fingers(angle, start_up, fingers, thickness, range_min, range_max, t_x, t_y); + } + if ( angle == DOWN ) + { + range_min = min_x; + range_max = max_x; + t_x = max_x; + t_y = min_y; + fingers(angle, start_up, fingers, thickness, range_min, range_max, t_x, t_y); + } + if ( angle == LEFT ) + { + range_min = min_y; + range_max = max_y; + t_x = min_x; + t_y = min_y; + fingers(angle, start_up, fingers, thickness, range_min, range_max, t_x, t_y); + } + if ( angle == RIGHT ) + { + range_min = min_y; + range_max = max_y; + t_x = max_x; + t_y = max_y; + fingers(angle, start_up, fingers, thickness, range_min, range_max, t_x, t_y); + } + +} + +module fingers(angle, start_up, fingers, thickness, range_min, range_max, t_x, t_y) +{ + // The tweaks to y translate([0, -thickness,0]) ... thickness*2 rather than *1 + // Are to avoid edge cases and make the dxf export better. + // All fun + translate([t_x, t_y,0]) rotate([0,0,angle]) translate([0, -thickness,0]) + { + for ( i = [range_min : (range_max-range_min)/fingers : range_max - (range_max-range_min)/fingers] ) + { + if(start_up == 1) + { + translate([i,0,0]) cube([ (range_max-range_min)/(fingers*2), thickness*2, thickness]); + } + else + { + translate([i+(range_max-range_min)/(fingers*2),0,0]) cube([ (range_max-range_min)/(fingers*2), thickness*2, thickness]); + + } + } + } + +} + +module captiveNutTab(angle, x, y, thickness) +{ + translate([x,y,0]) rotate([0,0,angle]) union() + { + translate([-thickness/2+thickness*2,0,0]) cube([thickness*3, thickness, thickness]); + translate([-thickness/2-thickness*4,0,0]) cube([thickness*3, thickness, thickness]); + } +} + +module captiveNutHole(angle, x, y, thickness) +{ + translate([x,y,0]) rotate([0,0,angle]) union() + { + translate([-thickness/2,-thickness*2,-thickness]) cube([thickness, thickness, thickness*3]); + translate([-thickness/2+thickness*2,-thickness*2,-thickness]) cube([thickness*3, thickness, thickness*3]); + translate([-thickness/2-thickness*4,-thickness*2,-thickness]) cube([thickness*3, thickness, thickness*3]); + } +} + +module circlesAdd(radius, x, y, thickness) +{ + translate([x,y,0]) cylinder(h=thickness, r=radius); +} + +module circlesRemove(radius, x, y, thickness) +{ + translate([x,y,-thickness]) cylinder(h=thickness*3, r=radius); +} + + +module lasercutoutBox(thickness = 3.1, x=0, y=0, z=0, sides=6, + simple_tab_holes_a=[], + captive_nuts_a=[], captive_nut_holes_a=[], + circles_add_a=[], + circles_remove_a=[], +) +{ + if (sides==4) + { + fj = [ + [ [UP, 1, 4], [DOWN, 1, 4], ], + [ [UP, 0, 4], [DOWN, 1, 4], ], + [ [UP, 1, 4], [DOWN, 0, 4], ], + [ [UP, 1, 4], [DOWN, 1, 4], ], + ]; + translate([0,thickness,0]) lasercutoutBoxAdjustedFJ(thickness = thickness, x=x, y=y-thickness*2 , z=z-thickness*2, sides=sides, fj=fj, + simple_tab_holes_a=simple_tab_holes_a, + captive_nuts_a=captive_nuts_a, captive_nut_holes_a=captive_nut_holes_a, + circles_add_a=circles_add_a, + circles_remove_a=circles_remove_a); + } + if (sides==5) + { + st = [ + [[DOWN, -thickness/2, 0], [DOWN, -thickness/2, y-thickness] ], + [[DOWN, -thickness/2, 0], ], + [[UP, -thickness/2, z-thickness*2], ], + ]; + fj = [ + [ [UP, 1, 4], [DOWN, 1, 4], [LEFT, 1, 4], ], + [ [UP, 0, 4], [DOWN, 1, 4], [LEFT, 1, 4], ], + [ [UP, 1, 4], [DOWN, 0, 4], [LEFT, 1, 4], ], + [ [UP, 1, 4], [DOWN, 1, 4], [LEFT, 1, 4], ], + [ [UP, 0, 4], [DOWN, 1, 4], [LEFT, 0, 4], [RIGHT, 1, 4] ], + ]; + + translate([thickness,thickness,0]) lasercutoutBoxAdjustedFJ(thickness = thickness, x=x-thickness, y=y-thickness*2 , z=z-thickness*2, sides=sides, fj=fj, st=st, + simple_tab_holes_a=simple_tab_holes_a, + captive_nuts_a=captive_nuts_a, captive_nut_holes_a=captive_nut_holes_a, + circles_add_a=circles_add_a, + circles_remove_a=circles_remove_a); + } + if (sides==6) + { + st = [ + [[DOWN, -thickness/2, 0], [DOWN, -thickness/2, y-thickness] , [RIGHT, x-thickness*2, -thickness/2]], + [[DOWN, -thickness/2, 0], [RIGHT, x-thickness*2, -thickness/2]], + [[UP, -thickness/2, z-thickness*2], [DOWN, x-thickness*1.5, 0], ], + [[UP, z-thickness*1.5, y-thickness*2], ], + ]; + fj = [ + [ [UP, 1, 4], [DOWN, 1, 4], [LEFT, 1, 4], [RIGHT, 0, 4] ], + [ [UP, 0, 4], [DOWN, 1, 4], [LEFT, 1, 4], [RIGHT, 0, 4] ], + [ [UP, 1, 4], [DOWN, 0, 4], [LEFT, 1, 4], [RIGHT, 0, 4] ], + [ [UP, 1, 4], [DOWN, 1, 4], [LEFT, 1, 4], [RIGHT, 0, 4] ], + [ [UP, 0, 4], [DOWN, 1, 4], [LEFT, 0, 4], [RIGHT, 1, 4] ], + [ [UP, 0, 4], [DOWN, 1, 4], [LEFT, 0, 4], [RIGHT, 1, 4] ], + ]; + translate([thickness,thickness,0]) lasercutoutBoxAdjustedFJ(thickness = thickness, x=x-thickness*2, y=y-thickness*2 , z=z-thickness*2, sides=sides, fj=fj, st=st, + simple_tab_holes_a=simple_tab_holes_a, + captive_nuts_a=captive_nuts_a, captive_nut_holes_a=captive_nut_holes_a, + circles_add_a=circles_add_a, + circles_remove_a=circles_remove_a); + } +} + + +module lasercutoutBoxAdjustedFJ(thickness = 3.1, x=0, y=0, z=0, sides=6, fj=[], st=[], + simple_tab_holes_a=[], + captive_nuts_a=[], captive_nut_holes_a = [], + circles_add_a = [], + circles_remove_a = []) +{ + translate([0,0,0]) lasercutoutSquare(x=x, y=y, simple_tabs = st[0], finger_joints = fj[0], + simple_tab_holes=simple_tab_holes_a[0], captive_nuts=captive_nuts_a[0], + captive_nut_holes = captive_nut_holes_a[0], + circles_add = circles_add_a[0], circles_remove = circles_remove_a[0]); + + translate([0,0,z+thickness]) lasercutoutSquare(x=x, y=y, simple_tabs = st[1], finger_joints = fj[1], + simple_tab_holes=simple_tab_holes_a[1], captive_nuts=captive_nuts_a[1], + captive_nut_holes = captive_nut_holes_a[1], + circles_add = circles_add_a[1], circles_remove = circles_remove_a[1]); + + translate([0,0,thickness]) rotate([90,0,0]) lasercutoutSquare(x=x, y=z, finger_joints = fj[2], + simple_tab_holes=simple_tab_holes_a[2], captive_nuts=captive_nuts_a[2], + captive_nut_holes = captive_nut_holes_a[2], + circles_add = circles_add_a[2], circles_remove = circles_remove_a[2]); + + translate([0,y+thickness,thickness]) rotate([90,0,0]) lasercutoutSquare(x=x, y=z, simple_tabs = st[2], + finger_joints = fj[3], + simple_tab_holes=simple_tab_holes_a[3], captive_nuts=captive_nuts_a[3], + captive_nut_holes = captive_nut_holes_a[3], + circles_add = circles_add_a[3], circles_remove = circles_remove_a[3]); + + if (sides>4) + { + translate([0,0,thickness]) rotate([0,-90,0]) lasercutoutSquare(x=z, y=y, finger_joints = fj[4], + simple_tab_holes=simple_tab_holes_a[4], captive_nuts=captive_nuts_a[4], + captive_nut_holes = captive_nut_holes_a[4], + circles_add = circles_add_a[4], circles_remove = circles_remove_a[4]); + } + + if (sides>5) + { + translate([x+thickness,0,thickness]) rotate([0,-90,0]) lasercutoutSquare(x=z, y=y, + simple_tabs = st[3], finger_joints = fj[5], + simple_tab_holes=simple_tab_holes_a[5], captive_nuts=captive_nuts_a[5], + captive_nut_holes = captive_nut_holes_a[5], + circles_add = circles_add_a[5], circles_remove = circles_remove_a[5]); + } +} +