yapCAD

parametric rocket example

Multi-stage rocket generated with yapCAD and exported to STL.

rocket internal cutaway

Internal layout from examples/rocket_cutaway_internal.py rendered from the exported STEP file in FreeCAD.

M10 fastener pair with material properties

M10 hex-cap screw and nut pair demonstrating yapCAD’s material properties support, rendered with zinc (left) and brass (right) finishes.

Welcome to yapCAD, yet another procedural CAD and computational geometry system, written in Python. The project is in active development, with the 0.6.x series delivering reusable .ycpkg package workflows, an embedded involute gear toolkit, spline-aware exports, and continued improvements to robust boolean operations, STL/STEP export, and the interactive viewer.

Note

yapCAD was created to solve some fairly specific problems in procedural CAD and parametric design. Earlier releases were primarily geared toward generating 2D drawings in the AutoCad DXF format; the current 0.6.x cycle adds reusable .ycpkg packaging, vendored gear generation utilities, spline-native exports, and production-ready STL/STEP output with improved validation.

Why use yapCAD? yapCAD allows you to transform the 2D and 3D mechanical design process from the manual creation of drawings, parts, and assemblies into a highly automatable process focused creation of modular, parametric, and even LLM-generated code.

Because yapCAD’s foundations are in software, you can use powerful agentic tools to translate your design intent into functional, parameterized code without manual drawing edits. Several shipped examples were authored via LLM prompts to demonstrate automation-friendly workflows.

And becuse yapCAD designs are software, they can be parametric and modular. So if you are tired of manually editing your CAD files whenever you change the thickness of a material, the size of a pipe fitting, or the diameter and spacing of bolts, etc., this might just be the tool you are looking for.

For an example and discussion of what parametric design is and why it might be useful see What is Parametric Design? below.

Much of the documentation for yapCAD can be found in the README files, as well as in the yapcad.geom module documentation linked below. Key helper modules include yapcad.geometry_utils/yapcad.triangulator (triangle helpers and ear-cut tessellation), yapcad.geometry_checks (mesh validation), yapcad.metadata (surface/solid provenance), yapcad.geom3d_util.stack_solids and cutaway_solid_x (layout and section tools), yapcad.boolean.native (production-ready boolean engine), and yapcad.io for validated STL/STEP export.

Contents

Indices and tables

What is Parametric Design?

Parametric design is a generalizable approach to solving design problems by means of parameters and algorithms, as opposed to the creation of static drawings or models. Put another way, a conventional design is like a drawing, and a parametric design is like a piece of software that you configure to create the specific drawing that you want.

the acrylic box: a parametric design example

For example, imagine that you wanted to design a decorative acrylic box to be assembled from pieces cut from a sheet of material of uniform thickness. This box will be a squeeze-fit design, so that it assembles like a 3D jigsaw puzzle, without the need for additional glue or fasteners.

picture of a laser-cut acrylic box, squeeze-fit design

You might decide on the dimensions of your box, and a scheme by which you cut the edges to create tabs and slots so that when cut, the box will fit together just so. However, the depth of your tabs and slots will necessarily depend on the thickness of the material, which might vary slightly from sheet to sheet, or vendor to vendor. Furthermore, your cutting tool (perhaps a laser cutter) will create a kerf, or width of cut, that vary from machine to machine and with depth of focus.

Finally, your box might be sized to hold a variety of contents, which themselves might vary in size and shape.

One approach is to create a conventional design. You could draw your design for one size of box, material, and thickness of cut, and then hope you have your tolerances correct. If there is a problem, or you want to change box dimensions, you will need to go back and revise your design. Each time you revise, you are essentially redoing the entire drawing from scratch.

Alternately, you could create a parametric design, in which the desired length, width, and height of the box are input parameters, along with the thickness of the material and an estimate of the kerf. Creating a parametric design system might be a bit more difficult than creating a conventional drawing, but once you are done you will be able to generate the design for any desired box, from any desired material thickness, with any kerf, simply by changing a few numbers – automatically, and without having to revise any code or drawing.

Note

For a yapCAD solution to this particular problem, see the

boxcut example in the examples directory for a 2D parametric workflow, and rocket_demo.py for a 3D generative workflow that visualises and exports STL.

Generative fasteners

The yapcad.fasteners helpers provide canonically parameterized screws, nuts, and washers for both metric and unified standards. They build on the thread sampler developed for the involute gear work and support external/internal threads, handedness, multi-start configurations, and catalog-backed defaults. See examples/threaded_fastener_package.py for a CLI that emits .ycpkg packages for common fasteners, or consume the helpers directly from Python/DSL to populate assemblies.

This ability to solve for an entire family of related design problems with a single parametric design system is what gives this approach it’s power and flexibility. For anyone who has spent hours re-drafting a drawing to accommodate minor variations in requirements, this can be an impressive force multiplier on productivity.