222 lines
8.5 KiB
Python
222 lines
8.5 KiB
Python
import cadquery as cq
|
|
from ocp_vscode import *
|
|
from utils import *
|
|
|
|
import localselectors
|
|
|
|
tube_w = inch(2.0)
|
|
tube_h = inch(1.5)
|
|
tube_wall = inch(0.075) # 1.519 #inch(0.062)
|
|
column_spacing = 500
|
|
column_h = 400
|
|
plate_z = 2.54
|
|
plate_z2 = 10
|
|
|
|
x_rail_spacing = 240
|
|
x_carriage_spacing = 120
|
|
|
|
class Gantry:
|
|
def __init__(self, w):
|
|
self.left = tubing(
|
|
column_h,
|
|
tube_w,
|
|
tube_h,
|
|
tube_wall,
|
|
w.transformed(offset=(-0.5*column_spacing, 0, 0)))
|
|
self.right = tubing(
|
|
column_h,
|
|
tube_w,
|
|
tube_h,
|
|
tube_wall,
|
|
w.transformed(offset=(0.5*column_spacing, 0, 0)))
|
|
upper_center = column_h - 0.5*tube_w
|
|
self.upper = tubing(
|
|
column_spacing - tube_w,
|
|
tube_h,
|
|
tube_w,
|
|
tube_wall,
|
|
w.transformed(offset=(-0.5*column_spacing+0.5*tube_w, 0, upper_center), rotate=(90, 90, 0)))
|
|
lower_center = upper_center - x_rail_spacing
|
|
self.lower = tubing(
|
|
column_spacing - tube_w,
|
|
tube_h,
|
|
tube_w,
|
|
tube_wall,
|
|
w.transformed(
|
|
offset=(
|
|
-0.5*column_spacing+0.5*tube_w,
|
|
0,
|
|
lower_center), rotate=(90, 90, 0)))
|
|
self.upper_rail = HGR20(
|
|
w.transformed(
|
|
offset=(0, 0.5*tube_h + plate_z, upper_center),
|
|
rotate=(-90, 0, 0)
|
|
), column_spacing + tube_w)
|
|
self.lower_rail = HGR20(
|
|
w.transformed(
|
|
offset=(0, 0.5*tube_h + plate_z, lower_center),
|
|
rotate=(-90, 0, 0)
|
|
), column_spacing + tube_w)
|
|
self.upper_front_plate = (
|
|
w.transformed(offset=(0, tube_h/2, upper_center), rotate=(-90, 0, 0))
|
|
.rect(column_spacing + tube_w, tube_w)
|
|
.extrude(plate_z)
|
|
)
|
|
self.lower_front_plate = (
|
|
w.transformed(offset=(0, tube_h/2, lower_center), rotate=(-90, 0, 0))
|
|
.rect(column_spacing + tube_w, tube_w)
|
|
.extrude(plate_z)
|
|
)
|
|
self.upper_back_plate = (
|
|
w.transformed(offset=(0, -tube_h/2, upper_center), rotate=(90, 0, 0))
|
|
.rect(column_spacing + tube_w, tube_w)
|
|
.extrude(plate_z)
|
|
)
|
|
self.lower_back_plate = (
|
|
w.transformed(offset=(0, -tube_h/2, lower_center), rotate=(90, 0, 0))
|
|
.rect(column_spacing + tube_w, tube_w)
|
|
.extrude(plate_z)
|
|
)
|
|
|
|
self.upper_front_plate = self.upper_rail.holes(self.upper_front_plate)
|
|
self.upper_back_plate = self.upper_rail.holes(self.upper_back_plate)
|
|
|
|
self.lower_front_plate = self.lower_rail.holes(self.lower_front_plate)
|
|
self.lower_back_plate = self.lower_rail.holes(self.lower_back_plate)
|
|
|
|
def assembly(self):
|
|
return (cq.Assembly(name="gantry")
|
|
.add(self.left, name="left column")
|
|
.add(self.right, name="right column")
|
|
.add(self.upper, name="upper platform")
|
|
.add(self.lower, name="lower platform")
|
|
.add(self.upper_rail.rail(), name="upper rail")
|
|
.add(self.lower_rail.rail(), name="lower rail")
|
|
.add(self.upper_front_plate, name="upper front plate")
|
|
.add(self.lower_front_plate, name="lower front plate")
|
|
.add(self.upper_back_plate, name="upper back plate")
|
|
.add(self.lower_back_plate, name="lower back plate")
|
|
)
|
|
#assembly.test = 7
|
|
|
|
z_rail_spacing = 120
|
|
z_carriage_spacing = 100
|
|
z_rail_len = 450
|
|
carriage_w = 250
|
|
carriage_h = 300
|
|
bolster_w = 30
|
|
bolster_z = 25
|
|
class Carriage:
|
|
def __init__(self, gantry, x=0, z=0):
|
|
self.bul = gantry.upper_rail.carriage(x)
|
|
self.bur = gantry.upper_rail.carriage(x+x_carriage_spacing)
|
|
self.bll = gantry.lower_rail.carriage(x)
|
|
self.blr = gantry.lower_rail.carriage(x+x_carriage_spacing)
|
|
back = cq.Workplane("XZ").copyWorkplane(self.bul.workplaneFromTagged("mountingholes"))
|
|
# why doesn't this track the carriage without me adding x to it?
|
|
self.plate = (back.center(-x-HGR20.L-x_carriage_spacing/2, -x_rail_spacing/2)
|
|
#.rect(HGR20.L+x_carriage_spacing, HGR20.W+x_rail_spacing)
|
|
.rect(carriage_w, carriage_h)
|
|
.extrude(plate_z2)
|
|
.faces(">z") # localselectors plugin
|
|
.workplane()
|
|
.tag("carriage_plate")
|
|
)
|
|
self.plate = gantry.upper_rail.carriageHoles(self.plate, x)
|
|
self.plate = gantry.upper_rail.carriageHoles(self.plate, x+x_carriage_spacing)
|
|
self.plate = gantry.lower_rail.carriageHoles(self.plate, x)
|
|
self.plate = gantry.lower_rail.carriageHoles(self.plate, x+x_carriage_spacing)
|
|
|
|
# creating the workplane the rails of the spindle carrier
|
|
# mount to, because HGR works from that plane forward
|
|
self.carrier_plane = (cq.Workplane()
|
|
.copyWorkplane(self.plate.workplaneFromTagged("carriage_plate"))
|
|
.transformed(offset=(0, 0, HGR20.H), rotate=(180, 0, 0))
|
|
)
|
|
|
|
self.left_rail = HGR20(
|
|
self.carrier_plane.
|
|
transformed(offset=(z_rail_spacing/2, z, 0), rotate=(0, 0, 90)),
|
|
z_rail_len)
|
|
self.right_rail = HGR20(
|
|
self.carrier_plane.
|
|
transformed(offset=(-z_rail_spacing/2, z, 0), rotate=(0, 0, 90)),
|
|
z_rail_len)
|
|
|
|
u_zcarriage_pos = z_rail_len/2 - HGR20.L/2 -z - z_carriage_spacing/2
|
|
l_zcarriage_pos = u_zcarriage_pos + z_carriage_spacing
|
|
self.ful = self.left_rail.carriage(u_zcarriage_pos)
|
|
self.fll = self.left_rail.carriage(l_zcarriage_pos)
|
|
self.fur = self.right_rail.carriage(u_zcarriage_pos)
|
|
self.flr = self.right_rail.carriage(l_zcarriage_pos)
|
|
|
|
self.plate = self.left_rail.carriageHoles(self.plate, u_zcarriage_pos)
|
|
self.plate = self.left_rail.carriageHoles(self.plate, l_zcarriage_pos)
|
|
self.plate = self.right_rail.carriageHoles(self.plate, u_zcarriage_pos)
|
|
self.plate = self.right_rail.carriageHoles(self.plate, l_zcarriage_pos)
|
|
|
|
self.lbolster = (cq.Workplane()
|
|
.copyWorkplane(self.plate.workplaneFromTagged("carriage_plate"))
|
|
.transformed(offset=(-(carriage_w - bolster_w)/2, 0, 0))
|
|
.rect(bolster_w, carriage_h)
|
|
.extrude(bolster_z)
|
|
)
|
|
self.rbolster = (cq.Workplane()
|
|
.copyWorkplane(self.plate.workplaneFromTagged("carriage_plate"))
|
|
.transformed(offset=((carriage_w - bolster_w)/2, 0, 0))
|
|
.rect(bolster_w, carriage_h)
|
|
.extrude(bolster_z)
|
|
)
|
|
# TODO add bolster mounting holes
|
|
|
|
self.wp_carrier = (cq.Workplane()
|
|
.copyWorkplane(self.plate.workplaneFromTagged("carriage_plate"))
|
|
.transformed(offset=(0, -z, HGR20.H), rotate=(0, 0, 0))
|
|
)
|
|
|
|
def assembly(self):
|
|
return (cq.Assembly(name="x carriage")
|
|
.add(self.bul, name="back ul carriage")
|
|
.add(self.bur, name="back ur carriage")
|
|
.add(self.bll, name="back ll carriage")
|
|
.add(self.blr, name="back lr carriage")
|
|
.add(self.plate, name="carrier plate")
|
|
.add(self.left_rail.rail(), name="left rail")
|
|
.add(self.right_rail.rail(), name="right rail")
|
|
.add(self.ful, name="front ul carriage")
|
|
.add(self.fur, name="front ur carriage")
|
|
.add(self.fll, name="front ll carriage")
|
|
.add(self.flr, name="front lr carriage")
|
|
.add(self.lbolster, name="left bolster")
|
|
.add(self.lbolster, name="right bolster")
|
|
)
|
|
|
|
class Carrier:
|
|
def __init__(self, carriage):
|
|
self.plane = carriage.wp_carrier
|
|
self.plate = (cq.Workplane()
|
|
.copyWorkplane(self.plane)
|
|
.rect(200, z_rail_len)
|
|
.extrude(10))
|
|
self.plate = carriage.left_rail.holes(self.plate)
|
|
self.plate = carriage.right_rail.holes(self.plate)
|
|
|
|
def assembly(self):
|
|
return (cq.Assembly(name="z carrier")
|
|
.add(self.plate, name="z plate"))
|
|
g = Gantry(cq.Workplane())
|
|
c = Carriage(g, 150, 0)
|
|
ca = Carrier(c)
|
|
|
|
# TODO add ball screws and associated assembly
|
|
|
|
full_assmbly = (cq.Assembly()
|
|
.add(g.assembly(), name="gantry")
|
|
.add(c.assembly(), name="carriage")
|
|
.add(ca.assembly(), name="carrier")
|
|
)
|
|
|
|
show_object(full_assmbly)
|
|
#show_object(ca.assembly())
|
|
#show_object(c.assembly())
|
|
#show_object(g.assembly()) |