// Parameters
r = 50    // base radius
h = 10    // layer height
t = 0.005 // taper factor [0-1)
// Defines how to modify each layer of the vase.
// Each replica is shifted up the Z axis, and has a smoothly-varying radius
fn transform(@replicaId) {
  scale = r * abs(1 - (t * replicaId)) * (5 + cos((replicaId / 8): number(rad)))
  return {
    translate = [0, 0, replicaId * 10],
    scale = [scale, scale, 0],
  }
}
// Each layer is just a pretty thin cylinder with a fillet.
fn layer() {
  return startSketchOn(XY) // or some other plane idk
    |> circle(center = [0, 0], radius = 1, tag = $tag1)
    |> extrude(length = h)
    // |> fillet(
    //        radius = h / 2.01,
    //        tags = [tag1, getOppositeEdge(tag1)]
    //    )
}
// The vase is 100 layers tall.
// The 100 layers are replica of each other, with a slight transformation applied to each.
vase = layer() |> patternTransform(instances = 100, transform = transform)
