With the pockets milled into the oak blocks, the next step is to insert a pair of comfy 3D printed finger grips:

Getting comfy required a bank shot off the familiar chord equation to find the radius of a much larger circle producing the proper depth between the known width. The recess then comes from subtracting a hotdog from a lozenge exactly filling the wood pocket.

A pair of grips takes just under two hours to print while requiring no attention, which I vastly prefer to tending the Sherline.
The wood pocket is 7 mm deep and the grips stand 6.5 mm tall, leaving just enough room for three blobs of acrylic adhesive to hold them together. After squishing the grips into their pockets, a pair of right angles aligned everything while the adhesive cured:

Mary asked for a longer weight for a place mat project, with a slightly narrower block to compensate for the additional length:

The grip and pocket were the same size, so it was just a matter of tweaking the block size and cutting more wood.
All in all, a quick project with satisfying results!
The OpenSCAD source code as a GitHub Gist:
// Oak ironing weight finger grips | |
// Ed Nisley KE4ZNU 2023-01 | |
Layout = "Show"; // [Block,Grip,Show,Build] | |
//- Extrusion parameters must match reality! | |
/* [Hidden] */ | |
ThreadThick = 0.25; | |
ThreadWidth = 0.40; | |
HoleWindage = 0.2; | |
Protrusion = 0.1; // make holes end cleanly | |
inch = 25.4; | |
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); | |
ID = 0; | |
OD = 1; | |
LENGTH = 2; | |
//---------- | |
// Dimensions | |
// Length along X axis | |
Block = [250.0,50.0,39.0]; // overall wood block | |
BlockRadius = 10.0; | |
CornerRadius = 10.0; | |
Kerf = 0.2; | |
Socket = [160.0,25.0,6.5]; // raw recess into block | |
SocketRadius = Socket.y/2; | |
echo(Socket=Socket,SocketRadius=SocketRadius); | |
WallThick = ThreadWidth; // Thinnest printed wall | |
Clearance = 0.5; // between grip and recess | |
GripBlock = Socket - [2*Clearance,2*Clearance,Clearance]; | |
GripBlockRadius = SocketRadius - Clearance; | |
echo(GripBlock=GripBlock); | |
GripDepth = 5.0; // finger grip recess | |
GripRecess = [GripBlock.x - 2*WallThick,GripBlock.y - 2*WallThick,GripDepth]; | |
GripRecessRadius = GripBlockRadius - WallThick; | |
echo(GripRecess=GripRecess,GripRecessRadius=GripRecessRadius); | |
GripChordRadius = (pow(GripDepth,2) + pow(GripRecess.y,2)/4) / (2*GripDepth); | |
echo(GripChordRadius=GripChordRadius); | |
NumSides = 4*8; | |
//---------- | |
// Shapes | |
module WoodBlock() { | |
difference() { | |
hull() | |
for (i=[-1,1], j=[-1,1]) // rounded block | |
translate([i*(Block.x/2 - BlockRadius),j*(Block.y/2 - BlockRadius),-Block.z/2]) | |
cylinder(r=BlockRadius,h=Block.z,$fn=NumSides); | |
for (j=[-1,1]) // grip socket | |
translate([0,j*(Block.y/2 + Protrusion),0]) | |
rotate([j*90,0,0]) | |
hull() { | |
for (i=[-1,1]) | |
translate([i*(Socket.x/2 - SocketRadius),(Socket.y/2 - SocketRadius),0]) | |
cylinder(r=SocketRadius,h=Socket.z + Protrusion,$fn=NumSides); | |
} | |
cube([2*Block.x,2*Block.y,Kerf],center=true); | |
} | |
} | |
module Grip() { | |
difference() { | |
hull() | |
for (i=[-1,1]) // overall grip block | |
translate([i*(GripBlock.x/2 - GripBlockRadius),0,0]) | |
cylinder(r=GripBlockRadius,h=GripBlock.z,$fn=NumSides); | |
hull() { | |
for (i=[-1,1]) // grip recess | |
translate([i*(GripBlock.x/2 - GripRecessRadius - WallThick), | |
0, | |
GripChordRadius + GripBlock.z - GripDepth]) | |
sphere(r=GripChordRadius,$fn=NumSides); | |
} | |
} | |
} | |
//---------- | |
// Build them | |
if (Layout == "Block") | |
WoodBlock(); | |
if (Layout == "Grip") | |
Grip(); | |
if (Layout == "Show") { | |
color("Brown") | |
WoodBlock(); | |
color("Silver") | |
for (j=[-1,1]) | |
translate([0,j*(Block.y/2 - GripBlock.z),0]) | |
rotate([j*-90,0,0]) | |
Grip(); | |
} | |
if (Layout == "Build") { | |
for (i=[-1,1]) | |
translate([i*(Block.y/2 - GripBlock.z),0,0]) | |
rotate([0,0,90]) | |
Grip(); | |
} |