$fn = 64; // --- Parameters --- pot_diameter = 76.2; // 3 inch inner diameter ring_wall = 4; // Wall thickness of the ring ring_height = 12; // Height of the ring arm_length = 15; // Length of the connection arm arm_width = 12; // Width of the connection arm twist_shaft_dia = 12; // Diameter of the twist-lock shaft twist_shaft_len = 8; // Length of the twist-lock shaft twist_tab_width = 22; // Total width of the locking tabs across twist_tab_depth = 6; // Width of the tabs (perpendicular to twist) twist_tab_thickness = 3; // Thickness of the tabs in the insertion direction // --- Main Object --- union() { // Main Pot Ring difference() { cylinder(d=pot_diameter + (ring_wall * 2), h=ring_height); // Inner cutout (extended to ensure clean manifold subtraction) translate([0, 0, -1]) cylinder(d=pot_diameter, h=ring_height + 2); } // Connection Arm // Overlaps the ring by 1mm and the shaft by 1mm to ensure it is watertight translate([pot_diameter/2 - 1, -arm_width/2, 0]) cube([arm_length + 2, arm_width, ring_height]); // Twist-Lock Connector translate([pot_diameter/2 + arm_length, 0, ring_height/2]) twist_lock_male(); } // --- Modules --- module twist_lock_male() { rotate([0, 90, 0]) { // Shaft cylinder(d=twist_shaft_dia, h=twist_shaft_len, center=false); // Locking Tabs translate([0, 0, twist_shaft_len]) { union() { // Central hub of the tab to keep it completely circular in the middle cylinder(d=twist_shaft_dia, h=twist_tab_thickness, center=false); // The extended locking flanges translate([0, 0, twist_tab_thickness/2]) cube([twist_tab_width, twist_tab_depth, twist_tab_thickness], center=true); } } } }