← Back to Models
Soap dish v2 (honeycomb, tapered)

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 previewLoading 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.
Download current STL

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);
    }
}