This project collects laser cutting and woodworking designs generated programmatically using FreeCAD Python scripts, built and executed with Bazel and rules_freecad.
The project exports vector graphics (such as .svg cut and engrave profiles) dimensioned and laid out for laser cutters (e.g. Epilog Legend 36EXT and Epilog Mini 24).
- Rattles (
//rattles:owl):- Parametric owl-shaped baby rattle outline with custom Bézier splines and feature cutouts.
- Outputs
owl_rattle.svgscaled for standard bed dimensions.
- Milestones (
//milestones:birth_milestones):- Baby birth milestone marker rounds with text typography (incorporating downloaded fonts like Funnel Sans and Tangerine via Bazel runfiles).
- Generates layered engraving and cutting profiles.
- Puzzles (
//puzzles:abcpzl):- Alphabet puzzle cutouts and placement layouts.
- Geometry Library (
//geometry:bezier):- Reusable geometry utilities, including cubic Bézier curve point calculation and FreeCAD Draft BSpline curve generation.
- Fonts (
//fonts:*):- Bazel rules managing font dependencies (Open Sans, Funnel Sans, Tangerine) fetched through Bazel HTTP rules.
- Bazel (or Bazelisk): Bazel 8+ with Bzlmod support enabled.
- NO other requirement: Everything required for running this project is managed by Bazel and will be downloaded (and cached) upon first run.
To avoid passing platform flags manually for every build or execution, configure .bazelrc.user:
- Copy the template:
cp .bazelrc.user.template .bazelrc.user
- Update
.bazelrc.userwith your target platform if not already set, for example:common --platforms=@rules_freecad//platforms:freecad_linux_x86_64
Run any of the design targets using bazel run:
bazel run //rattles:owlGenerates owl_rattle.svg in the project root.
bazel run //milestones:birth_milestonesGenerates SVG milestone templates using embedded fonts.
bazel run //puzzles:abcpzlThis project is licensed under the Apache License 2.0.