-
Reticle Guide for Ruler Quilting
I made the pencil guides to help Mary design ruler quilting patterns, but sometimes she must line up the ruler with a feature on an existing pattern. To that end, we now have a reticle guide:

Ruler Adapters – pencil guide and reticle The general idea is that it’s easier to see the pattern on paper through the crosshair than through a small hole. You put the button over a feature, align the reticle, put the ruler against the button, replace it with pencil guide, and away you go.
The solid model looks much more lively than you’d expect:

Ruler Adapter – reticle – Slic3r preview Printing up a pair of each button produces the same surface finish as before; life is good!
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// Quilting Ruler Adapters // Ed Nisley KE4ZNU October 2016 //- Extrusion parameters must match reality! 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); //———- // Dimensions ID = 0; OD = 1; LENGTH = 2; Offset = 0.25 * inch; Template = [2.0,2*Offset,3.0]; NumSides = 16*4; HoleSides = 8; //———————- // Useful routines module PolyCyl(Dia,Height,ForceSides=0) { // based on nophead's polyholes Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2); FixDia = Dia / cos(180/Sides); cylinder(d=(FixDia + HoleWindage),h=Height,$fn=Sides); } //———- // Build them translate([-Template[OD],0,0]) difference() { cylinder(d=Template[OD],h=Template[LENGTH],$fn=NumSides); translate([0,0,-Template[LENGTH]]) PolyCyl(Template[ID],3*Template[LENGTH],HoleSides); translate([0,0,-Protrusion]) cylinder(d1=2*Template[ID],d2=Template[ID],h=Template[LENGTH]/3 + Protrusion,$fn=HoleSides); translate([0,0,Template[LENGTH] + Protrusion]) mirror([0,0,1]) cylinder(d1=2*Template[ID],d2=Template[ID],h=Template[LENGTH]/3 + Protrusion,$fn=HoleSides); } translate([Template[OD],0,0]) difference() { cylinder(d=Template[OD],h=Template[LENGTH],$fn=NumSides); for (a=[45,135]) rotate(a) cube([0.70*Template[OD],0.15*Template[OD],3*Template[LENGTH]],center=true); }