import sand3d as s3d
def onion():
main = s3d.at(bulb(), x=-1, y=-7)
return s3d.assembly(&class="tok-comment">#39;onion39;, main)
def bulb(w=74, d=79, h=72.1, axis_shift=7, mid=36):
skin = s3d.loft(&class="tok-comment">#39;bulb39;,
s3d.station(z=-46, w=9, d=9),
s3d.station(z=-42, w=26, d=24),
s3d.station(z=-34, w=45, d=43),
s3d.station(z=-27, w=60, d=58),
s3d.station(z=-11, w=73, d=71),
s3d.station(z=-3, w=w, d=h),
s3d.station(z=4, w=71, d=69),
s3d.station(z=12, w=61, d=61),
s3d.station(z=20, w=46, d=45),
s3d.station(z=28, w=24, d=23),
s3d.station(z=31, w=18, d=18))
skin = s3d.at(skin, rx=-90, y=axis_shift, z=mid)
s3d.material(skin, &class="tok-comment">#39;plasticclass="tok-string">39;, color=39;#c7965139;, roughness=0.7)
stem = s3d.at(neck(), x=1.5, y=49, z=20.5)
scar = s3d.at(root_patch(), x=1, y=-39.5, z=24.5)
return s3d.group(&class="tok-comment">#39;bulb_group39;, skin, stem, scar)
def neck(w=29, d=51.6, h=29, flap_w=2.5, flap_t=1.1, flap_l=4):
stem = s3d.loft(&class="tok-comment">#39;neck39;,
s3d.station(z=-22, w=w, d=h),
s3d.station(z=-14, w=18, d=18),
s3d.station(z=-6, w=15, d=14),
s3d.station(z=1, w=12, d=12),
s3d.station(z=9, w=10, d=12, y=1),
s3d.station(z=17, w=8, d=10, y=3),
s3d.station(z=24, w=5, d=5, y=6))
flap = s3d.loft(&class="tok-comment">#39;curled_flap39;,
s3d.station(z=0, w=flap_w, d=flap_t),
s3d.station(z=flap_l/2, w=flap_w, d=flap_t, x=flap_t),
s3d.station(z=flap_l, w=flap_w/2, d=flap_t, x=flap_t/2))
flaps = s3d.at(flap, on=s3d.ring(n=3, r=flap_w-flap_t/2, on=s3d.Frame(origin=(0, 6, 22))))
stem = s3d.join(stem, flaps)
stem = s3d.at(stem, rx=-90, z=h/2+2)
s3d.material(stem, &class="tok-comment">#39;plasticclass="tok-string">39;, color=39;#b29a6539;, roughness=0.85)
return s3d.group(&class="tok-comment">#39;neck_group39;, stem)
def root_patch(w=21, d=9.4, h=19):
scar = s3d.loft(&class="tok-comment">#39;scar39;,
s3d.station(z=-d/2, w=1, d=1),
s3d.station(z=-1.5, w=7, d=8),
s3d.station(z=1.5, w=w, d=h),
s3d.station(z=d/2, w=w*1.2, d=h*1.2))
scar = s3d.at(scar, rx=-90, z=h/2-1)
s3d.material(scar, &class="tok-comment">#39;plasticclass="tok-string">39;, color=39;#80633c39;, roughness=0.95)
return s3d.group(&class="tok-comment">#39;root_patch_group39;, scar)