The code is found here.
I haven't tested it yet (printed), but from measuring the dimensions and tolerances, it should be almost a 1:1 copy of what I had previously designed in a commercial, closed-source and not free CAD program, with less parametrization.
If there are any questions or issues with the code, or maybe improvement suggestions, let me know.
Paste this following code into OpenSCAD (free, open source) and set the parameters to whatever fits your washers and stamps. Then hit F5 and F6 to preview and render the two models. Finally, export the STL file and print it out.
// n0nce's Steel Washer backup jig
// ---------- configuration ---------- //
washer_dia = 30; // set to your washer's diameter (mm)
washer_hole = 10.5; // set to your washer's hole diameter (mm)
washer_h = 3; // set to your washer's thickness (mm)
stamp_w = 8; // set to your stamp's width (mm)
stamp_d = 8; // set to your stamp's depth (mm)
// ---------- code ---------- //
tolerance = 0.25;
// ---------- outer part ---------- //
module roundedcube(xx, yy, height, radius) {
$fn=60;
translate([0,0,height/2])
hull() {
translate([radius,radius,0])
cylinder(height,radius,radius,true);
translate([xx-radius,radius,0])
cylinder(height,radius,radius,true);
translate([xx-radius,yy-radius,0])
cylinder(height,radius,radius,true);
translate([radius,yy-radius,0])
cylinder(height,radius,radius,true);
}
}
module washer() {
cylinder(h=washer_h, r=washer_dia/2, center=false, $fn=200);
}
module outer() {
module outer_body() {
translate([-27, -27, 0])
roundedcube(54, 54, 20, 3);
}
module slot() {
translate([-5/2,0,washer_h])
cube([5,23,30]);
}
difference(){
outer_body();
// main cylinder to cut out
translate([0, 0, washer_h])
cylinder(h=100, r=38/2, center=false, $fn=200);
// washer cut out
translate([0, 0, -1])
scale([1, 1, 10])
washer();
// number slots cut outs
for (i=[0,2])
rotate(-14+i*14)
slot();
// letter slots cut outs
for (i=[0:7])
rotate(82+i*28)
slot();
}
}
// ---------- inner part ---------- //
module inner() {
module inner_body() {
// main part
cylinder(h=20-washer_h, r=38/2-0.3, center=false, $fn=200);
// handle
cylinder(h=20-washer_h+8, d=9, center=false, $fn=200);
// sticking out part
rotate(-14) translate([-4/2,0,0])
cube([4,22.5,20-washer_h]);
}
module puncher_hole() {
sw=stamp_w+tolerance;
sd=stamp_d+tolerance;
rotate(-14) translate([-sw/2,
(washer_dia+washer_hole)/4-sd/2,
-10])
cube([sw,sd,50]);
}
translate([0, 0, washer_h]) {
difference() {
inner_body();
puncher_hole();
}
}
}
outer();
translate([70,0,0])
inner();