// -----------------------------------------
#local M1 = <Fillet_R+Neck_R,0,0>;
#local Y2 =
sqrt( pow(Fillet_R+Bowl_R,2)-pow(M1.x,2) );
#local M2 = <0,-Y2,0>;
#local XS = M1.x*Bowl_R/(Fillet_R+Bowl_R);
#local YS = M2.y*Fillet_R/(Fillet_R+Bowl_R);
#local S = <XS,YS,0>;
// --------------------------------------
// calculation of real height
#declare Total_Height =
Y2 + Bowl_R + Neck_L;
//---------------------------------------
// base shape ---------------------------
#if ( Merge_On = 1) merge{
#else union{
#end
difference{
cylinder{<0,0,0>,<0,S.y,0>,S.x}
torus{ M1.x, Fillet_R }
}// end diff
sphere{ M2, Bowl_R }
// neck --------------------------------
#if (Neck_L > 0)
cylinder{<0,-D,0>, <0,Neck_L,0>,Neck_R}
#end // of "#if( Neck_L > 0 )"
//--------------------------------------
translate<0,-M2.y+Bowl_R,0>
} // end of union or merge -----------------
|