-
HP 7475A Plotter: Pen Refilling Station
A place to store your vials of blended inkjet juice, plus a workstation for the plotter pen you’re refilling and that ink vial up front:

HP7475A Plotter Pen Refilling Station The two pen holders accommodate ordinary fiber-tip pens and ceramic-tip pens. The slot along the front lets you keep track of the ink level, not that there’s much danger of running dry at 0.05 ml per refill from a vial holding 1 ml of blended ink. The big flange makes it harder for me to knock the damn thing over; avoiding an ink spill, even when you have a towel underneath, is a Good Thing.
The Slic3r tool path preview shows off the Hilbert Curve top & bottom infill:

Plotter Pen Refill Vial Holder – Slic3r preview The OpenSCAD source code:
// HP7475A Plotter Pen Refill Station // Ed Nisley KE4ZNU - August 2015 //- Extrusion parameters - must match reality! ThreadThick = 0.25; ThreadWidth = 0.40; function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); Protrusion = 0.1; HoleWindage = 0.2; 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); } //------ // Dimensions WallThick = 6*ThreadWidth; BaseThick = IntegerMultiple(1.0,ThreadThick); VialOD = 8.0; VialOC = VialOD + WallThick; VialArray = [4,4]; // number of vials in each direction PenOD = [14.7,11.7]; // regular fiber pen body, ceramic *cap* dia NumPens = len(PenOD); // really works for just two pens... PenLength = 38; FlangeOD = 18; echo(str("Max pen OD: ",max(PenOD))); echo(str("Number of pens: ",len(PenOD))); Holder = [(VialOC*VialArray[0] + WallThick),(VialOC*VialArray[1] + 2*FlangeOD + WallThick),(3*VialOD + BaseThick)]; HolderRound = 5.0; //- Build it difference() { union() { hull() { for (i=[-1,1], j=[-1,1]) { translate([i*(Holder[0]/2 - HolderRound),j*(Holder[1]/2 - HolderRound),0]) cylinder(r=HolderRound,h=Holder[2],$fn=8*4); } } hull() { for (i=[-1,1], j=[-1,1]) { translate([i*Holder[1]/2,j*(Holder[1]/2 - HolderRound),0]) cylinder(r=HolderRound,h=BaseThick,$fn=8*4); } } for (i=[0:len(PenOD) - 1]) translate([(i*Holder[0]/2 - Holder[0]/4),-Holder[1]/4,BaseThick]) { // spacing is a total hack rotate(180/12) cylinder(d=FlangeOD,h=PenLength,$fn=3*4); } } for (i=[0:VialArray[0] - 1] , j=[0:VialArray[1] - 1]) { vx = i*VialOC - (VialOC*(VialArray[0] - 1)/2); vy = j*VialOC - (VialOC*(VialArray[1] - 1)/2) + FlangeOD; translate([vx,vy,BaseThick]) rotate(180/8) PolyCyl(VialOD,Holder[2],8); } translate([0,(VialOD/2 - Holder[1]/2),BaseThick]) rotate(180/8) PolyCyl(VialOD,Holder[2],8); // edges along open side => snug fit for (i=[0:len(PenOD) - 1]) translate([(i*Holder[0]/2 - Holder[0]/4),-Holder[1]/4,BaseThick]) { // spacing is a total hack rotate(180/12) PolyCyl(PenOD[i],(PenLength + Protrusion),3*4); } }Mostly because I can…