The Smell of Molten Projects in the Morning

Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.

Translucent Soap Dishes

A SquidWrench meeting discussion about printing transparent objects prompted me to conjure a soap dish from the vasty digital deep:

Shower Soap Dish - solid model
Shower Soap Dish – solid model

They’re all done in “natural” PETG with sufficient variations in speed, temperature, extrusion multiplier, and fill pattern to stock the shower & tub:

Translucent soap dishes
Translucent soap dishes

The single-thread sidewalls came out reasonably translucent in all the variations, but the baseplate remained stubbornly white-ish, even at 20 mm/s and 250 °C with 100% infill. The seams where the extruder retracts and lifts to the next layer remain conspicuous, with a scarf joint forming the white slab in the left-rear dish.

Quite a while ago, I’d considered making soap dishes with shattered-glass bottoms, but came to my senses. These have some key advantages:

  • Exactly the right size for narrow shower shelves
  • Light enough to not damage anything when it inevitably falls off
  • Reasonably unbreakable when that happens
  • Easily replaced

They’re also test pieces for the whole transparency thing, so it’s all good.

The OpenSCAD source code as a GitHub Gist:

// Shower soap dish
// Ed Nisley – KE4ZNU
// 2026-01-13
include <BOSL2/std.scad>
/* [Hidden] */
HoleWindage = 0.2;
Protrusion = 0.1;
NumSides = 3*3*4;
$fn=NumSides;
ID = 0;
OD = 1;
LENGTH = 2;
WallThick = 0.6;
BaseThick = 2.0;
//DishOA = [80.0,40.0,20.0]; // standing used Dove
DishOA = [90.0,50.0,30.0]; // standing Dove
//DishOA = [100.0,65.0,30.0]; // half-bar
DishTaper = [10.0,10.0];
CornerRadius = 15.0;
DrainOA = [10.0,DishOA.y,3.0];
DrainOC = DishOA.x/3;
//———-
// Build it
difference() {
union() {
linear_extrude(BaseThick)
rect([DishOA.x,DishOA.y] – DishTaper,rounding=CornerRadius);
rect_tube(DishOA.z,wall=WallThick,
size1=[DishOA.x,DishOA.y] – DishTaper,size2=[DishOA.x,DishOA.y],
rounding=CornerRadius,anchor=BOTTOM);
}
for (j=[-1,1])
right(j*DrainOC/2)
up(BaseThick)
cuboid(DrainOA,rounding=1.0,anchor=BOTTOM+BACK);
}

Comments

Spam comments get trashed, so don’t bother. Comment moderation may cause a delay.