chiark / gitweb /
topeak-seatstay-lock: introduce pin_x_offset
[reprap-play.git] / brompton-computer-guard.scad
1 // -*- C -*-
2
3 arch_height = 18;
4 arch_width = 75;
5 end_width = 25;
6
7 arch_thick = 4;
8
9 arch_breadth = 25;
10
11 hole_dia = 4 + 0.5;
12
13 pbase_tab = 12;
14 pbase_thick = 2;
15
16 // computed
17
18 arch_alpha = atan(arch_height / (arch_width/2));
19 arch_beta = 2*arch_alpha;
20 echo(arch_alpha,arch_beta);
21 arch_in_rad = arch_width/2 / sin(arch_beta);
22 arch_to_chord = arch_in_rad * cos(arch_beta);
23
24 end_thick = arch_thick;
25
26 holes = [[[  5  , 5  ], [16  , 21]], // left
27          [[ 18.5, 4.5], [ 4.5, 21]]]; // right
28
29 module ArchCircle(rad){
30   translate([0,-arch_to_chord])
31     circle(rad, $fa=0.1);
32 }
33
34 module ArchProfile(pbase){
35   intersection(){
36     translate([-200,0])
37       square([400,200]);
38     difference(){
39       union(){
40         ArchCircle(arch_in_rad + arch_thick);
41         for (m=[0,1])
42           mirror([m,0])
43             translate([arch_width/2,0])
44             multmatrix([[1,pbase ? -0.75 : 0,0,0],
45                         [0,1,0,0],
46                         [0,0,1,0],
47                         [0,0,0,1]])
48             square([end_width, pbase ? pbase_tab : end_thick]);
49       }
50     }
51   }
52 }
53
54 module Holes(){
55   for (m=[0,1]) {
56     mirror([1-m,0])
57       translate([arch_width/2, 50, 0])
58       rotate([90,0,0])
59       for (h=holes[m]) {
60         translate(h)
61           cylinder(r=hole_dia/2, h=100, $fn=20);
62       }
63   }
64 }
65
66 module Arch(){
67   difference(){
68     rotate([0,0,180]){
69       difference(){
70         union(){
71           linear_extrude(height=arch_breadth) ArchProfile(false);
72           linear_extrude(height=pbase_thick) hull(){
73             ArchProfile(true);
74             ArchProfile(false);
75           }
76         }
77         translate([0,0,-1]) linear_extrude(height=100)
78           ArchCircle(arch_in_rad);
79       }
80     }
81     Holes();
82   }
83 }
84
85 rotate([0,0,45]) Arch();