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