The throttle knob on our MTD snowthrower (a.k.a. snowblower) cracked apart around its metal shaft when I pulled it upward. A temporary fix involving duct tape and cable ties sufficed to start the engine, although the usual intense vibration shook the knob loose somewhere along the driveway during the next hour.
Update: Found it!
Although I have no photographic evidence, I did make a few quick measurements:

It fits an MTD model E6A4E, but I suspect nearly all their engines have identical throttle shafts:

The only practical way to build the thing has it standing on the shaft end, surrounded by a brim to improve adhesion, so I added (actually, subtracted) a pair of holes for music-wire reinforcements:

It definitely has a stylin’ look, next to the original choke control knob:

I omitted the finger grip grooves for obvious reasons.
The slot-and-hole came out slightly smaller than the metal shaft and, rather than wait for epoxy to cure, I deployed a 230 W soldering gun (not a piddly temperature-controlled iron suitable for electronics) on the shaft and melted it into the knob.
More snow may arrive this week and I printed another knob just in case …
The OpenSCAD source code as a GitHub Gist:
// MTD Snowthrower Throttle Knob | |
// Ed Nisley KE4ZNU 2020-12-18 | |
/* [Options] */ | |
Layout = "Show"; // [Build, Show] | |
// Extrusion parameters | |
/* [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); | |
//---------------------- | |
// Dimensions | |
Throttle = [17.0,1.85,6.5]; // blade insertion, thickness, width | |
PaddleSize = [25,30,9]; | |
PaddleRound = 4.0; | |
PaddleThick = 8.5; | |
StemDia = 13.0; | |
StemLength = 20.0; | |
PinDia = 1.6; | |
PinLength = PaddleSize.x + StemLength/2; | |
echo(str("Pin: ",PinLength," x ",PinDia," mm")); | |
//---------------------- | |
// 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(r=(FixDia + HoleWindage)/2, | |
h=Height, | |
$fn=Sides); | |
} | |
//---------------------- | |
// Pieces | |
module Paddle() { | |
difference() { | |
hull() { | |
translate([PaddleSize.x/2,0,0]) { | |
for (i=[-1,1], j=[-1,1]) | |
translate([i*(PaddleSize.x - PaddleRound)/2,j*(PaddleSize.y - PaddleRound)/2,0]) | |
sphere(d=PaddleRound,$fn=12); | |
rotate([0,90,0]) rotate(180/12) | |
cylinder(d=PaddleThick,h=PaddleSize.x,,center=true,$fn=12); | |
} | |
translate([-StemLength,0,0]) | |
rotate([0,90,0]) rotate(180/12) | |
cylinder(d=StemDia,h=Throttle.x,center=false,$fn=12); | |
} | |
translate([-StemLength,0,0]) | |
cube([2*Throttle.x,Throttle.y,Throttle.z],center=true); | |
translate([-(StemLength + Protrusion),0,0]) | |
rotate([0,90,0]) rotate(0*180/6) | |
PolyCyl(2*Throttle.y,Throttle.x,6); | |
for (j=[-1,1]) | |
translate([-StemLength/2,j*PaddleSize.y/6,0]) | |
rotate([0,90,0]) rotate(180/4) | |
PolyCyl(PinDia,PinLength,4); | |
} | |
} | |
//---------------------- | |
// Build it | |
if (Layout == "Show") | |
Paddle(); | |
if (Layout == "Build") { | |
translate([0,0,StemLength]) | |
rotate([0,-90,0]) | |
Paddle(); | |
} | |