import sand3d as s3d
def hand_truck():
frame = hand_truck_frame()
left = hand_truck_wheel()
right = hand_truck_wheel()
lf = s3d.local(frame, x=-220, y=-100, z=125)
left = s3d.at(left, on=lf)
s3d.joint(class="tok-string">"left_wheel_joint", left, lf, kind=class="tok-string">"continuous", axis=class="tok-string">"-X")
rf = s3d.local(frame, x=220, y=-100, z=125)
right = s3d.at(right, on=rf)
s3d.joint(class="tok-string">"right_wheel_joint", right, rf, kind=class="tok-string">"continuous", axis=class="tok-string">"-X")
return s3d.assembly(class="tok-string">"hand_truck", frame, left, right)
def hand_truck_frame():
plate = s3d.at(s3d.extrude(class="tok-string">"frame_visual", s3d.rect(400, 250), 10, both=True), y=125, z=5)
rails = s3d.at(s3d.extrude(class="tok-string">"rail_l", s3d.circle(30), 1200), x=-150)
rail_r = s3d.at(s3d.extrude(class="tok-string">"rail_r", s3d.circle(30), 1200), x=150)
bars = [
s3d.at(
s3d.extrude(
class="tok-string">"crossbar", s3d.circle(25), 300, both=True, on=s3d.Frame((0, 0, z), (1, 0, 0))
)
)
for z in (300, 600, 900)
]
supports = [
s3d.at(s3d.extrude(class="tok-string">"support", s3d.circle(30), 120, on=s3d.Frame((x, 10, 125), (0, -1, 0))))
for x in (-150, 150)
]
axle = s3d.at(
s3d.extrude(class="tok-string">"axle", s3d.circle(20), 250, both=True, on=s3d.Frame((0, -100, 125), (1, 0, 0)))
)
handrail = s3d.wire(
class="tok-string">"handrail",
s3d.spline([(-150, 0, 1200), (-150, 0, 1350), (150, 0, 1350), (150, 0, 1200)]),
30,
)
s3d.join(plate, rails, rail_r, bars, supports, axle, handrail)
s3d.material(plate, class="tok-string">"steel", color=class="tok-string">"class="tok-comment">#555555")
return s3d.group(class="tok-string">"frame", plate)
def hand_truck_wheel():
wheel = s3d.extrude(class="tok-string">"wheel_visual", s3d.circle(250), 60, both=True)
wheel = s3d.at(wheel, ry=90)
s3d.material(wheel, class="tok-string">"rubber", color=class="tok-string">"class="tok-comment">#444444")
return s3d.group(class="tok-string">"wheel", wheel)