import sand3d as s3d
def housing():
body = s3d.at(main_housing(), x=-81.5, y=11.5)
loop = s3d.at(top_loop(), x=-83, y=-17, z=226)
surround = s3d.at(side_surround(), x=-165.5, y=4, z=120.5)
inset = s3d.at(lower_inset(), x=-81, y=49, z=22.5)
return s3d.assembly(class="tok-string">"housing", body, loop, surround, inset)
def main_housing(w=163, d=71, h=228):
solid = s3d.box(class="tok-string">"housing", w=w, d=d, h=h)
s3d.material(solid, class="tok-string">"plastic", color=class="tok-string">"class="tok-comment">#2f2f2f")
return s3d.group(class="tok-string">"main_housing", solid)
def top_loop(w=42, d=14, h=74, bore=28, stem=6):
disk = s3d.cylinder(class="tok-string">"loop", d=w, h=d)
disk = s3d.pocket(disk, s3d.circle(d=bore), depth=d*0.7, on=disk.face(class="tok-string">"top"))
disk = s3d.fillet(disk, r=1, edges=class="tok-string">"top")
disk = s3d.at(disk, y=-2, z=h-w/2, rx=90)
s3d.material(disk, class="tok-string">"plastic", color=class="tok-string">"class="tok-comment">#2f2f2f")
path = s3d.spline([(9,10,0),(9,9,32),(9,6,44),(4,-9,53)], tangents=((0,0,1),(-1,-1,0)))
stalk = s3d.wire(class="tok-string">"stem", path=path, d=stem)
s3d.material(stalk, class="tok-string">"plastic", color=class="tok-string">"class="tok-comment">#9b692c")
second = s3d.wire(class="tok-string">"second_stem", path=s3d.spline([(-3,10,0),(-3,8,31),(-3,3,43),(-5,-10,51)]), d=stem)
s3d.material(second, class="tok-string">"plastic", color=class="tok-string">"class="tok-comment">#265587")
foot = s3d.box(class="tok-string">"foot", w=w*0.7, d=d, h=3)
s3d.material(foot, class="tok-string">"steel", color=class="tok-string">"class="tok-comment">#505657")
return s3d.group(class="tok-string">"top_loop", disk, stalk, second, foot)
def side_surround(w=15, d=24, h=85):
solid = s3d.extrude(class="tok-string">"surround", s3d.ellipse(w=h, d=d), h=2)
solid = s3d.at(solid, x=w/2-5, z=h/2, ry=90)
s3d.material(solid, class="tok-string">"steel", color=class="tok-string">"class="tok-comment">#646465")
shaft = s3d.box(class="tok-string">"shaft", w=w*2, d=d/3, h=d/3)
shaft = s3d.at(shaft, x=-w/2, y=-1, z=h/2)
s3d.material(shaft, class="tok-string">"steel", color=class="tok-string">"class="tok-comment">#747375")
red_projection_placed = s3d.at(red_projection(), x=-29.5, y=-1, z=44.5)
return s3d.group(class="tok-string">"side_surround", solid, shaft, red_projection_placed)
def red_projection(w=29, d=20, h=24):
solid = s3d.box(class="tok-string">"red_block", w=w, d=d, h=h)
s3d.chamfer(solid, d=1)
s3d.material(solid, class="tok-string">"plastic", color=class="tok-string">"class="tok-comment">#bc3535")
return s3d.group(class="tok-string">"red_projection", solid)
def lower_inset(w=130, d=8, h=93, rim=3.5):
border = s3d.extrude(class="tok-string">"border", s3d.rect(w=w, d=h), h=d)
border = s3d.pocket(border, s3d.rect(w=w-rim*2, d=h-rim*2), depth=d/2, on=border.face(class="tok-string">"top"))
border = s3d.at(border, y=-d/2, z=h/2, rx=-90)
s3d.material(border, class="tok-string">"plastic", color=class="tok-string">"class="tok-comment">#444444")
return s3d.group(class="tok-string">"lower_inset", border)