+module RailProfile(){
+ yt_base = thinbox_front_z;
+ yt = yt_base - lid_rail_behindslop;
+ pegx = (lid_inner_w_nom - patbox_centres)/2;
+
+ polygon([[-0.1, yt],
+ [pegx - peg_main_dia/2, yt],
+ [pegx - peg_main_dia/2, yt_base - peg_straight_len],
+ [-0.1,
+ yt_base - peg_straight_len - (pegx - peg_main_dia/2)/peg_slope
+ -0.1]]);
+}
+
+module LidSide(){
+ overlap = [0.1, 0.1, 0.1];
+
+ // main side profile
+ rotate([90,0,0])
+ linear_extrude(height= lid_side_wall)
+ LidSideProfile();
+
+ // seatline
+ translate(-overlap)
+ cube(overlap + [total_len, lid_seatline_w, lid_seatline_h]);
+
+ // lid front
+ translate([-0.1, -0.1, -lid_front_wall])
+ 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();
+}
+
+module PegProfile(){
+ polygon([[-peg_engage_depth, (peg_engage_dia - peg_outer_slop)/2],
+ [0, (peg_engage_dia - peg_outer_slop)/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(){
+ rotate_extrude($fn=50)
+ rotate([0,0,-90])
+ PegProfile();
+}
+
+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(){
+ translate([0, -lid_inner_w/2, 0]) LidSide();
+ 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();
+ }
+ }
+}
+
+//LidSide();
+//PegProfile();
+//Peg();
+//TopPattressBox();
+//RailProfile();
+Demo();