-
Clover Seam Ripper Cap
Mary wanted a rigid cap for a Clover seam ripper that came with a small plastic sheath, so I called one from the vasty digital deep:

Clover Seam Ripper – new cap The solid model looks about like you’d expect, with a brim around the bottom to paste it on the platform:

Clover Seam Ripper Cap – Slic3r preview I added a slightly tapered entry to work around the usual tolerance problems:

Clover Seam Ripper Cap – bottom view The taper comes from a hull wrapped around eight small spheres:

Clover Seam Ripper Cap – Entry Pyramid That’s surprisingly easy to accomplish, at least after you get used to this sort of thing:
hull() { // entry taper for (i=[-1,1] , j=[-1,1]) translate([i*(HandleEntry[0]/2 - StemRadius),j*(HandleEntry[1]/2 - StemRadius),0]) sphere(r=StemRadius,$fn=4*4); for (i=[-1,1] , j=[-1,1]) translate([i*(HandleStem[0]/2 - StemRadius),j*(HandleStem[1]/2 - StemRadius),HandleEntry[2] - StemRadius]) sphere(r=StemRadius,$fn=4*4); }The side walls are two threads thick and, at least in PETG, entirely too rigid to slide on easily. I think a single-thread wall with a narrow ridge would provide more spring; if this one gets too annoying, I’ll try that.
The OpenSCAD source code as a GitHub gist:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters// Clover seam ripper cap // Ed Nisley KE4ZNU – April 2016 //- Extrusion parameters – must match reality! // Build with a 5 mm brim to keep it glued to the platform ThreadThick = 0.25; ThreadWidth = 0.40; Protrusion = 0.1; //—— // Dimensions StemRadius = 0.50; // corner radius HandleStem = [6.1, 7.1, 9.0]; HandleEntry = HandleStem + [1.0,1.0,-4.0]; // Z is -(straight part of stem) Cap = [8.5,11.0,45.0]; // XY exterior, Z interior //———————- //- Build it difference() { union() { translate([0,0,Cap[2]/2]) // main body column cube(Cap,center=true); translate([-Cap[0]/2,0,Cap[2]]) // rounded cap rotate([0,90,0]) cylinder(d=Cap[1],h=Cap[0],$fn=8*4); translate([Cap[0]/2 – Protrusion,0,(Cap[2] + Cap[1]/2)/2]) // text rotate([0,90,0]) linear_extrude(height=ThreadWidth,convexity=10) text("Mary Nisley",halign="center",valign="center",size=0.5*Cap[1],font="Arial"); } hull() // stem + blade clearance for (i=[-1,1] , j=[-1,1]) translate([i*(HandleStem[0]/2 – StemRadius),j*(HandleStem[1]/2 – StemRadius),-Protrusion]) cylinder(r=StemRadius,h=Cap[2] + Protrusion,$fn=4*4); hull() { // entry taper for (i=[-1,1] , j=[-1,1]) translate([i*(HandleEntry[0]/2 – StemRadius),j*(HandleEntry[1]/2 – StemRadius),0]) sphere(r=StemRadius,$fn=4*4); for (i=[-1,1] , j=[-1,1]) translate([i*(HandleStem[0]/2 – StemRadius),j*(HandleStem[1]/2 – StemRadius),HandleEntry[2] – StemRadius]) sphere(r=StemRadius,$fn=4*4); } }