-
Steel Shelving Foot Pads
All of the plastic pads vanished from the legs of a steel shelf unit somewhere along the way:

Steel Shelving Foot Pads – post shape Some solid modeling produced a suitable replacement shape:

Steel Shelving Foot Pads – no pegs – solid model A few prototypes (with a broken OEM version at lower left) matched the model to reality:

Steel Shelving Foot Pads – test pieces They’re natural & black TPU, because the job requirements include being tough and bendy:

Steel Shelving Foot Pads – installed Each one takes about half an hour to ooze from the Makergear M2, so after verifying the prototype’s fit, printing four at a time makes sense:

Steel Shelving Foot Pads – slicer The OpenSCAD code includes the pegs in the original and the first chunky TPU version:

Steel Shelving Foot Pads – with pegs – solid model It turns out they don’t have any obvious benefit in a TPU pad, so they’re disabled in the code.
Now those legs sit firmly on the floor and the post tops aren’t nearly so threatening.
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// Steel Shelf Foot Pads // Ed Nisley – KE4ZNU // 2026-04-18 include <BOSL2/std.scad> /* [Hidden] */ Protrusion = 0.01; NumSides = 4*9; $fn=NumSides; Clearance = 1.0/2; WallThick = 1.0 + Clearance; BaseThick = 2.0; PadOAH = BaseThick + 11.0; RollID = 6.4; RollOD = 7.4 + Clearance; RollOffset = 29.5; LegThick = 0.5 + 2*Clearance; Pins = [ [-(RollOD/2), (RollOffset + RollOD/2),0], [(RollOffset + RollOD/2), -(RollOD/2),0], ]; //—– // Build things union() { difference() { union() { for (pin = Pins) translate(pin) cyl(PadOAH,d=RollOD + 2*WallThick,anchor=BOTTOM); translate([-(WallThick + LegThick),-(WallThick + LegThick),0]) cuboid([2*WallThick + LegThick,WallThick + LegThick + Pins[0].y,PadOAH], anchor=BOTTOM+LEFT+FRONT); translate([-(WallThick + LegThick),-(WallThick + LegThick),0]) cuboid([WallThick + LegThick + Pins[1].x,2*WallThick + LegThick,PadOAH], anchor=BOTTOM+LEFT+FRONT); cyl(PadOAH,r=(WallThick + LegThick),anchor=BOTTOM); } up(BaseThick) cyl(PadOAH,r=LegThick,anchor=BOTTOM); up(BaseThick) for (pin = Pins) translate(pin) cyl(PadOAH,d=RollOD,anchor=BOTTOM); up(BaseThick) { translate(Pins[0]) cuboid([RollOD/2,RollOD/2,PadOAH],anchor=BOTTOM+LEFT+BACK); translate(Pins[1]) cuboid([RollOD/2,RollOD/2,PadOAH],anchor=BOTTOM+RIGHT+FRONT); } up(BaseThick) { fwd(LegThick) cuboid([LegThick,Pins[0].y + LegThick,PadOAH],anchor=BOTTOM+RIGHT+FRONT); left(LegThick) cuboid([Pins[1].x + LegThick,LegThick,PadOAH],anchor=BOTTOM+LEFT+BACK); } } if (false) for (pin = Pins) translate(pin) { cyl(PadOAH,d=RollID/2,anchor=BOTTOM); for (a = [0,90]) zrot(a) cuboid([1.0,RollID – 2*Clearance,PadOAH],anchor=BOTTOM); } }