$fn=64; // --- Parameters --- // Inner diameter of the clip for the stake/trellis wire stake_diameter = 8; // Inner diameter of the loop for the plant stem plant_diameter = 15; // Thickness of the walls wall_thickness = 2.5; // Height (Z-axis) of the clip clip_height = 5; // Opening width to snap onto the stake stake_opening = 5.5; // Opening width to insert the plant stem plant_opening = 3; // --- Calculated Variables --- r_stake = stake_diameter / 2; r_plant = plant_diameter / 2; w = wall_thickness; // Distance between centers to maintain consistent wall thickness between loops center_dist = r_stake + r_plant + w; // --- Geometry --- difference() { // Main body (Figure-8 shape) union() { cylinder(r=r_stake + w, h=clip_height); translate([center_dist, 0, 0]) cylinder(r=r_plant + w, h=clip_height); } // Stake hole translate([0, 0, -1]) cylinder(r=r_stake, h=clip_height + 2); // Plant hole translate([center_dist, 0, -1]) cylinder(r=r_plant, h=clip_height + 2); // Stake snap opening (facing -X direction) translate([-(r_stake + w + 1), -stake_opening/2, -1]) cube([r_stake + w + 1, stake_opening, clip_height + 2]); // Plant insertion opening (facing +X direction) translate([center_dist + r_plant - 1, -plant_opening/2, -1]) cube([r_plant + w + 2, plant_opening, clip_height + 2]); }