OpenSCAD render of a faceted vase with a wide foot

A vase for Mother's Day

A deliberately faceted vase as a Mother's Day gift — a low $fn value for the polygonal look and a base made from the hull of two cylinders. Plus: printing it watertight.

Article complete (.zip)

“Article complete” gives you the OpenSCAD source as ready .scad files plus a printable copy — a CARECOM.united member benefit. Membership is free and non-binding. About membership →

OpenSCAD render of the vase

A deliberately faceted vase — and a good example of how a few OpenSCAD quirks add up to a piece of its own.

The tricks behind it

  • Variables instead of fixed numbers: af at the top set the dimensions; c = a - b*2 works out the inner diameter from the outer diameter minus twice the wall thickness. OpenSCAD needs no declaration.
  • $fn as a design choice: normally you turn $fn up to make round bodies smooth. Here it's deliberately low ($fn=10), so the vase comes out polygonal rather than round. A low resolution isn't always a fault — sometimes it's the look.
  • hull() for the foot: the base is the hull (hull()) of two cylinders — a narrow one on top, a wider one below. hull() wraps a convex skin around any objects; ideal for soft transitions.

Printing it watertight

A printed vase isn't automatically watertight: fine channels remain between the walls and through the layer-by-layer build-up. What helped was increasing the number of wall lines in the slicer and adding more material (a waterproof liner does the job too). That's not an OpenSCAD matter but a printing one — good to know before you first fill it with water.

// outer diameter of upper cylinder
a = 30;

// wall thickness of upper cylinder
b = 3;

// inner diameter of upper cylinder
c = a - b * 2;

// height of upper cylinder
d = 70;

// max. diameter of foot
e = 60;

// height of foot
f = 20;

$fn=10;

difference() {
    cylinder(d=a, h=d);
    cylinder(d=c, h=d);
}

hull() {
    translate([0,0, -2])
    cylinder(d=a, h =2);

    translate([0, 0, -f-2])
    cylinder(d=e, h = 2);
}
An unhandled error has occurred. Reload 🗙

Rejoining the server…

Rejoin failed… trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.