Generate DXFs for all the laser cut parts

This commit is contained in:
Kelvin Ly 2025-03-26 07:58:38 -04:00
parent ad93f7a995
commit e892caaf41
3 changed files with 87 additions and 22 deletions

25
export_stuff.py Normal file
View File

@ -0,0 +1,25 @@
import cadquery as cq
from cadquery import exporters
import gantry
parts = [
(gantry.g.upper_front_plate, "gantry_upper_front", gantry.plate_z),
(gantry.g.upper_back_plate, "gantry_upper_back", gantry.plate_z),
(gantry.g.lower_front_plate, "gantry_lower_front", gantry.plate_z),
(gantry.g.lower_back_plate, "gantry_lower_back", gantry.plate_z),
(gantry.g.right_bearing_mount, "gantry_fixed_bearing_mount", gantry.x_mount_z),
(gantry.g.left_bearing_mount, "gantry_floating_bearing_mount", gantry.x_mount_z),
(gantry.g.stepper_mount, "gantry_stepper_mount", gantry.stepper_mount_z),
(gantry.c.plate, "carriage", gantry.plate_z2),
(gantry.ca.plate, "carrier", gantry.carrier_plate_z),
(gantry.ca.left_spacer, "carrier_left_spacer", gantry.z_spacer_z),
(gantry.ca.right_spacer, "carrier_right_spacer", gantry.z_spacer_z),
(gantry.ca.stepper_mount, "carrier_stepper_mount", gantry.stepper_mount_z),
]
for part, path, thickness in parts:
exporters.exportDXF(
part.workplaneFromTagged("base").section(),
"dxfs/{}-{:.2f}mm.dxf".format(path, thickness),
)

View File

