+ cube([total_len+0.1, lid_inner_w/2 + 0.2, lid_front_wall]);
+
+ // lid top
+ translate([-lid_top_wall, -lid_side_wall, -lid_front_wall])
+ cube([lid_top_wall, lid_inner_w/2 + 10, lid_front_wall + lid_inner_max_h]);
+
+ // rail
+ rotate([90,0,90])
+ translate([0,0,-0.1])
+ linear_extrude(height=raillen+0.1) //todo
+ RailProfile();
+
+ // rail end
+ translate([raillen, 0,0])
+ intersection(){
+ rotate_extrude($fn=50)
+ RailProfile(lslop=0);
+ translate([0, 25-0.1, 0])
+ cube(50, center=true);
+ }
+}
+
+module Lid(){ ////toplevel
+ for (m=[0,1])
+ mirror([0,m,0])
+ translate([0, -lid_inner_w/2, 0]) LidSide();
+}
+
+module PegProfile(){
+ polygon([[-peg_engage_depth, (peg_engage_dia - $peg_outer_slop_engage)/2],
+ [0, (peg_engage_dia - $peg_outer_slop_engage)/2],
+ [0, (peg_main_dia - $peg_outer_slop)/2],
+ [peg_straight_len, (peg_main_dia - $peg_outer_slop)/2],
+ [peg_main_height, (peg_max_dia - $peg_outer_slop)/2],
+ [peg_main_height+peg_top_thick, (peg_max_dia - $peg_outer_slop)/2],
+ [peg_main_height+peg_top_thick, (peg_inner_dia + $peg_inner_slop)/2],
+ [-peg_engage_depth, (peg_inner_dia + $peg_inner_slop)/2]]);
+}
+
+module Peg(){ ////toplevel
+ echo($peg_outer_slop_engage);
+ rotate_extrude($fn=50)
+ rotate([0,0,-90])
+ PegProfile();
+}
+
+module Pegs(){ ////toplevel
+ baseslop = 0.1;
+ dslops = [0, -0.5, -1.0, -1.5];
+ stride = peg_max_dia + 4;
+ for (i=[0:len(dslops)-1]) {
+ translate([i*stride,0,0])
+ assign($peg_outer_slop_engage= baseslop + dslops[i])
+ Peg();
+ }
+}
+
+module AtFixingCentres(){
+ for (fc=[-1,+1]) {
+ translate([patbox_side/2 + fc*patbox_centres/2,
+ patbox_side/2,
+ 0])
+ children();
+ }
+}
+
+module TopPattressBox(){
+ difference(){
+ translate([0,0, -lid_thinbox_h])
+ cube([patbox_side, patbox_side, lid_thinbox_h]);
+ AtFixingCentres(){
+ translate([0,0,-10]) cylinder(r=peg_engage_dia/2, h=20);
+ }
+ }
+}
+
+module Demo(){
+ Lid();
+ translate([0,0, thinbox_front_z])
+ rotate([0,180,0]) translate([0, -patbox_side/2, 0])
+ rotate([0,0,90]) union(){
+ %TopPattressBox();
+ color("blue") AtFixingCentres(){
+ rotate([180,0,0]) Peg();
+ }
+ }