import sand3d as s3d
def ironing_board():
board = board_body()
f = s3d.local(board, -460, 0, 720)
tail = s3d.at(tail_rest(), on=f)
board = s3d.group(class="tok-string">"ironing_board_root", board, tail)
f = s3d.local(board, 100, 0, 700)
leg = s3d.at(main_leg(), on=f)
s3d.joint(class="tok-string">"board_to_main_leg", leg, f, kind=class="tok-string">"revolute", axis=class="tok-string">"-Y", range=(0, 1.22 * 180 / 3.14))
return s3d.assembly(class="tok-string">"ironing_board", board, leg)
def board_body():
top = s3d.at(
s3d.extrude(
class="tok-string">"board_top",
s3d.spline(
[
(620, 0),
(520, 105),
(200, 168),
(-500, 176),
(-660, 145),
(-690, 0),
(-660, -145),
(-500, -176),
(200, -168),
(520, -105),
],
closed=True,
),
22,
both=True,
),
z=731,
)
pan = s3d.at(s3d.extrude(class="tok-string">"underside_pan", s3d.rect(1040, 240), 10, both=True), x=-20, z=715)
bracket = s3d.at(s3d.extrude(class="tok-string">"base_bracket", s3d.rect(340, 120), 30, both=True), x=20, z=700)
spine = s3d.at(s3d.extrude(class="tok-string">"bracket_spine", s3d.rect(180, 30), 50, both=True), x=-60, z=688)
left = s3d.at(
s3d.extrude(class="tok-string">"left_brace_arm", s3d.rect(180, 122), 28, both=True), x=-5, y=121, z=686
)
right = s3d.at(
s3d.extrude(class="tok-string">"right_brace_arm", s3d.rect(180, 122), 28, both=True), x=-5, y=-121, z=686
)
cheek1 = s3d.at(
s3d.extrude(class="tok-string">"left_hinge_cheek", s3d.rect(50, 22), 82, both=True), x=60, y=185, z=676
)
cheek2 = s3d.at(
s3d.extrude(class="tok-string">"right_hinge_cheek", s3d.rect(50, 22), 82, both=True), x=60, y=-185, z=676
)
s3d.material(top, class="tok-string">"fabric", color=class="tok-string">"class="tok-comment">#9eb8d1")
for ob in [pan]:
s3d.material(ob, class="tok-string">"steel", color=class="tok-string">"class="tok-comment">#babdc2")
for ob in [bracket, spine, left, right, cheek1, cheek2]:
s3d.material(ob, class="tok-string">"steel", color=class="tok-string">"class="tok-comment">#4a4f54")
return s3d.group(class="tok-string">"board_body", top, pan, bracket, spine, left, right, cheek1, cheek2)
def tail_rest():
mount = s3d.at(s3d.extrude(class="tok-string">"tail_mount", s3d.rect(180, 190), 22, both=True), z=-21)
frame = s3d.wire(
class="tok-string">"tail_frame",
s3d.spline(
[
(0, 82, -20),
(-25, 98, -240),
(-70, 110, -715),
(-70, -110, -715),
(-25, -98, -240),
(0, -82, -20),
]
),
24,
)
foot1 = s3d.at(
s3d.extrude(class="tok-string">"tail_left_foot", s3d.circle(36), 18, both=True), x=-70, y=110, z=-715, rx=90
)
foot2 = s3d.at(
s3d.extrude(class="tok-string">"tail_right_foot", s3d.circle(36), 18, both=True), x=-70, y=-110, z=-715, rx=90
)
bar = s3d.at(s3d.extrude(class="tok-string">"tail_foot_bar", s3d.rect(40, 240), 22, both=True), x=-70, z=-715)
g1 = s3d.at(
s3d.extrude(class="tok-string">"tail_left_gusset", s3d.rect(34, 32), 60, both=True), x=-10, y=84, z=-50
)
g2 = s3d.at(
s3d.extrude(class="tok-string">"tail_right_gusset", s3d.rect(34, 32), 60, both=True), x=-10, y=-84, z=-50
)
for ob in [mount, g1, g2]:
s3d.material(ob, class="tok-string">"steel", color=class="tok-string">"class="tok-comment">#4a4f54")
s3d.material(frame, class="tok-string">"steel", color=class="tok-string">"class="tok-comment">#babdc2")
for ob in [foot1, foot2, bar]:
s3d.material(ob, class="tok-string">"rubber", color=class="tok-string">"class="tok-comment">#141416")
return s3d.group(class="tok-string">"tail_rest", mount, frame, foot1, foot2, bar, g1, g2)
def main_leg():
frame = s3d.wire(
class="tok-string">"leg_frame",
s3d.spline(
[
(0, 205, -10),
(55, 230, -185),
(150, 255, -455),
(235, 285, -700),
(235, -285, -700),
(150, -255, -455),
(55, -230, -185),
(0, -205, -10),
]
),
26,
)
b1 = s3d.at(
s3d.extrude(class="tok-string">"left_hinge_barrel", s3d.circle(30), 70, both=True), x=0, y=205, z=-10, rx=90
)
b2 = s3d.at(
s3d.extrude(class="tok-string">"right_hinge_barrel", s3d.circle(30), 70, both=True), x=0, y=-205, z=-10, rx=90
)
bar = s3d.at(s3d.extrude(class="tok-string">"main_foot_bar", s3d.rect(55, 575), 24, both=True), x=235, z=-700)
s3d.material(frame, class="tok-string">"steel", color=class="tok-string">"class="tok-comment">#babdc2")
for ob in [b1, b2]:
s3d.material(ob, class="tok-string">"steel", color=class="tok-string">"class="tok-comment">#4a4f54")
s3d.material(bar, class="tok-string">"rubber", color=class="tok-string">"class="tok-comment">#141416")
return s3d.group(class="tok-string">"main_leg", frame, b1, b2, bar)