$fn=64; // --- Parameters --- hex_radius = 35; // Outer radius of the hex tile base_thickness = 3; // Thickness of the hex base cable_diameter = 6.5; // Diameter of the cable to hold clip_thickness = 2.5; // Thickness of the clip walls clip_width = 12; // Width of the clip clip_opening = 4.5; // Snap opening size clip_offset = 18; // Offset from center for the two clips clearance = 1; // Bottom clearance under the cable // --- Modules --- module hex_tile() { // Hexagon base (using $fn=6 for hex shape) cylinder(r=hex_radius, h=base_thickness, $fn=6); } module cable_clip() { z_center = base_thickness + clearance + cable_diameter/2; outer_r = cable_diameter/2 + clip_thickness; difference() { union() { // Main cylindrical clip translate([0, 0, z_center]) rotate([90, 0, 0]) cylinder(r=outer_r, h=clip_width, center=true); // Solid base to connect clip to the hex tile securely translate([0, 0, z_center/2]) cube([outer_r*2, clip_width, z_center], center=true); } // Inner cable channel translate([0, 0, z_center]) rotate([90, 0, 0]) cylinder(r=cable_diameter/2, h=clip_width + 2, center=true); // Top opening for snapping cable translate([0, 0, z_center + outer_r/2]) cube([clip_opening, clip_width + 2, outer_r + 1], center=true); } } // --- Assembly --- union() { hex_tile(); translate([clip_offset, 0, 0]) cable_clip(); translate([-clip_offset, 0, 0]) cable_clip(); }