import math
import sand3d as s3d
def sliding_gate():
part_a = part_a_body()
gate_carriage = carriage(part_a, class="tok-string">"gate_carriage", x=-58.35, y=38.29, z=279.41, rx=90, rz=-180)
return s3d.assembly(class="tok-string">"sliding_gate", part_a, gate_carriage)
def carriage(parent, name, x=0, y=0, z=0, rx=0, ry=0, rz=0):
frame = s3d.local(parent, x, y, z, rx, ry, rz)
frame_2 = frame.turn(ry=-90)
gate_carriage = s3d.at(gate_carriage_body(fclass="tok-string">"{name}"), on=frame_2)
s3d.joint(fclass="tok-string">"{name}_slide", gate_carriage, frame, kind=class="tok-string">"prismatic", range=(0, 25))
s3d.joint(fclass="tok-string">"{name}_spin", gate_carriage, frame_2, kind=class="tok-string">"continuous")
return gate_carriage
def part_a_body():
support_panel_piece = s3d.transform(support_panel(class="tok-string">"a support_panel"), x=-629.85, y=38.29, z=279.41)
radial_bearing_piece = s3d.transform(radial_bearing(class="tok-string">"a radial_bearing"), x=1197.43, y=98.6, z=178.76)
return s3d.group(class="tok-string">"part_a_body", support_panel_piece, radial_bearing_piece)
def gate_carriage_body(name):
gate_carriage_piece = s3d.transform(sliding_panel(fclass="tok-string">"{name}_piece"), x=-50.8, y=0, z=-571.5, ry=90, rz=-90)
return s3d.group(name, gate_carriage_piece)
def support_panel(name):
return s3d.extrude(name, s3d.rect(1143.0, 101.6), 558.8, both=True)
def sliding_panel(name, w=1143, d=203.2, h=558.8, shaft_d=99.92, shaft_l=101.6):
plate = s3d.at(s3d.extrude(class="tok-string">"plate", s3d.rect(w, d / 2), h, both=True), y=d / 4)
boss = s3d.at(s3d.extrude(class="tok-string">"shaft", s3d.circle(shaft_d), shaft_l, both=True), rx=90, y=-d / 4)
return s3d.join(plate, boss)
def radial_bearing(name, width=7.94, diameter=28.58, bore=12.7):
half = width / 2
outer = diameter / 2
inner = bore / 2
lip = outer - 1.0
face_inner = inner + 0.9
recess = half - 0.2
profile = [
(inner, -half),
(outer - 0.7, -half),
(outer - 0.25, -half + 0.3),
(outer, -half + 0.65),
(outer, half - 0.65),
(outer - 0.25, half - 0.3),
(outer - 0.7, half),
(lip, half),
(lip - 0.25, recess),
(face_inner + 0.4, recess),
(face_inner, half),
(inner + 0.35, half),
(inner, half - 0.35),
(inner, -half + 0.35),
(inner + 0.35, -half),
(face_inner, -half),
(face_inner + 0.4, -recess),
(lip - 0.25, -recess),
(lip, -half),
]
bearing = s3d.revolve(name, profile)
return s3d.at(bearing, ry=90)