box_edge_width = 10;
below_plane_z = 4.5;
+fixing_head_th = 2.6;
+fixing_head_d = 7.82 + 0.25;
+plane_min_th = 2;
fixing_pitch = 10;
fixing_depth = 6;
fixing_nom_d = 4;
fixing_thread_d = fixing_nom_d + 0.375;
fixing_thread_pitch = 0.5; // M4
+fixing_hole_d = fixing_nom_d + 0.375;
fixing_receptacle_d = 4 + 2.5 + 2.5;
}
}
+module FullPlate() { ////toplevel
+ n_x = ceil(box_x / fixing_pitch / 2) + 1;
+ n_y = ceil(box_y / fixing_pitch / 2) + 1;
+
+ render() difference(){
+ render() intersection(){
+ BoxCavityModel();
+ linextr(-20, 0) square(1000, center=true);
+ }
+
+ for (xi=[-n_x : n_x])
+ for (yi=[-n_y : n_y])
+ translate(fixing_pitch * [xi, yi, 0]) {
+ linextr(-20, -below_plane_z + fixing_head_th)
+ circle(r = fixing_head_d/2);
+ linextr(-20, 20)
+ circle(r = fixing_nom_d/2);
+ }
+ }
+}
+
module OdAt(x,y) {
translate(fixing_pitch * [x,y,0])
children(0);
module OverallDemo() { ////toplevel
color("grey") BoxBottomModel();
+ color("blue") FullPlate();
color("red") OdAt(-5,-5.5) DriverHandleHolder();
}