@ -1,5 +1,7 @@
import cadquery as cq import cadquery as cq
from ocp_vscode import *
if __name__ == "__main__":
from ocp_vscode import *
from utils import * from utils import *
import localselectors import localselectors
@ -13,6 +15,9 @@ plate_z = 2.54
plate_z2 = 10 plate_z2 = 10
x_mount_z = 5 x_mount_z = 5
stepper_mount_z = 5
carrier_plate_z = 10
ballscrew_x_offset = 4 ballscrew_x_offset = 4
@ -77,22 +82,38 @@ class Gantry:
column_spacing + tube_w, column_spacing + tube_w,
) )
self.upper_front_plate = ( self.upper_front_plate = (
w.transformed(offset=(0, tube_h / 2, upper_center), rotate=(-90, 0, 0)) cq.Workplane()
.copyWorkplane(
w.transformed(offset=(0, tube_h / 2, upper_center), rotate=(-90, 0, 0))
)
.tag("base")
.rect(column_spacing + tube_w, tube_w) .rect(column_spacing + tube_w, tube_w)
.extrude(plate_z) .extrude(plate_z)
) )
self.lower_front_plate = ( self.lower_front_plate = (
w.transformed(offset=(0, tube_h / 2, lower_center), rotate=(-90, 0, 0)) cq.Workplane()
.copyWorkplane(
w.transformed(offset=(0, tube_h / 2, lower_center), rotate=(-90, 0, 0))
)
.tag("base")
.rect(column_spacing + tube_w, tube_w) .rect(column_spacing + tube_w, tube_w)
.extrude(plate_z) .extrude(plate_z)
) )
self.upper_back_plate = ( self.upper_back_plate = (
w.transformed(offset=(0, -tube_h / 2, upper_center), rotate=(90, 0, 0)) cq.Workplane()
.copyWorkplane(
w.transformed(offset=(0, -tube_h / 2, upper_center), rotate=(90, 0, 0))
)
.tag("base")
.rect(column_spacing + tube_w, tube_w) .rect(column_spacing + tube_w, tube_w)
.extrude(plate_z) .extrude(plate_z)
) )
self.lower_back_plate = ( self.lower_back_plate = (
w.transformed(offset=(0, -tube_h / 2, lower_center), rotate=(90, 0, 0)) cq.Workplane()
.copyWorkplane(
w.transformed(offset=(0, -tube_h / 2, lower_center), rotate=(90, 0, 0))
)
.tag("base")
.rect(column_spacing + tube_w, tube_w) .rect(column_spacing + tube_w, tube_w)
.extrude(plate_z) .extrude(plate_z)
) )
@ -143,7 +164,9 @@ class Gantry:
) )
self.right_bearing_mount = ( self.right_bearing_mount = (
w.copyWorkplane(right_bearing_base) cq.Workplane()
.copyWorkplane(right_bearing_base)
.tag("base")
.rect(tube_h, x_rail_spacing - tube_w) .rect(tube_h, x_rail_spacing - tube_w)
.extrude(x_mount_z) .extrude(x_mount_z)
.center(-ballscrew_x_offset, 0) .center(-ballscrew_x_offset, 0)
@ -174,6 +197,7 @@ class Gantry:
) )
self.left_bearing_mount = ( self.left_bearing_mount = (
w.copyWorkplane(self.floating_mount_w) w.copyWorkplane(self.floating_mount_w)
.tag("base")
.transformed(offset=(0, ballscrew_x_offset, 0), rotate=(0, 0, 90)) .transformed(offset=(0, ballscrew_x_offset, 0), rotate=(0, 0, 90))
.rect(tube_h, x_rail_spacing - tube_w) .rect(tube_h, x_rail_spacing - tube_w)
.extrude(x_mount_z) .extrude(x_mount_z)
@ -217,13 +241,14 @@ class Gantry:
.copyWorkplane( .copyWorkplane(
stepper_mount_w.transformed(offset=(0, 0, 0), rotate=(0, 0, 45)) stepper_mount_w.transformed(offset=(0, 0, 0), rotate=(0, 0, 45))
) )
.tag("base")
.rect(58.4, 58.4) .rect(58.4, 58.4)
.extrude(5) .extrude(stepper_mount_z)
.copyWorkplane( .copyWorkplane(
stepper_mount_w.transformed(offset=(0, -ballscrew_x_offset, 0)) stepper_mount_w.transformed(offset=(0, -ballscrew_x_offset, 0))
) )
.rect(88, tube_h) .rect(88, tube_h)
.extrude(5) .extrude(stepper_mount_z)
.copyWorkplane( .copyWorkplane(
stepper_mount_w.transformed(offset=(0, 0, 0), rotate=(180, 0, 45)) stepper_mount_w.transformed(offset=(0, 0, 0), rotate=(180, 0, 45))
) )
@ -307,6 +332,7 @@ class Carriage:
cq.Workplane() cq.Workplane()
.copyWorkplane(back) .copyWorkplane(back)
.center(-x - HGR20.L - x_carriage_spacing / 2, -x_rail_spacing / 2) .center(-x - HGR20.L - x_carriage_spacing / 2, -x_rail_spacing / 2)
.tag("base")
# .rect(HGR20.L+x_carriage_spacing, HGR20.W+x_rail_spacing) # .rect(HGR20.L+x_carriage_spacing, HGR20.W+x_rail_spacing)
.rect(carriage_w, carriage_h) .rect(carriage_w, carriage_h)
.extrude(plate_z2) .extrude(plate_z2)
@ -466,6 +492,7 @@ class Carrier:
cq.Workplane() cq.Workplane()
.copyWorkplane(self.plane) .copyWorkplane(self.plane)
.transformed(offset=(z_rail_spacing / 2, 0, 0)) .transformed(offset=(z_rail_spacing / 2, 0, 0))
.tag("base")
.rect(z_spacer_w, z_rail_len) .rect(z_spacer_w, z_rail_len)
.extrude(z_spacer_z) .extrude(z_spacer_z)
) )
@ -473,6 +500,7 @@ class Carrier:
cq.Workplane() cq.Workplane()
.copyWorkplane(self.plane) .copyWorkplane(self.plane)
.transformed(offset=(-z_rail_spacing / 2, 0, 0)) .transformed(offset=(-z_rail_spacing / 2, 0, 0))
.tag("base")
.rect(z_spacer_w, z_rail_len) .rect(z_spacer_w, z_rail_len)
.extrude(z_spacer_z) .extrude(z_spacer_z)
) )
@ -481,8 +509,9 @@ class Carrier:
cq.Workplane() cq.Workplane()
.copyWorkplane(self.plane) .copyWorkplane(self.plane)
.transformed(offset=(0, 0, z_spacer_z)) .transformed(offset=(0, 0, z_spacer_z))
.tag("base")
.rect(200, z_rail_len) .rect(200, z_rail_len)
.extrude(10) .extrude(carrier_plate_z)
.copyWorkplane(self.plane) .copyWorkplane(self.plane)
.center(0, z_rail_len / 2 - 40 / 2) .center(0, z_rail_len / 2 - 40 / 2)
.rect(68, 40) .rect(68, 40)
@ -554,9 +583,10 @@ class Carrier:
offset=(0, z_rail_len / 2 + 10, 0), rotate=(-90, 0, 0) offset=(0, z_rail_len / 2 + 10, 0), rotate=(-90, 0, 0)
) )
) )
.tag("base")
.tag("flange_center") .tag("flange_center")
.rect(100, 50) .rect(100, 50)
.extrude(5) .extrude(stepper_mount_z)
.workplaneFromTagged("flange_center") .workplaneFromTagged("flange_center")
.transformed(rotate=(180, 0, 0)) .transformed(rotate=(180, 0, 0))
.rect(90, 25, forConstruction=True) .rect(90, 25, forConstruction=True)
@ -569,7 +599,7 @@ class Carrier:
) )
.tag("stepper_center") .tag("stepper_center")
.rect(58.4, 58.4) .rect(58.4, 58.4)
.extrude(5) .extrude(stepper_mount_z)
.workplaneFromTagged("stepper_center") .workplaneFromTagged("stepper_center")
.transformed(rotate=(180, 0, 0)) .transformed(rotate=(180, 0, 0))
.rect(47.41, 47.41, forConstruction=True) .rect(47.41, 47.41, forConstruction=True)
@ -742,7 +772,8 @@ full_assembly = (
.add(m.assembly(), name="spindle mount") .add(m.assembly(), name="spindle mount")
) )
show_object(full_assembly) if __name__ == "__main__":
# show_object(ca.assembly()) show_object(full_assembly)
# show_object(c.assembly()) # show_object(ca.assembly())
# show_object(g.assembly()) # show_object(c.assembly())
# show_object(g.assembly())

