import sand3d as s3d
def dropper_bottle():
base = s3d.at(bottle(), z=0.3)
lid = s3d.at(cap(), z=44)
return s3d.assembly(class="tok-string">"dropper_bottle", base, lid)
def bottle(r=25, base=5.7, side=33, shoulder=42, neck=54, inner=21, bore=13, rim=17, round_r=2):
profile = s3d.poly([(0, 0), (r-round_r, 0), s3d.tangent_arc(to=(r, round_r)), (r, side), s3d.spline([(r, side), (r-1, side+4), (rim, shoulder)]), (rim, neck), (bore, neck), (bore, shoulder), (inner, side), (inner, base+round_r), s3d.tangent_arc(to=(inner-round_r, base)), (0, base)])
solid = s3d.revolve(class="tok-string">"glass_bottle", profile)
s3d.material(solid, class="tok-string">"glass", color=class="tok-string">"class="tok-comment">#643719")
return s3d.group(class="tok-string">"bottle", solid)
def cap(r=18, h=25, barrel=10, wall=1.5, ceiling=4, neck_r=16, bead=2, pitch=5):
solid = s3d.at(s3d.cylinder(class="tok-string">"cap_barrel", d=r*2, h=h-barrel), z=barrel)
s3d.fillet(solid, r=1, edges=class="tok-string">"top")
tool = s3d.cylinder(class="tok-string">"cap_cavity", d=(r-wall)*2, h=h-ceiling)
solid = s3d.cut(solid, tool)
band = s3d.revolve(class="tok-string">"neck_bands", s3d.poly([(neck_r-wall, 0), (neck_r+bead, 0), (neck_r+bead, bead/2), (neck_r, bead), (neck_r, pitch), (neck_r+bead/2, pitch+bead/2), (neck_r, pitch+bead), (neck_r, barrel+wall), (neck_r-wall, barrel+wall)]))
solid = s3d.join(solid, band)
s3d.material(solid, class="tok-string">"plastic", color=class="tok-string">"class="tok-comment">#181818")
bulb = s3d.at(dropper_bulb(), z=23.7)
return s3d.group(class="tok-string">"cap", solid, bulb)
def dropper_bulb(r=8, foot=9, h=24.6, dome=7, flare=3):
profile = s3d.poly([(0, 0), (foot, 0), (foot, flare/2), s3d.spline([(foot, flare/2), (r, flare), (r, h-dome)]), s3d.spline([(r, h-dome), (r-1, h-3), (r/2, h-0.5), (0, h)]), (0, 0)])
solid = s3d.revolve(class="tok-string">"rubber_bulb", profile)
s3d.material(solid, class="tok-string">"rubber", color=class="tok-string">"class="tok-comment">#232323")
return s3d.group(class="tok-string">"dropper_bulb", solid)