While putting the speed wrenches in the box with the Sherline four-jaw chuck, it occurred to me that I had all the makings of a handle for Sherline’s steel tommy bars:

Because these are intended for pushing, rather than twisting, I dialed the knurl back to 32 DP, reduced the depth to 0.5 mm, and ran the bar almost all the way through the handle for strength:

A dab of urethane adhesive inside the handle holds the bar in place. They started out a snug slip fit, so we’ll see how well that holds the bars in place.
A tommy bar holds the spindle against the torque from the collet pusher:

A pair will come in handy with the three-jaw chuck the next time that one appears.
The white slab is a very early 3D printed tool from my Thing-O-Matic, made to hold the pin at exactly the proper distance from the pulley so it fits squarely into the pusher and locks it to the spindle:

Other folks make much nicer tommy bar handles than mine, but I’d say my 3D printed handles beat a common nail any day!
The OpenSCAD source code:
// Knurled handles for Sherline tommy bars // Ed Nisley - KE4ZNU - December 2013 use <knurledFinishLib_v2.scad> //- Extrusion parameters must match reality! // Print with 2 shells and 3 solid layers ThreadThick = 0.20; ThreadWidth = 0.40; HoleWindage = 0.2; // extra clearance Protrusion = 0.1; // make holes end cleanly PI = 3.14159265358979; inch = 25.4; //---------------------- // Dimensions ShaftDia = 10.0; // un-knurled section diameter ShaftLength = 10.0; // ... length SocketDia = 4.0; // tommy bar diameter SocketDepth = 40.0; KnurlLen = 35.0; // length of knurled section KnurlDia = 15.0; // ... diameter KnurlDPNom = 32; // Nominal diametral pitch = (# diamonds) / (OD inches) DiamondDepth = 0.5; // ... depth of diamonds DiamondAspect = 2; // length to width ratio NumDiamonds = floor(KnurlDPNom * KnurlDia / inch); echo(str("Num diamonds: ",NumDiamonds)); NumSides = 4*(NumDiamonds - 1); // 4 facets per diamond. Library computes diamonds separately! KnurlDP = NumDiamonds / (KnurlDia / inch); // actual DP echo(str("DP Nom: ",KnurlDPNom," actual: ",KnurlDP)); DiamondWidth = (KnurlDia * PI) / NumDiamonds; DiamondLenNom = DiamondAspect * DiamondWidth; // nominal diamond length DiamondLength = KnurlLen / round(KnurlLen/DiamondLenNom); // ... actual TaperLength = 0.75*DiamondLength; //---------------------- // 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) { Range = floor(50 / Space); for (x=[-Range:Range]) for (y=[-Range:Range]) translate([x*Space,y*Space,Size/2]) %cube(Size,center=true); } //- Build it ShowPegGrid(); difference() { union() { render(convexity=10) translate([0,0,TaperLength]) knurl(k_cyl_hg=KnurlLen, k_cyl_od=KnurlDia, knurl_wd=DiamondWidth, knurl_hg=DiamondLength, knurl_dp=DiamondDepth, e_smooth=DiamondLength/2); color("Orange") cylinder(r1=ShaftDia/2, r2=(KnurlDia - DiamondDepth)/2, h=(TaperLength + Protrusion), $fn=NumSides); color("Orange") translate([0,0,(TaperLength + KnurlLen - Protrusion)]) cylinder(r2=ShaftDia/2, r1=(KnurlDia - DiamondDepth)/2, h=(TaperLength + Protrusion), $fn=NumSides); color("Moccasin") translate([0,0,(2*TaperLength + KnurlLen - Protrusion)]) cylinder(r=ShaftDia/2,h=(ShaftLength + Protrusion),$fn=NumSides); } translate([0,0,(2*TaperLength + KnurlLen + ShaftLength - SocketDepth + Protrusion)]) PolyCyl(SocketDia,(SocketDepth + Protrusion),6); }