Generate 3D printable STL files for woodworking jigs and fixtures using CadQuery. Use when the user requests lampshade jigs, circle cutting guides, angle wedges, spacing blocks, alignment fixtures, router jigs, or any custom 3D-printed woodworking aid. Optimized for Elegoo Neptune 4 Pro (225x225x265mm build volume, 0.2mm layer height). Always use metric measurements.
Generate parametric 3D printable jigs and fixtures for woodworking projects using CadQuery.
For complete specifications and design constraints, read references/printer_specs.md.
scripts/circle_cutting_jig.py)Creates router jigs for cutting perfect circles - ideal for lampshade rings and circular frames.
Usage:
python scripts/circle_cutting_jig.py <outer_diameter> <inner_diameter> [output.stl]
Example:
python scripts/circle_cutting_jig.py 300 250 lampshade_jig.stl
Features:
scripts/angle_wedge.py)Creates angle guide wedges for compound cuts and angled assembly work.
Usage:
python scripts/angle_wedge.py <angle_degrees> [output.stl]
Example:
python scripts/angle_wedge.py 15 wedge_15deg.stl
Features:
scripts/spacing_block.py)Creates precision spacing blocks for consistent assembly gaps and setup.
Usage:
# Single block
python scripts/spacing_block.py <height_mm> [width_mm] [depth_mm] [output.stl]
# Set of multiple heights
python scripts/spacing_block.py set <h1>,<h2>,<h3> [output.stl]
Examples:
python scripts/spacing_block.py 10 50 30 spacer_10mm.stl
python scripts/spacing_block.py set 5,10,15,20 spacer_set.stl
Features:
For custom jig designs not covered by pre-built scripts, write Python code using CadQuery. Read references/cadquery_patterns.md for common patterns and best practices.
references/printer_specs.md:
references/cadquery_patterns.mdcq.exporters.export(part, "filename.stl")/mnt/user-data/outputs/ for user accessimport cadquery as cq
def create_router_template(length, width, inset, guide_height):
"""Create router template with guide bushings."""
# Base plate
base = (
cq.Workplane("XY")
.rect(length, width)
.extrude(6)
)
# Cut out center area
base = (
base.faces(">Z")
.workplane()
.rect(length - 2 * inset, width - 2 * inset)
.cutThruAll()
)
# Add guide walls
walls = (
cq.Workplane("XY")
.workplane(offset=6)
.rect(length, width)
.rect(length - 2 * inset, width - 2 * inset)
.extrude(guide_height)
)
result = base.union(walls)
# Add mounting holes (corners)
for x in [-length/2 + 15, length/2 - 15]:
for y in [-width/2 + 15, width/2 - 15]:
result = (
result.faces(">Z")
.workplane()
.center(x, y)
.circle(2.5) # M5 clearance
.cutThruAll()
)
return result
# Generate and export
template = create_router_template(200, 150, 30, 8)
cq.exporters.export(template, "router_template.stl")
circle_cutting_jig.py for ring framesangle_wedge.py for tapered shade anglesspacing_block.py for consistent rib spacingCommon hole sizes (add 0.3-0.5mm clearance):
When generating STL files:
/home/claude/ during development/mnt/user-data/outputs/ before presenting to userlampshade_jig_300mm_OD.stlwedge_22.5_degrees.stljig1.stlFor detailed patterns and examples, read references/cadquery_patterns.md.
Basic structure:
import cadquery as cq
# Create base
part = cq.Workplane("XY").box(50, 30, 10)
# Add features on top
part = (
part.faces(">Z")
.workplane()
.circle(5)
.cutThruAll()
)
# Export
cq.exporters.export(part, "output.stl")
Essential methods:
.box(w, d, h) - rectangular solid.circle(r) - circle sketch.rect(w, h) - rectangle sketch.extrude(height) - extrude 2D to 3D.cutThruAll() - cut through entire part.fillet(radius) - round edges.chamfer(distance) - bevel edges.translate((x, y, z)) - move part.rotate((cx,cy,cz), (ax,ay,az), angle) - rotate around axispip install --break-system-packages cadquery
references/printer_specs.md when starting a new jig designreferences/cadquery_patterns.md when writing custom CadQuery codeAfter generating STL file(s), always:
/mnt/user-data/outputs/[View your file](computer:///mnt/user-data/outputs/filename.stl)使用 Arthas 的 watch/trace 获取 EagleEye traceId / 获取请求的 traceId