$x_leadscrew_len = 14
def lr12
lr12 = Assembly.new("linear-rail-12-assembly")
lr12 << a = Component.new("linear-rail-12")
lr12 << b = Component.new("angle-12").translate!([0,0,0]).rotate!([0,90,0])
lr12.attach(a,b,"linear-rail-fastener-set","nut-1024(hex)","010101101010")
end
def xrail
xrail = Assembly.new("X rail")
xrail << lr12().translate!([0,0,4])
xrail << lr12().rotate!([0,180,180]).translate!([0,12,0])
xrail.screenshot
xrail << a4l = Component.new("angle-4").rotate!([90,0,-90]).translate!([0,2,0])
xrail.attach_all
xrail.screenshot([-30,-30,10])
xrail << a4r = Component.new("angle-4").rotate!([90,0,-180]).translate!([0,10,0])
xrail.attach_all
xrail.screenshot
xrail << a3l = Component.new("angle-3").rotate!([0,0,0]).translate!([0,-1,2])
xrail.attach(a3l,a4l)
xrail.screenshot([30,-30,10])
xrail << a2r = Component.new("angle-2").rotate!([0,0,0]).translate!([0,10,2])
xrail.attach(a2r,a4r)
xrail.screenshot
end
def xstage
xstage = Assembly.new("X stage")
xstage << bt = Component.new("linear-bearing-3.5")
xstage << arr1 = Component.new("double-arrow").rotate!([90,0,0]).translate!([0.75,0.5,0.5])
xstage << arr2 = Component.new("double-arrow").rotate!([90,0,0]).translate!([0.75,3,0.5])
xstage.screenshot([2,6,3])
xstage.remove(arr1)
xstage.remove(arr2)
bt.rotate!([0,90,0])
dummy = Component.new("bar-1").rotate!([180,0,0]).translate!([1/4.0, 2+1/4.0, -1.5])
xstage.attach(bt,dummy)
xstage.remove(dummy)
xstage << bb = Component.new("linear-bearing-3.5").rotate!([0,-90,0]).translate!([6.5,0,-1.5])
dummy = Component.new("bar-1").rotate!([180,0,0]).translate!([5+1/4.0, 2+1/4.0, -1.5])
xstage.attach(bb,dummy)
xstage.remove(dummy)
xstage.screenshot([30,30,10])
xstage << a6r = Component.new("angle-6").rotate!([0,0,-90]).translate!([1/4.0, 3-1/4.0, 0])
xstage << a6l = Component.new("angle-6").rotate!([0,-90,-90]).translate!([1/4.0, 1-1/4.0, 0])
xstage.attach(bb,a6r,"screw-1024-0375(ph)")
xstage.attach(bb,a6l,"screw-1024-0375(ph)")
xstage.attach(bt,a6r,"screw-1024-0375(ph)")
xstage.attach(bt,a6l,"screw-1024-0375(ph)")
xstage.screenshot([10,0,30])
end
def leadnut(leadscrew_length = 14)
leadnut = Assembly.new("Lead nut")
leadnut << Component.new("coupling-nut-clamp").translate!([0,1/16.0,0])
leadnut << Component.new("leadnut-mount").translate!([-1/4.0, 0, 0])
leadnut << Component.new("screw-1024-05(ph)").rotate!([0,90,0]).translate!([-1/8.0,1/4.0,5/16.0])
leadnut << Component.new("screw-1024-05(ph)").rotate!([0,90,0]).translate!([-1/8.0,1+1/4.0,5/16.0])
leadnut << Component.new("nut-1024(hex)").rotate!([0,90,0]).translate!([-3/8.0,1/4.0,5/16.0])
leadnut << Component.new("nut-1024(hex)").rotate!([0,90,0]).translate!([-3/8.0,1+1/4.0,5/16.0])
leadnut << Component.new("screw-632-025").translate!([3/16.0, 1/4.0, 3/4.0])
leadnut << Component.new("screw-632-025").translate!([3/16.0, 1+1/4.0, 3/4.0])
leadnut.screenshot([-7,30,12])
leadnut << ls = Component.new("threaded-rod-#{leadscrew_length}").translate!([1/4.0,-(leadscrew_length/2-1),3/16.0])
leadnut << a18 = Component.new("angle-18").translate!([-1/2.0,-8-1/4.0,-3/16.0])
leadnut << Component.new("nut-1024(hex)").rotate!([0,90,0]).translate!([-5/8.0,1/4.0,5/16.0])
leadnut << Component.new("nut-1024(hex)").rotate!([0,90,0]).translate!([-5/8.0,1+1/4.0,5/16.0])
leadnut.screenshot([0,10,5])
leadnut << arr1 = Component.new("double-arrow").rotate!([0,0,90]).translate!([3/8.0,-5,3/8.0])
leadnut << arr2 = Component.new("double-arrow").rotate!([0,0,90]).translate!([3/8.0,7,3/8.0])
leadnut.screenshot([1,0,30],false)
leadnut.remove(ls)
leadnut.remove(a18)
leadnut.remove(arr1)
leadnut.remove(arr2)
end
def nwn
nwn = Assembly.new("nut-washer-nut")
nwn << Component.new("nut-025(hex)")
nwn << Component.new("washer-025(spring)").translate!([0,0,3/16.0])
nwn << Component.new("nut-025(hex)").translate!([0,0,1/4.0])
end
def motor
motor = Assembly.new("motor assembly")
motor << Component.new("motor-NEMA23").rotate!([0,-90,-90]).translate!([0.5,-1/8.0,0.5])
motor << Component.new("coupling-jaw-hub-025").rotate!([-90,90,0]).translate!([0.5,13/16.0,0.5])
motor << Component.new("coupling-jaw-spider").rotate!([-90,0,0]).translate!([0.5,17/16.0,0.5])
motor << Component.new("spacer-10(nylon)").rotate!([-90,0,0]).translate!([-7/16.0,-3/16.0,-7/16.0])
motor << Component.new("spacer-10(nylon)").rotate!([-90,0,0]).translate!([1+7/16.0,-3/16.0,-7/16.0])
motor << Component.new("screw-1024-075(ph)").rotate!([90,0,0]).translate!([-7/16.0,-3/8.0,-7/16.0])
motor << Component.new("screw-1024-075(ph)").rotate!([90,0,0]).translate!([1+7/16.0,-3/8.0,-7/16.0])
motor << Component.new("nut-1024(hex)").rotate!([90,90,0]).translate!([-7/16.0,1/4.0,-7/16.0])
motor << Component.new("nut-1024(hex)").rotate!([90,90,0]).translate!([1+7/16.0,1/4.0,-7/16.0])
end
def shaft_mount
sm = Assembly.new("shaft mount")
sm << Component.new("shaft-mount")
end
def flywheel
flywheel = Assembly.new("flywheel")
flywheel << Component.new("angle-3")
flywheel << Component.new("screw-1024-1(ph)").rotate!([0,-90,0]).translate!([0,0.5,0.5])
(0..3).each {|i| flywheel << Component.new("nut-025(square)").rotate!([0,-90,0]).translate!([(3*i+5)/16.0, 0.5, 0.5])}
flywheel << Component.new("nut-1024(hex)").rotate!([0,-90,0]).translate!([1,0.5,0.5])
flywheel << Component.new("screw-1024-1(ph)").rotate!([0,-90,0]).translate!([0,2.5,0.5])
(0..3).each {|i| flywheel << Component.new("nut-025(square)").rotate!([0,-90,0]).translate!([(3*i+5)/16.0, 2.5, 0.5])}
flywheel << Component.new("nut-1024(hex)").rotate!([0,-90,0]).translate!([1,2.5,0.5])
end
def xaxis
# create X axis, add bare X rail and bare X stage, show X stage alignment arrow
xaxis = Assembly.new("X axis")
xaxis << xrail = xrail()
xaxis << xstage = xstage().rotate!([0,90,0]).translate!([1+1/4.0, 4+1/4.0, 5+1/4.0])
xstage << arr0 = Component.new("double-arrow").rotate!([0,0,90]).translate!([0.5,3,-0.125])
xaxis.screenshot
xstage.remove(arr0)
xaxis.rotate!([0,-90,0])
xrail << sml = shaft_mount.rotate!([0,180,90]).translate!([1,2,2])
xrail.attach(sml,xrail,"screw-1024-0375(ph)")
xrail << smr = shaft_mount.rotate!([0,180,-90]).translate!([0,11,2])
xrail.attach(smr,xrail,"screw-1024-0375(ph)")
xaxis.screenshot([2,20,10])
xaxis.screenshot([2,-20,10])
xstage << leadnut($x_leadscrew_len).rotate!([0,90,180]).translate!([4+1/16.0,2.5,-3/8.0])
xaxis << Component.new("threaded-rod-#{$x_leadscrew_len}").rotate!([0,0,0]).translate!([0.5-1/8.0,1/8.0,1.5-1/8.0])
# show alignment arrows, in perspective and ortho
xaxis << arr1 = Component.new("double-arrow").rotate!([90,90,0]).translate!([0.5,2,1.5])
xaxis << arr2 = Component.new("double-arrow").rotate!([90,90,0]).translate!([0.5,11+1/8.0,1.5])
xaxis << arr3 = Component.new("double-arrow").rotate!([90,0,0]).translate!([0.5,7,1.5])
xaxis.screenshot([5,20,20])
xaxis.screenshot([0,30,0],false)
xaxis.remove(arr1)
xaxis.remove(arr2)
xaxis.remove(arr3)
sml << Component.new("bearing-R188-2RS").rotate!([0,90,0]).translate!([1/8.0,0.5,0.5])
smr << Component.new("bearing-R188-2RS").rotate!([0,90,0]).translate!([1/8.0,0.5,0.5])
xaxis << arrc = Component.new("circular-arrow").rotate!([90,0,0]).translate!([0.5,12.5,1.5])
xaxis.screenshot([3,20,4])
motor = motor()
motor << mm = Component.new("motor-mount-nema23").rotate!([0,180,-90]).translate!([-3/4.0,0,-1/8.0])
motor.screenshot([5,3,0])
motor.remove(mm)
xaxis << motor.rotate!([0,180,0]).translate!([1,-1-1/4.0,2])
xaxis << mm = Component.new("motor-mount-nema23").rotate!([0,0,90]).translate!([1+3/4.0,-1-1/4.0,2+1/8.0])
xaxis << arr4 = Component.new("double-arrow").rotate!([0,90,0]).translate!([0.5,2,1.5])
xaxis << nwn1 = nwn.rotate!([-90,0,0]).translate!([0.5,1.25,1.5])
xaxis.screenshot([5,3,7],true,mm)
xaxis.remove(arr4)
xaxis << nwn2 = nwn.rotate!([-90,0,0]).translate!([0.5,11+5/16.0,1.5])
xaxis.screenshot([-1,16,5],true,smr)
xaxis.remove(arrc)
# remove motor and attach motor mount
xaxis.remove(motor)
xaxis.attach(xrail,mm)
xrail << a1l = Component.new("angle-1").rotate!([0,-90,0]).translate!([0,-1,2])
xrail.attach(xrail,a1l)
xrail.attach(mm,a1l)
xaxis << cpl = Component.new("coupling-jaw-hub-025").rotate!([90,90,0]).translate!([0.5,0.75,1.5])
xaxis.screenshot([3,-3,4],true,mm)
# move leadscrew coupling hub, reinstall motor
cpl.translate!([0,-3/8.0,0])
xaxis << motor = motor().rotate!([0,180,0]).translate!([1,-1-1/4.0,2])
xaxis.screenshot([5,0,7],true,mm)
# stand X axis up, add rear brace to X stage
xaxis.rotate!([0,90,0])
xstage << Component.new("angle-6").rotate!([180,0,-90]).translate!([6+1/4.0, 2+1/4.0,-1.5])
xaxis.screenshot([-30,-30,10])
# add flywheel
flywheel = flywheel()
flywheel.screenshot
xaxis << flywheel.rotate!([0,0,90]).translate!([2,13,1])
xaxis << Component.new("nut-025(hex)").rotate!([90,0,0]).translate!([0.5,13,1.5])
xaxis << Component.new("nut-025(hex)").rotate!([90,0,0]).translate!([0.5,13+5/16.0,1.5])
xaxis.screenshot([6,16,5],true)
end
xaxis()