use $fn=50; // diameter (not radius!) throat = 44; inner = 47; // ? outer = 60; // ? lip_width = 2; // ? lip_height = 2; // ? lip_positions = [[50,35], [55,150], [55,265]]; flange_height = 15; size_x = 2; size_y = 2; size_z = 0; module rounding_circle(radius, corner_radius, angle) { rotate_extrude() { translate([radius, angle>=180?corner_radius:0]) difference() { rotate([0,0,angle]) square(corner_radius); circle(corner_radius); } } } module lip(angle, offs) { rotate([0,0,offs]) translate([0,0,lip_height/2]) rotate_extrude(angle=angle) translate([inner/2 - lip_width/2,0,0]) square([lip_width,lip_height], center=true); } module nikon_f_flange() { difference() { linear_extrude(flange_height) difference() { circle(outer/2); circle(inner/2); } translate([0,0,flange_height-1]) rounding_circle(29,1,0); } translate([0,0,flange_height - lip_height]) { for (i = lip_positions) { lip(i[0],i[1]); } } } gridfinity(size_x,size_y,size_z); translate(gf_top_center(size_x,size_y,size_z)) { nikon_f_flange(); translate([14,-39]) linear_extrude(1) text("Nikon", size = 7, font="sans:style=bold italic"); } translate(gf_top_center(size_x,size_y,size_z)) rounding_circle(32.99,3,180);