With only two feet of Barbie Filament left, I ran some Reversal tests leading up to printing another replacement part for that digital caliper. The end result, printed in red ABS, turned out to be perfect:

Quite literally, I snapped the part off the build platform, lined it up in the caliper, ran that 1-72 screw through it, and It Just Worked. No cleanup, no trimming, no fiddling around, no problems!
Unlike the previous part, I printed this one as a singleton in the middle of the plate in order to concentrate on the other parameters:

I set the Cool plugin to 15 s/layer, which meant the top few layers printed very very slowly and the tip of the hook took forever. That’s fine with me: notice the total lack of overshoot and oscillation, compared with those Companion Cubes printed at much higher speeds.
Side view:

Bottom (the side against the caliper frame) view:

Top view:

The fill orientation is 0° for the first layer with 90° rotation, which lines it up neatly with the sides. There’s not enough room for anything fancy; the interior layers came out nearly solid even with the usual 0.25 fill ratio for the hex shapes.
The fill isn’t quite as solid as you might like, but given the overall size & shape, I think it’s just about as good as it can be expected.
Isn’t that just the cutest little thing you’ve ever seen?
The OpenSCAD code that built it:
// Digital Caliper thumbwheel holder // Ed Nisley - KE4ZNU - May 2011 Build = true; // set true to generate buildable layout $fn = 8; // default for holes // Extrusion values // Use 0 extra shells // 2 solid shells on the top & bottom ThreadThickness = 0.33; ThreadWT = 2.00; ThreadWidth = ThreadThickness * ThreadWT; HoleWindage = 0.0; // enlarge hole dia by small Finagle Constant Protrusion = 0.1; // extend holes beyond surfaces for visibility // Caliper dimensions WheelDia = 10.0; // thumbwheel OD WheelRadius = WheelDia/2; WheelMargin = 1.5; // space around wheel WheelRimThick = 2.5; // subtract from repair block ShaftDia = 2.90; // axle between knurled wheels ShaftRadius = ShaftDia/2; ShaftLength = 2.7; ShaftRetainer = 3.0; // thickness around shaft StubThick = 2.45; // stub of holder on caliper head StubLength = 6.0; // toward caliper head StubHeight = 7.0; // perpendicular to caliper head StubClearanceX = 0.0; // distance to caliper head StubClearanceZ = 0.75; // distance to caliper frame FrameLength = 50; // for display only FrameHeight = 16.0; FrameThick = 3.0; // Repart part dimensions ForkLength = StubLength - StubClearanceX; // toward caliper head around stub ForkHeight = StubHeight; // perpendicular to caliper head ForkGap = 0.3; // clearance to stub on all sides ForkBladeThick = 3 * ThreadWidth; // on each side of stub ShaftClearance = 0.1; // Additional clearance around shaft ShaftOffset = 8.5; // Shaft center to stub BoltHoleDia = 1.8; // 1-72 machine screw, more or less BoltHoleRadius = BoltHoleDia/2; BoltHoleOffset = 3.5; // offset from caliper frame to hole center // Convenient sizes and shapes FrameBlock = [FrameLength,FrameThick,FrameHeight]; StubBlock = [StubLength,StubThick,StubHeight]; StubMargin = [ForkGap,2*ForkGap,ForkGap]; RepairBlockLength = ForkLength + ShaftOffset; RepairBlockThick = 2*ForkBladeThick + StubThick; RepairBlockHeight = WheelRadius + ShaftRadius + ShaftRetainer; RepairBlock = [RepairBlockLength,RepairBlockThick,RepairBlockHeight]; // Caliper parts to show how repair fits in module CaliperParts() { union() { translate([0,0,-(StubClearanceZ + FrameHeight/2)]) cube(FrameBlock,center=true); translate([-(StubLength/2 + ShaftOffset),0,(StubHeight/2)]) cube(StubBlock,center=true); } } // Repair block with origin below wheel shaft module RepairPart() { difference() { // Body of repair part union() { translate([-RepairBlockLength/2,0,RepairBlockHeight/2]) cube(RepairBlock,center=true); translate([0,0,WheelRadius]) rotate([90,0,0]) cylinder(r=ShaftRadius+ShaftRetainer,h=ShaftLength,center=true,$fn=12); } // wheels translate([0,(ShaftLength + WheelRimThick)/2,WheelRadius]) rotate([90,0,0]) cylinder(r=(WheelRadius + WheelMargin),h=WheelRimThick,center=true,$fn=16); translate([-(WheelRadius + WheelMargin)/2, (ShaftLength + WheelRimThick)/2, (WheelRadius - Protrusion)/2]) cube([(WheelRadius + WheelMargin),WheelRimThick,(WheelRadius + Protrusion)], center=true); translate([0,-(ShaftLength + WheelRimThick)/2,WheelRadius]) rotate([90,0,0]) cylinder(r=(WheelRadius + WheelMargin),h=WheelRimThick,center=true,$fn=16); translate([-(WheelRadius + WheelMargin)/2, -(ShaftLength + WheelRimThick)/2, (WheelRadius - Protrusion)/2]) cube([(WheelRadius + WheelMargin),WheelRimThick,(WheelRadius + Protrusion)], center=true); // axle clearance translate([0,0,WheelRadius]) rotate([90,0,0]) cylinder(r=(ShaftRadius + 2*ShaftClearance), // hack clearance to match octagon to cube h=(ShaftLength + 2*Protrusion), center=true); translate([0,0,(WheelRadius - Protrusion)/2]) cube([(ShaftDia + 2*ShaftClearance), (ShaftLength + 2*Protrusion), (WheelRadius + Protrusion)], center=true); // stub of previous wheel holder translate([-(ShaftOffset + (ForkLength - ForkGap)/2 + Protrusion), 0, (StubHeight + ForkGap - Protrusion)/2]) cube([(ForkLength + ForkGap + Protrusion), (StubThick + 2*ForkGap), (StubHeight + ForkGap + Protrusion)], center=true); // mounting screw hole translate([-(RepairBlockLength - BoltHoleOffset),0,StubHeight/2]) rotate([90,0,0]) cylinder(r=(BoltHoleDia + HoleWindage)/2, h=(RepairBlockThick + 2*Protrusion), center=true,$fn=6); } } // Build it! if (!Build) { CaliperParts(); RepairPart(); } if (Build) { translate([-RepairBlockLength/2,0,RepairBlockHeight]) rotate([0,180,0]) RepairPart(); }
Ed,
Definitely a part to be proud of and a really good moment of satisfaction!
Now, I know, your thumb will be very happy each and every time that tool is used.
Best of all: It’s. Not. Pink. [grin]