This isn’t quite the smoothly rounded clip I had in mind:

It seems somewhat better looking than the square design, though:

I ran off a few of both styles to have some on hand:

They’re in a bag until I install the new LED strips and needle light.
The OpenSCAD source code:
// LED Cable Clips // Ed Nisley - KE4ZNU - October 2014 Layout = "Oval"; // Oval Square Build //- Extrusion parameters must match reality! ThreadThick = 0.20; ThreadWidth = 0.40; HoleWindage = 0.2; // extra clearance Protrusion = 0.1; // make holes end cleanly AlignPinOD = 1.70; // assembly alignment pins: filament dia function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); //---------------------- // Dimensions Base = [12.0,12.0,IntegerMultiple(2.0,ThreadThick)]; // base over sticky square CableOD = 2.0; BendRadius = 3.0; Bollard = [BendRadius,(sqrt(2)*Base[0]/2 - CableOD - BendRadius),2*CableOD]; B_BOT = 0; B_TOP = 1; B_LEN = 2; NumSides = (Shape == "Square") ? 5*4 : 6*3; //---------------------- // Useful routines module PolyCyl(Dia,Height,ForceSides=0) { // based on nophead's polyholes Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2); FixDia = Dia / cos(180/Sides); cylinder(r=(FixDia + HoleWindage)/2, h=Height, $fn=Sides); } module ShowPegGrid(Space = 10.0,Size = 1.0) { RangeX = floor(100 / Space); RangeY = floor(125 / Space); for (x=[-RangeX:RangeX]) for (y=[-RangeY:RangeY]) translate([x*Space,y*Space,Size/2]) %cube(Size,center=true); } //-- Square clip with central bollard module SquareBollard() { intersection() { translate([0,0,(Base[2] + Bollard[B_LEN])/2]) // overall XYZ outline cube(Base + [0,0,Bollard[2]],center=true); union() { translate([0,0,Base[2]/2]) // oversize mount base scale([2,2,1]) cube(Base,center=true); for (i=[-1,1] , j=[-1,1]) { // corner bollards translate([i*Base[0]/2,j*Base[1]/2,(Base[2] - Protrusion)]) rotate(180/NumSides) cylinder(r=Bollard[B_BOT],h=(Bollard[B_LEN] + Protrusion),center=false,$fn=NumSides); translate([0,0,(Base[2] - Protrusion)]) // center tapered bollard cylinder(r1=Bollard[B_BOT],r2=Bollard[B_TOP], h=(Bollard[B_LEN] + Protrusion), center=false,$fn=NumSides); } } } } //-- Oval clip with central passage module OvalPass() { intersection() { translate([0,0,(Base[2] + Bollard[B_LEN])/2]) // overall XYZ outline cube(Base + [0,0,2*CableOD],center=true); union() { translate([0,0,Base[2]/2]) // oversize mount base scale([2,2,1]) cube(Base,center=true); for (j=[-1,1]) // bending ovals translate([0,j*Base[1]/2,(Base[2] - Protrusion)]) resize([Base[0]/0.75,0,0]) cylinder(d1=0.75*(Base[1]-CableOD),d2=(Base[1]-CableOD)/cos(180/NumSides), h=(Bollard[B_LEN] + Protrusion), center=false,$fn=NumSides); } } /* # translate([0,0,6]) rotate([0,90,0]) cylinder(d=CableOD,h=10,center=true,$fn=48); */ } //---------------------- // Build it ShowPegGrid(); if (Layout == "Square") SquareBollard(); if (Layout == "Oval") OvalPass();