-module Holes(){
- translate([-(pump_seatstay_gap/2 + pump_dia/2), 0]) circle(r=pump_dia/2);
- translate([+(pump_seatstay_gap/2 + seatstay_mindia/2), 0]) {
- hull(){
- for (ud=[-1,1])
- translate([0, ud * (seatstay_maxdia-seatstay_mindia)/4])
- circle(r=seatstay_mindia/2);
+body_thick = 5;
+
+pin_workdepth = 16 - 1.0;
+pin_width = 11 + 1.0;
+pin_thick = 3 + 0.7;
+pin_base = 25;
+
+lock_manouvre_thick = 3.7 + 0.6;
+lock_manouvre_len = 18;
+lock_hang_width = 17.5;
+lock_manouvre_len_smaller = 13;
+
+body_depth_each = 5;
+clatter_gap = 0.5;
+
+roof_extent = 7;
+roof_thick = 2.5;
+
+// fudgeish
+
+cut_rotation = 2;
+holes_rotation = 9;
+pin_y_offset = 5.5;
+pin_x_offset = 0.5;
+ridge_rotation = 8.5;
+lock_hang_ratio = 7;
+
+// computed
+
+body_depth = pin_width + body_depth_each*2;
+
+module Holes(forbody=false){
+ translate([0, -pump_dia/2]);
+ rotate(-holes_rotation){
+ translate([-(pump_seatstay_gap/2 + pump_dia/2),
+ 0]) {
+ if (!forbody)
+ rotate(-ridge_rotation + holes_rotation)
+ translate([-50, -pump_ridge_width/2])
+ square([50, pump_ridge_width]);
+ circle(r=pump_dia/2, $fn=80);
+ }
+ translate([+(pump_seatstay_gap/2 + seatstay_mindia/2),
+ pump_dia/2 -seatstay_maxdia/2 -pump_seatstay_delta]) {
+ hull(){
+ for (ud=[-1,1])
+ translate([0, ud * (seatstay_maxdia-seatstay_mindia)/2])
+ circle(r=seatstay_mindia/2, $fn=50);
+ }
+ }
+ }
+}
+
+module BodyPlan(){
+ minkowski(){
+ circle(body_thick);
+ hull()
+ Holes(true);
+ }
+}
+
+module Body(){
+ translate([0,0,body_depth/2])mirror([0,0,1]){
+ linear_extrude(height=body_depth){
+ difference(){
+ BodyPlan();
+ Holes();
+ }
+ }
+ linear_extrude(height=roof_thick){
+ difference(){
+ hull(){
+ BodyPlan();
+ translate([0,-roof_extent,0]) BodyPlan();
+ }
+ Holes();
+ }