View File

@ -8,7 +8,7 @@ import localselectors
class SFU1204: class SFU1204:
def __init__(self, base, l): def __init__(self, base, l):
self.w = base.workplane() self.w = cq.Workplane().copyWorkplane(base.workplane())
self.len = l self.len = l
def ballscrew(self): def ballscrew(self):
@ -25,14 +25,16 @@ class SFU1204:
(self.len, 8 / 2), (self.len, 8 / 2),
(self.len, 0), (self.len, 0),
] ]
w = self.w.moveTo(0, 0) w = cq.Workplane().copyWorkplane(self.w).moveTo(0, 0)
for v in profile[1:]: for v in profile[1:]:
w = w.lineTo(v[1], v[0]) w = w.lineTo(v[1], v[0])
w = w.close() w = w.close()
return w.revolve() return w.revolve()
def nut(self, x): def nut(self, x):
w = self.w.transformed(offset=(0, x, 0), rotate=(90, 0, 0)) w = cq.Workplane().copyWorkplane(
self.w.transformed(offset=(0, x, 0), rotate=(90, 0, 0))
)
n = ( n = (
w.sketch() w.sketch()
.circle(40 / 2) .circle(40 / 2)
@ -62,7 +64,11 @@ class SFU1204:
return n return n
def nutHoles(self, solid, x): def nutHoles(self, solid, x):
w = self.w.transformed(offset=(0, x, 0), rotate=(90, 0, 0)) w = (
cq.Workplane()
.copyWorkplane(self.w)
.transformed(offset=(0, x, 0), rotate=(90, 0, 0))
)
hole_r = 32 / 2 hole_r = 32 / 2
hole_pts = [ hole_pts = [
( (
@ -403,9 +409,12 @@ def inch(x):
def tubing(l, x, y, w, workplane): def tubing(l, x, y, w, workplane):
return workplane.placeSketch( return (
cq.Sketch().rect(x, y).rect(x - 2 * w, y - 2 * w, mode="s") cq.Workplane()
).extrude(l) .copyWorkplane(workplane)
.placeSketch(cq.Sketch().rect(x, y).rect(x - 2 * w, y - 2 * w, mode="s"))
.extrude(l)
)
if __name__ == "__main__": if __name__ == "__main__":