+module RotateProjectSlice(offset, slice_size, nom_rad, real_rad){
+ // nom_rad > real_rad
+ rotate([0,0, atan2(offset, nom_rad) ]){
+ intersection(){
+ translate([-offset, -10, 0])
+ rotate([90,0,0])
+ linear_extrude(height= nom_rad*2)
+ children(0);
+ translate([0,0, -25])
+ cylinder(h=50, r= real_rad);
+ translate([0,0, -25])
+ linear_extrude(height= 50)
+ polygon([ [ 0,0 ],
+ [ -slice_size, -real_rad*2 ],
+ [ +slice_size, -real_rad*2 ] ]);
+ }
+ }
+}
+
+module RotateProject(x_min, x_max, slice_size, nom_rad, real_rad){
+ offs = [ for (i=[ x_min :
+ slice_size :
+ x_max + slice_size ]) i ];
+ echo (offs);
+ for (off=offs)
+ RotateProjectSlice(off, slice_size, nom_rad, real_rad)
+ children(0);
+}
+
+module BayonetCutout(){
+ RotateProject(bayo_c[0], bayo_i[0], bayo_slice_size,
+ main_dia/2 + side_thick,
+ main_dia/2 + rivet_tall)
+ polygon(bayo_polygon);
+}
+
+module ProfilesDemo(){
+ translate([-20,0]) MainProfile();
+ polygon(bayo_polygon);
+}
+
+module Cover(){
+ difference(){
+ union(){
+ rotate_extrude()
+ translate([main_dia/2, 0])
+ MainProfile();
+ translate([0,0, seal_thick])
+ cylinder(h= top_thick, r = main_dia/2);
+ }
+ for (r=[0,180])
+ rotate([0,0, r])
+ translate([0,0, -side_height])
+ BayonetCutout();
+ for (r=[0 : 60 : 179]) {
+ rotate([0,0, r]) {
+ height = top_thick - brace_above_below*2;
+ translate([0,0, seal_thick + brace_above_below + height/2 ])
+ cube(center=true, [ main_dia, brace_hole_width, height ]);
+ }
+ }
+ }
+}