code is quite compact.
ornamentCombo();
module ornamentCombo()
{
difference()
{
union()
{
scale(2.5){
ornament(m=4,n=1,zdiv=1);
rotate([0,0,4.5*4])ornament(m=4,n=1.5,zdiv=1);
}
translate([0,0,-5])cylinder(d1=10,d2=15,h=10,$fn=40);
translate([0,0,-5])cylinder(d=45,h=0.4,$fn=40);
}
translate([0,0,-2]) rotate([0,90,0])cylinder(r=1.5,h=20,center=true,$fn=30);
}
}
module ornament(m=2,n=1,zdiv=2)
{
union()
{
for(i=[0:36/n]) {
for(j=[0:36/m]) {
rotate([0,0,i*2])translate( [10*cos(m*10*j) *(sin(n*10*i/2)), 10*sin(m*10*j)*(sin(n*10*i/2)), i/zdiv] )sphere(r=1,$fn=10);
}
}
}
}
