chiark / gitweb /
topeak-seatstay-lock: minkowski for body
[reprap-play.git] / topeak-seatstay-lock.scad
1 // -*- C -*-
2
3 pump_dia = 27 + 0.9;
4 seatstay_mindia = 14 + 0.5;
5 seatstay_maxdia = 19 + 0.7;
6 pump_seatstay_gap = 12.3;
7 pump_seatstay_delta = 0.1;
8 pump_ridge_width = 8 + 2.0;
9
10 body_thick = 5;
11
12 pin_workdepth = 16 - 1.0;
13 pin_width = 11 + 1.0;
14 pin_thick = 3 + 0.7;
15 pin_base = 25;
16
17 lock_manouvre_thick = 3.7 + 0.6;
18 lock_manouvre_len = 18;
19 lock_hang_width = 17.5;
20 lock_manouvre_len_smaller = 13;
21
22 body_depth_each = 5;
23 clatter_gap = 0.5;
24
25 // fudgeish
26
27 cut_rotation = 2;
28 holes_rotation = 9;
29 pin_offset = 6;
30 ridge_rotation = 8.5;
31
32 // computed
33
34 body_depth = pin_width + body_depth_each*2;
35
36 module Holes(forbody=false){
37   translate([0, -pump_dia/2]);
38   rotate(-holes_rotation){
39     translate([-(pump_seatstay_gap/2 + pump_dia/2),
40                0]) {
41       if (!forbody)
42         rotate(-ridge_rotation + holes_rotation)
43           translate([-50, -pump_ridge_width/2])
44           square([50, pump_ridge_width]);
45       circle(r=pump_dia/2, $fn=80);
46     }
47     translate([+(pump_seatstay_gap/2 + seatstay_mindia/2),
48                pump_dia/2 -seatstay_maxdia/2 -pump_seatstay_delta]) {
49       hull(){
50         for (ud=[-1,1])
51           translate([0, ud * (seatstay_maxdia-seatstay_mindia)/2])
52             circle(r=seatstay_mindia/2, $fn=50);
53       }
54     }
55   }
56 }
57
58 module BodyPlan(){
59    minkowski(){
60     circle(body_thick);
61     hull()
62       Holes(true);
63   }
64 }
65
66 module Body(){
67   translate([0,0,-body_depth/2])
68     linear_extrude(height=body_depth){
69     difference(){
70       BodyPlan();
71       Holes();
72     }
73   }
74 }
75
76 module Pin(){
77   translate([0, pin_offset, 0]) rotate([0,90,0]){
78     translate([0, 0, -pin_thick/2])
79       linear_extrude(height=pin_thick){
80       translate([-pin_base/2, 0]) square([pin_base, 50]);
81       translate([-pin_width/2, -100]) square([pin_width, 101]);
82     }
83     hull() for (d=[0,10]) {
84       translate([d*2,-d,0])
85         translate([-lock_manouvre_thick/2,
86                    -pin_workdepth-100,
87                    -lock_manouvre_len_smaller])
88         cube([lock_manouvre_thick, 100,
89               lock_manouvre_len + lock_manouvre_len_smaller]);
90     }
91     translate([-lock_manouvre_thick/2, -pin_workdepth-50,
92                -lock_hang_width/2])
93       cube([50, 50, lock_hang_width]);
94   }
95 }
96
97 module All(){
98   difference(){
99     Body();
100     Pin();
101   }
102 }
103
104 module Piece(pc,interval){
105   translate([0,-pc*interval,0])
106     intersection(){
107       rotate([0,0,pc*180-cut_rotation])
108       translate([-200,clatter_gap/2,-200]) cube([400,400,400]);
109     All();
110   }
111 }
112
113 module PiecesPrint(){
114   rotate([0,180,0])
115     for (pc=[0,1]){
116       Piece(pc,4);
117     }
118 }
119
120 module Demo(){
121   for (pc=[0,1])
122     Piece(pc,0);
123 }
124
125 //Holes();
126 //Demo();
127 //All();
128 //Pin();
129 //Pieces();
130 PiecesPrint();