Soap dish v2 (honeycomb, tapered)
by Mach3 ·
Tapered walls for dynamic look
Interactive Preview & Customizer
3D STL viewer with browser-based OpenSCAD rendering on parameter changes.
Loading preview...
--- Parameters ---
step 0.5
step 0.5
step 0.5
step 0.5
step 0.5
step 0.1
step 0.1
step 0.1
step 1
step 0.1
step 0.5
WASM compiler loads on first parameter change.
Prompt
can we do a more complex outer walls? will it print nicely on FDM?
OpenSCAD Code
// Hollow Tapered Honeycomb Soap Dish
// 35-degree taper with fully open hexagonal cells
// --- Parameters ---
base_width = 135;
base_height = 135;
total_depth = 24;
wall_angle = 35; // Taper angle from vertical
corner_radius = 30;
hex_size = 18; // Center-to-vertex of each cell
hex_wall = 1.6; // Thickness of internal ribs
outer_skin = 1.6; // Thickness of the outer tapered boundary
dish_radius = 220;
dish_depth = 16;
$fn = 60;
// --- Calculations ---
expansion = total_depth * tan(wall_angle);
// --- Main Render ---
difference() {
union() {
// 1. Tapered Outer Frame (The Rim)
difference() {
taper_solid(base_width, base_height, total_depth, corner_radius, expansion);
translate([0, 0, -1])
taper_solid(base_width - outer_skin*2, base_height - outer_skin*2, total_depth + 2, corner_radius - outer_skin, expansion);
}
// 2. Hollow Honeycomb Lattice
intersection() {
// Keep ribs inside the tapered volume
taper_solid(base_width, base_height, total_depth, corner_radius, expansion);
// Extrude the 2D mesh vertically
linear_extrude(height = total_depth)
honeycomb_lattice_2d(
base_width + expansion*2,
base_height + expansion*2,
hex_size,
hex_wall
);
}
}
// 3. Spherical Scoop Cutout
// This creates the ergonomic curve for the soap bar
sphere_z = (total_depth - dish_depth) + dish_radius;
translate([0, 0, sphere_z])
sphere(r = dish_radius, $fn=120);
}
// --- Modules ---
module honeycomb_lattice_2d(w, h, size, wall) {
// Spacing for flat-top hexagons
dx = size * sqrt(3);
dy = size * 1.5;
// Calculate internal radius to maintain specific wall thickness
inner_r = size - (wall / sqrt(3));
cols = ceil(w / dx) + 1;
rows = ceil(h / dy) + 1;
difference() {
square([w, h], center = true);
for (iy = [-rows/2 : rows/2]) {
for (ix = [-cols/2 : cols/2]) {
// Stagger every other row
x_offset = (abs(iy) % 2 == 1) ? dx/2 : 0;
translate([ix * dx + x_offset, iy * dy])
rotate([0, 0, 30]) // Flat-top orientation
circle(r = inner_r, $fn = 6);
}
}
}
}
module taper_solid(w, h, z, r, exp) {
hull() {
// Bottom layer footprint
linear_extrude(0.1)
offset(r = r) square([max(0.1, w - 2*r), max(0.1, h - 2*r)], center = true);
// Top layer footprint (expanded by the taper angle)
translate([0, 0, z - 0.1])
linear_extrude(0.1)
offset(r = r + exp) square([max(0.1, w - 2*r), max(0.1, h - 2*r)], center = true);
}
}