From 3106176caac15a01dc54cb84e809b653d7700c11 Mon Sep 17 00:00:00 2001 From: Reed Krantz Date: Wed, 24 Jun 2026 18:57:01 -0500 Subject: [PATCH] feat(cad): add the 3dfiles package and the original drive shaft mount --- cad/.envrc | 1 + cad/build.py | 33 +++++++++++++++++++++++++++++++++ flake.nix | 9 +++++++++ 3 files changed, 43 insertions(+) create mode 100644 cad/.envrc create mode 100644 cad/build.py diff --git a/cad/.envrc b/cad/.envrc new file mode 100644 index 0000000..9411667 --- /dev/null +++ b/cad/.envrc @@ -0,0 +1 @@ +use flake ..#cad diff --git a/cad/build.py b/cad/build.py new file mode 100644 index 0000000..bc12617 --- /dev/null +++ b/cad/build.py @@ -0,0 +1,33 @@ +# pyright: reportUnusedCallResult=false, reportWildcardImportFromLibrary=false +from build123d import * + +hole_offset = 20 +hole_diameter = 22 + +width = 40 +thickness = 20 + +assert (hole_offset - hole_diameter / 2) > 0 +assert (width - hole_diameter) > 0 + + +with BuildPart() as builder: + with BuildSketch() as sketch: + with BuildLine() as profile: + l1 = Polyline( + (0,0), + (width / 2, 0), + (width / 2, hole_offset) + ) + l2 = CenterArc((0, hole_offset), width / 2, 90, -90) + mirror(profile.line, Plane.YZ) + make_face() + + with Locations((0, hole_offset)): + Circle(hole_diameter / 2, mode=Mode.SUBTRACT) + + extrude(amount=thickness / 2) + mirror(about=Plane.XY) + +assert builder.part is not None +export_step(builder.part, "drive shaft mount.step") diff --git a/flake.nix b/flake.nix index 94eb1da..d259efb 100644 --- a/flake.nix +++ b/flake.nix @@ -21,6 +21,7 @@ flake-parts.lib.mkFlake {inherit inputs;} { imports = [ project-templates.flakeModules.rust-esp32-c6 + project-templates.flakeModules.cad ]; systems = ["aarch64-linux" "x86_64-linux" "aarch64-darwin"]; @@ -37,6 +38,14 @@ # runtimeDeps = with pkgs; []; # buildDeps = with pkgs; []; }; + + krantz.cad = { + enable = true; + builder = ./cad/build.py; + + devShell.name = "cad"; + package.name = "3dfiles"; + }; }; }; }