with(plots); -1; with(plottools); -1 

`:=`(layer, proc (z, radius, height, flavor) options operator, arrow; cylinder([0, 0, z], radius, height, color = flavor) end proc); -1 

`:=`(cake, layer(0, 2, 1,  

`:=`(candles, proc (n) options operator, arrow; {seq(cylinder([`*`(1.5, `*`(cos(`+`(`/`(`*`(2, `*`(Pi, `*`(i))), `*`(n)))))), `*`(1.5, `*`(sin(`+`(`/`(`*`(2, `*`(Pi, `*`(i))), `*`(n)))))), 2.5], .1, ....
`:=`(candles, proc (n) options operator, arrow; {seq(cylinder([`*`(1.5, `*`(cos(`+`(`/`(`*`(2, `*`(Pi, `*`(i))), `*`(n)))))), `*`(1.5, `*`(sin(`+`(`/`(`*`(2, `*`(Pi, `*`(i))), `*`(n)))))), 2.5], .1, ....
 

display(`union`({cake}, candles(21)), style = patchnogrid); 1 

Plot