import sand3d as s3d
import math
def adjustable_rail_assembly():
rail_base = rail_base_body()
sliding_strip = rail_slide(rail_base, class="tok-string">"sliding_strip", x=-0.03, y=-12.26, z=8.96, ry=-90)
pin_carriage = pin_adjuster(sliding_strip, class="tok-string">"pin_carriage", x=-4.12, y=12.25, z=163.6, ry=-90)
return s3d.assembly(class="tok-string">"adjustable_rail_assembly", rail_base, sliding_strip, pin_carriage)
def rail_slide(parent, name, x=0, y=0, z=0, rx=0, ry=0, rz=0):
frame = s3d.local(parent, x, y, z, rx, ry, rz)
sliding_strip = s3d.at(sliding_strip_body(name), on=frame)
s3d.joint(fclass="tok-string">"{name}_slide", sliding_strip, frame, kind=class="tok-string">"prismatic", range=(-34, 34))
return sliding_strip
def pin_adjuster(parent, name, x=0, y=0, z=0, rx=0, ry=0, rz=0):
frame = s3d.local(parent, x, y, z, rx, ry, rz)
pin_carriage = s3d.at(pin_carriage_body(name), on=frame)
s3d.joint(fclass="tok-string">"{name}_slide", pin_carriage, frame, kind=class="tok-string">"prismatic", range=(-1.4, 1.4))
return pin_carriage
def rail_base_body():
piece = s3d.transform(mounting_rail(class="tok-string">"rail_base_piece"), x=-10.09, y=-0.01, z=4.46)
return s3d.group(class="tok-string">"rail_base", piece)
def sliding_strip_body(name):
piece = s3d.transform(perforated_strip(fclass="tok-string">"{name}_piece"), x=1, y=12.25, z=0, ry=90)
return s3d.group(name, piece)
def pin_carriage_body(name):
piece = s3d.transform(locking_pin(fclass="tok-string">"{name}_piece"), x=0, y=0, z=-7, rx=-90)
return s3d.group(name, piece)
def locking_pin(name, shaft_d=4, shaft_l=10, head_d=7, head_l=4):
shaft = s3d.at(s3d.extrude(name, s3d.circle(shaft_d), shaft_l, both=True), rx=90, y=2)
head = s3d.at(s3d.extrude(class="tok-string">"head", s3d.circle(head_d), head_l, both=True), rx=90, y=-5)
s3d.join(shaft, head)
return shaft
def mounting_rail(name, length=300, width=30, thickness=9, hole_d=5):
rail = s3d.extrude(name, s3d.rect(length, width), thickness, both=True)
s3d.hole(rail, hole_d, on=s3d.grid(19, 1, length / 20))
return rail
def perforated_strip(name, length=340, width=24.5, thickness=2, hole_d=5.08, pitch=16):
plate = s3d.extrude(name, s3d.rect(length, width), thickness, both=True)
s3d.hole(plate, hole_d, on=s3d.grid(21, 1, pitch, 0))
return plate