// -*- C -*-
-cover_ysz = 45;
-cover_len = 70;
+arch_height = 18;
+arch_width = 75;
+end_width = 25;
-tube_dia = 21;
+arch_thick = 4;
-attach_cx = -7;
-attach_cdy = 0;
-attach_w = 25;
+arch_breadth = 25;
-attach_inrad = 29;
-attach_hole_dist = 5;
-attach_hole_dia = 4 + 0.5;
-attach_ang = 45;
+hole_dia = 4 + 0.5;
-attach_dz = 2;
+pbase_tab = 12;
+pbase_thick = 2;
-comp_dx = 22;
-comp_xsz = 45;
-comp_zsz = 28;
+// computed
-comp_dy = 5;
+arch_alpha = atan(arch_height / (arch_width/2));
+arch_beta = 2*arch_alpha;
+echo(arch_alpha,arch_beta);
+arch_in_rad = arch_width/2 / sin(arch_beta);
+arch_to_chord = arch_in_rad * cos(arch_beta);
-comp_slope = 60;
+inner_pbase_thick = 6;
+echo(inner_pbase_thick);
-leftend_zsz = 10;
-leftend_dz = comp_zsz * 0.6;
+inner_pbase_rad = arch_in_rad * 2;
-min_thick = 4;
+end_thick = arch_thick;
-rightend_thick = 10;
-bolthead_space = 4;
+holes = [[[ 18.5, 4.5], [ 4.5, 21]], // left
+ [[ 5 , 5 ], [16 , 21]]]; // right
-// calculated
-
-cover_lcircle_r = cover_ysz / (1 + 1/sqrt(2));
-
-base_len = cover_len - cover_lcircle_r;
-
-attach_end_r = attach_w/2;
-
-attach_straight_len =
- attach_inrad + tube_dia + attach_hole_dist + attach_hole_dia/2
- - attach_end_r + attach_hole_dist;
-
-attach_down = tube_dia/2 + attach_dz;
-
-attach_xmax = attach_cx +
- cos(attach_ang) * attach_straight_len + attach_end_r;
-
-module RearSideTemplate(){
- polygon([[0.1,0],
- [-base_len,0],
- [-base_len,-cover_ysz],
- [0.1, -cover_ysz]]);
- translate([-base_len, -cover_ysz + cover_lcircle_r])
- circle(r=cover_lcircle_r);
+module ArchCircle(rad){
+ translate([0,-arch_to_chord])
+ circle(rad, $fa=0.1);
}
-module AttachTemplate(){
- hull(){
- polygon([[0, 0],
- [-0.1, 0],
- [-0.1, -cover_ysz],
- [0, -cover_ysz]]);
- translate([attach_cx, -attach_cdy]) rotate([0,0,-attach_ang]) {
- polygon([[-attach_cx, attach_w/2],
- [0, -attach_w/2],
- [attach_straight_len, -attach_w/2],
- [attach_straight_len, attach_w/2]]);
- translate([attach_straight_len, 0])
- circle(r=attach_end_r);
+module ArchProfile(pbase){
+ intersection(){
+ translate([-200,0])
+ square([400,200]);
+ difference(){
+ union(){
+ ArchCircle(arch_in_rad + arch_thick);
+ for (m=[0,1])
+ mirror([m,0])
+ translate([arch_width/2,0])
+ multmatrix([[1,pbase ? -0.75 : 0,0,0],
+ [0,1,0,0],
+ [0,0,1,0],
+ [0,0,0,1]])
+ square([end_width, pbase ? pbase_tab : end_thick]);
+ }
}
}
}
-module AttachElevation(anddown){
- hull(){
- translate([-cover_len - 0.5, leftend_dz - leftend_zsz/2])
- square([1, leftend_zsz]);
- translate([-comp_dx - comp_xsz/2, -0.1])
- square([comp_xsz, comp_zsz + min_thick]);
- translate([attach_xmax, 0])
- square([1, rightend_thick + bolthead_space]);
+module Holes(){
+ for (m=[0,1]) {
+ mirror([1-m,0])
+ translate([arch_width/2, 50, 0])
+ rotate([90,0,0])
+ for (h=holes[m]) {
+ translate(h)
+ cylinder(r=hole_dia/2, h=100, $fn=20);
+ }
}
- if (anddown)
- translate([-comp_dx, -attach_down-5])
- square([comp_dx + attach_xmax+2, attach_down+6]);
}
-module AttachElevationSelector(anddown) {
- translate([0,100,0]) rotate([90,0,0]) linear_extrude(height=200)
- AttachElevation(anddown);
+module MainCutout(){
+ ArchCircle(arch_in_rad);
}
-module BodyPositive(){
- intersection(){
- linear_extrude(height=60) RearSideTemplate();
- AttachElevationSelector(false);
- }
- intersection(){
- translate([0,0,-attach_down]) linear_extrude(height=100) AttachTemplate();
- AttachElevationSelector(true);
- }
-}
-
-module Cutouts(){
- Tube();
- Bolts();
- Computer();
-}
-
-module Body(){
+module Arch(){
difference(){
- intersection(){
- BodyPositive();
- translate([-100,-200,-100]) cube([200,200,200]);
+ rotate([0,0,180]){
+ linear_extrude(height=arch_breadth) {
+ difference(){
+ ArchProfile(false);
+ MainCutout();
+ }
+ }
+ difference(){
+ linear_extrude(height=pbase_thick){
+ difference(){
+ hull(){
+ ArchProfile(true);
+ ArchProfile(false);
+ }
+ intersection(){
+ MainCutout();
+ translate([0, -inner_pbase_thick
+ - (inner_pbase_rad - arch_in_rad)])
+ ArchCircle(inner_pbase_rad);
+ }
+ }
+ }
+ }
}
- Cutouts();
+ Holes();
}
}
-module Computer(){
- multmatrix([[1,0,0,0],
- [0,1, tan(90-comp_slope), 0],
- [0,0,1,0],
- [0,0,0,1]])
- translate([-comp_dx - comp_xsz/2, -cover_ysz + comp_dy, -50])
- cube([comp_xsz, 100, comp_zsz + 50]);
-}
-
-module Tube(){
- translate([attach_cx, -attach_cdy, -tube_dia/2 - 0.1 - attach_dz]) {
- rotate_extrude(convexity=10) {
- translate([attach_inrad + tube_dia/2, 0])
- circle(r=tube_dia/2);
- }
- }
-}
-
-module Bolt(){
- translate([0,0,-50]) linear_extrude(height=80) {
- circle(r=attach_hole_dia/2, $fn=20);
- }
- translate([0,0,rightend_thick]) linear_extrude(height=80) {
- circle(r=attach_hole_dia/2 * 2, $fn=20);
- }
-}
-
-module Bolts(){
- translate([attach_cx, -attach_cdy]) rotate([0,0,-attach_ang]) {
- translate([attach_inrad - attach_hole_dist - attach_hole_dia/2, 0])
- Bolt();
- translate([attach_inrad + tube_dia
- +attach_hole_dist + attach_hole_dia/2, 0])
- Bolt();
- }
-}
-
-module Demo(){
- Cutouts();
- %BodyPositive();
-}
-
-module Print(){
- rotate([-90,00])
- Body();
-}
-
-//Demo();
-//Body();
-Print();
+rotate([0,0,45]) Arch();