$fn=64; // --- Parameters --- // Cup dimensions cup_outer_diameter = 60; cup_inner_diameter = 54; cup_height = 70; cup_floor_thickness = 3; // Dovetail dimensions (ArtArsenal / standard rail) dovetail_width_wide = 20; dovetail_width_narrow = 12; dovetail_depth = 5; dovetail_height = 50; // Standoff dimensions (connects cup to dovetail) standoff_width = 12; standoff_depth = 8; // --- Model --- union() { // Main Cup Body difference() { cylinder(d=cup_outer_diameter, h=cup_height); // Hollow interior translate([0, 0, cup_floor_thickness]) cylinder(d=cup_inner_diameter, h=cup_height + 1); } // Mounting Mechanism // Center the mount vertically on the cup translate([0, 0, (cup_height - dovetail_height) / 2]) { // Standoff block (overlaps with cup and dovetail to ensure manifoldness) translate([-standoff_width/2, cup_outer_diameter/2 - 2, 0]) cube([standoff_width, standoff_depth + 2, dovetail_height]); // Male Dovetail translate([0, cup_outer_diameter/2 + standoff_depth - 0.1, 0]) linear_extrude(height=dovetail_height) polygon([ [-dovetail_width_narrow/2, 0], [ dovetail_width_narrow/2, 0], [ dovetail_width_wide/2, dovetail_depth], [-dovetail_width_wide/2, dovetail_depth] ]); } }