From 68e1c19c73aa2306b5dd05b66a7e8e8d31e44edf Mon Sep 17 00:00:00 2001 From: Jonathan Wagenet Date: Tue, 18 Nov 2025 13:16:13 -0500 Subject: [PATCH] Add headings, demo images, section with basic usage and feature overview, slim down installation --- CONTRIBUTING.md | 37 ++++- README.md | 234 ++++++++++++++++++++++++++---- docs/assets/readme/add_part.png | Bin 0 -> 22053 bytes docs/assets/readme/create_1d.png | Bin 0 -> 9742 bytes docs/assets/readme/extend.png | Bin 0 -> 22857 bytes docs/assets/readme/readme.py | 95 ++++++++++++ docs/assets/readme/upgrade_2d.png | Bin 0 -> 39215 bytes 7 files changed, 329 insertions(+), 37 deletions(-) create mode 100644 docs/assets/readme/add_part.png create mode 100644 docs/assets/readme/create_1d.png create mode 100644 docs/assets/readme/extend.png create mode 100644 docs/assets/readme/readme.py create mode 100644 docs/assets/readme/upgrade_2d.png diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 78f6540..24a462c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,13 +1,34 @@ -When writing code for inclusion in build123d please add docs and +# Contributing + +When writing code for inclusion in build123d please add docstrings and tests, ensure they build and pass, and ensure that `pylint` and `mypy` are happy with your code. -- Install `pip` following their [documentation](https://pip.pypa.io/en/stable/installation/). -- Install development dependencies: `pip install -e ".[development]"` -- Install docs dependencies: `pip install -e ".[docs]"` -- Install `build123d` in editable mode from current dir: `pip install -e .` +## Setup + +Ensure `pip` is installed and [up-to-date](https://pip.pypa.io/en/stable/installation/#upgrading-pip). +Clone the build123d repo and install in editable mode: + +``` +git clone https://github.com/gumyr/build123d.git +cd build123d +pip install -e . +``` + +Install development and docs dependencies: + +``` +pip install -e ".[development]" +pip install -e ".[docs]" +``` + +## Before submitting a PR + - Run tests with: `python -m pytest -n auto` -- Build docs with: `cd docs && make html` -- Check added files' style with: `pylint ` +- Check added files' style with: `pylint ` - Check added files' type annotations with: `mypy ` -- Run black formatter against files' changed: `black --config pyproject.toml ` (where the pyproject.toml is from this project's repository) +- Run black formatter against files' changed: `black ` + +To verify documentation changes build docs with: +- Linux/macOS: `./docs/make html` +- Windows: `./docs/make.bat html` diff --git a/README.md b/README.md index cb7c309..afb9320 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -

+

build123d logo -

+

[![Documentation Status](https://readthedocs.org/projects/build123d/badge/?version=latest)](https://build123d.readthedocs.io/en/latest/?badge=latest) [![tests](https://github.com/gumyr/build123d/actions/workflows/test.yml/badge.svg)](https://github.com/gumyr/build123d/actions/workflows/test.yml) @@ -18,63 +18,239 @@ [![PyPI - Wheel](https://img.shields.io/pypi/wheel/build123d.svg)](https://pypi.org/project/build123d/) [![DOI](https://zenodo.org/badge/510925389.svg)](https://doi.org/10.5281/zenodo.14872322) +[Documentation](https://build123d.readthedocs.io/en/latest/index.html) | +[Cheat Sheet](https://build123d.readthedocs.io/en/latest/cheat_sheet.html) | +[Discord](https://discord.com/invite/Bj9AQPsCfx) | +[Discussions](https://github.com/gumyr/build123d/discussions) | +[Issues](https://github.com/gumyr/build123d/issues ) | +[Contributing]() -Build123d is a Python-based, parametric [boundary representation (BREP)][BREP] modeling framework for 2D and 3D CAD. Built on the [Open Cascade] geometric kernel, it provides a clean, fully Pythonic interface for creating precise models suitable for 3D printing, CNC machining, laser cutting, and other manufacturing processes. Models can be exported to popular CAD tools such as [FreeCAD] and SolidWorks. +build123d is a Python-based, parametric [boundary representation (BREP)][BREP] modeling framework for 2D and 3D CAD. Built on the [Open Cascade] geometric kernel, it provides a clean, fully Pythonic interface for creating precise models suitable for 3D printing, CNC machining, laser cutting, and other manufacturing processes. + +
+ bracket + key cap + hangar +
+ +## Features Designed for modern, maintainable CAD-as-code, build123d combines clear architecture with expressive, algebraic modeling. It offers: - Minimal or no internal state depending on mode, - Explicit 1D, 2D, and 3D geometry classes with well-defined operations, - Extensibility through subclassing and functional composition—no monkey patching, - Standards-compliant code (PEP 8, mypy, pylint) with rich pylance type hints, -- Deep Python integration—selectors as lists, locations as iterables, and natural conversions (Solid(shell), tuple(Vector)), -- Operator-driven modeling (obj += sub_obj, Plane.XZ * Pos(X=5) * Rectangle(1, 1)) for algebraic, readable, and composable design logic. +- Deep Python integration—selectors as lists, locations as iterables, and natural conversions (`Solid(shell)`, `tuple(Vector)`), +- Operator-driven modeling (`obj += sub_obj`, `Plane.XZ * Pos(X=5) * Rectangle(1, 1)`) for algebraic, readable, and composable design logic, +- Export formats to popular CAD tools such as [FreeCAD] and SolidWorks. -The result is a framework that feels native to Python while providing the full power of OpenCascade geometry underneath. +## Usage -The documentation for **build123d** can be found at [readthedocs](https://build123d.readthedocs.io/en/latest/index.html). +Although wildcard imports are generally bad practice, build123d scripts are usually self contained and importing the large number of objects and methods into the namespace is common: -There is a [***Discord***](https://discord.com/invite/Bj9AQPsCfx) server (shared with [CadQuery]) where you can ask for help in the build123d channel. +```py +from build123d import * +``` -The recommended method for most users to install **build123d** is: +### Constructing a 1D Shape + +Edges, Wires (multiple connected Edges), and Curves (a Compound of Edges and Wires) are the 1D Shapes available in build123d. A single Edge can be created from a Line object with two vector-like positions: + +```py +line = Line((0, -3), (6, -3)) +``` + +Additional Edges and Wires may be added to (or subtracted from) the initial line. These objects can reference coordinates along another line through the position (`@`) and tangent (`%`) operators to specify input Vectors: + +```py +line += JernArc(line @ 1, line % 1, radius=3, arc_size=180) +line += PolarLine(line @ 1, 6, direction=line % 1) +``` + +
+ create 1d +
+ +### Upgrading to 2D and 3D + +Faces, Shells (multiple connected Faces), and Sketches (a Compound of Faces and Shells) are the 2d Shapes available in build123d. The previous line is sufficiently defined to close the Wire and create a Face with `make_hull`: + +```py +sketch = make_hull(line) +``` + +A Circle face is translated with `Pos`, a Location object like `Rot` for transforming Shapes, and subtracted from the sketch. This sketch face is then extruded into a Solid part: + +```py +sketch -= Pos(6, 0, 0) * Circle(2) +part = extrude(sketch, amount= 2) +``` + +
+ upgrade 2d +
+ +### Adding to and modifying part + +Solids and Parts (a Compound of Solids) are the 1D Shapes available in build123d. A second part can be created from an additional Face. Planes can also be used for positioning and orienting Shape objects. Many objects offer an affordance for alignment relative to the object origin: + +```py +plate_sketch = Plane.YZ * RectangleRounded(16, 6, 1.5, align=(Align.CENTER, Align.MIN)) +plate = extrude(plate_sketch, amount=-2) +``` + +Shape topology can be extracted from Shapes with selectors which return ShapeLists. ShapeLists offer methods for sorting, grouping, and filtering Shapes by Shape properties, such as finding a Face by area and selecting position along an Axis and specifying a target with a list slice. A Plane is created from the specified Face to locate an iterable of Locations to place multiple objects on the second part before it is added to the main part: + +```py +plate_face = plate.faces().group_by(Face.area)[-1].sort_by(Axis.X)[-1] +plate -= Plane(plate_face) * GridLocations(13, 3, 2, 2) * CounterSinkHole(.5, 1, 2) + +part += plate +``` + +ShapeList selectors and operators offer powerful methods for specifying Shape features through properties such as length/area/volume, orientation relative to an Axis or Plane, and geometry type: + +```py +part = fillet(part.edges().filter_by(lambda e: e.length == 2).filter_by(Axis.Z), 1) +bore = part.faces().filter_by(GeomType.CYLINDER).filter_by(lambda f: f.radius == 2) +part = chamfer(bore.edges(), .2) +``` + +
+ modify part +
+ +### Builder Mode + +The previous construction is through the **Algebra Mode** interface, which follows a stateless paradigm where each object is explicitly tracked and mutated by algebraic operators. + +**Builder Mode** is an alternative build123d interface where state is tracked and structured in a design history-like way where each dimension is distinct. Operations are aware pending faces and edges from Build contexts and location transformations are applied to all child objects in Build and Locations contexts. Builder mode also introduces the `mode` affordance to objects to specify how new Shapes are combined with the context: + +```py +with BuildPart() as part_context: + with BuildSketch() as sketch: + with BuildLine() as line: + l1 = Line((0, -3), (6, -3)) + l2 = JernArc(l1 @ 1, l1 % 1, radius=3, arc_size=180) + l3 = PolarLine(l2 @ 1, 6, direction=l2 % 1) + l4 = Line(l1 @ 0, l3 @ 1) + make_face() + + with Locations((6, 0, 0)): + Circle(2, mode=Mode.SUBTRACT) + + extrude(amount=2) + + with BuildSketch(Plane.YZ) as plate_sketch: + RectangleRounded(16, 6, 1.5, align=(Align.CENTER, Align.MIN)) + + plate = extrude(amount=-2) + + with Locations(plate.faces().group_by(Face.area)[-1].sort_by(Axis.X)[-1]): + with GridLocations(13, 3, 2, 2): + CounterSinkHole(.5, 1) + + fillet(edges().filter_by(lambda e: e.length == 2).filter_by(Axis.Z), 1) + bore = faces().filter_by(GeomType.CYLINDER).filter_by(lambda f: f.radius == 2) + chamfer(bore.edges(), .2) +``` + +### Extending objects + +New objects may be created for parametric reusability from base object classes: + +```py +class Punch(BaseSketchObject): + def __init__( + self, + radius: float, + size: float, + blobs: float, + mode: Mode = Mode.ADD, + ): + with BuildSketch() as punch: + if blobs == 1: + Circle(size) + else: + with PolarLocations(radius, blobs): + Circle(size) + + if len(faces()) > 1: + raise RuntimeError("radius is too large for number and size of blobs") + + add(Face(faces()[0].outer_wire()), mode=Mode.REPLACE) + + super().__init__(obj=punch.sketch, mode=mode) + +tape = Rectangle(20, 5) +for i, location in enumerate(GridLocations(5, 0, 4, 1)): + tape -= location * Punch(.8, 1, i + 1) +``` + +
+ extend +
+ +### Data interchange + +build123d can import and export a number data formats for interchange with 2d and 3d design tools, 3D printing slicers, and traditional CAM: + +```py +svg = import_svg("spade.svg") +step = import_step("nema-17-bracket.step") + +export_stl(part, "bracket.stl") +export_step(part_context.part, "bracket.step") +``` + +### Further reading + +More [Examples](https://build123d.readthedocs.io/en/latest/introductory_examples.html) and [Tutorials](https://build123d.readthedocs.io/en/latest/tutorials.html) are found in the documentation. + +## Installation + +For additional installation options see [Installation](https://build123d.readthedocs.io/en/latest/installation.html) + +### Current release + +Installing build123d from `pip` is recommended for most users: ``` pip install build123d ``` -To get the latest non-released version of **build123d** one can install from GitHub using one of the following two commands: - -Linux/MacOS: +If you receive errors about conflicting dependencies, retry the installation after upgrading pip to the latest version: ``` -python3 -m pip install git+https://github.com/gumyr/build123d +pip install --upgrade pip ``` -Windows: +### Pre- release + +build123d is under active development and up-to-date features are found in the +development branch: ``` -python -m pip install git+https://github.com/gumyr/build123d +pip install git+https://github.com/gumyr/build123d ``` -If you receive errors about conflicting dependencies, you can retry the installation after having upgraded pip to the latest version with the following command: -``` -python3 -m pip install --upgrade pip -``` +### Viewers -Development install: +build123d is best used with a viewer. The most popular viewer is [ocp_vscode](https://github.com/bernhard-42/vscode-ocp-cad-viewer), a Python package with a standalone viewer and VS Code extension. Other [Editors & Viewers](https://build123d.readthedocs.io/en/latest/external.html#external) are found in the documentation. -``` -git clone https://github.com/gumyr/build123d.git -cd build123d -python3 -m pip install -e . -``` +## Contributing -Further installation instructions are available (e.g. Poetry) see the [installation section on readthedocs](https://build123d.readthedocs.io/en/latest/installation.html). +build123d is a rapidly growing project and we welcome all contributions. Whether you want to share ideas, report bugs, or implement new features, your contribution is welcome! Please see our [CONTRIBUTING.md](CONTRIBUTING.md) file to get started. -Attribution: +## Attribution -Build123d was originally derived from portions of the [CadQuery] codebase but has since been extensively refactored and restructured into an independent system. +build123d is derived from portions of [CadQuery], but is extensively refactored and restructured into an independent framework over [Open Cascade]. + +## License + +This project is licensed under the [Apache License 2.0](LICENSE). [BREP]: https://en.wikipedia.org/wiki/Boundary_representation [CadQuery]: https://cadquery.readthedocs.io/en/latest/index.html [FreeCAD]: https://www.freecad.org/ -[Open Cascade]: https://dev.opencascade.org/ +[Open Cascade]: https://dev.opencascade.org/ \ No newline at end of file diff --git a/docs/assets/readme/add_part.png b/docs/assets/readme/add_part.png new file mode 100644 index 0000000000000000000000000000000000000000..87220399ddf7896832a92d28cbdb3f05ae4f7932 GIT binary patch literal 22053 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 ipoUyk?x~~y<SPZ!6KiaBrZa+b&( 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 G2~7a~9~Y$n literal 0 HcmV?d00001 diff --git a/docs/assets/readme/extend.png b/docs/assets/readme/extend.png new file mode 100644 index 0000000000000000000000000000000000000000..d69f726752db0677ec9e3777efd272baae66d7a3 GIT binary patch literal 22857 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 literal 0 HcmV?d00001 diff --git a/docs/assets/readme/readme.py b/docs/assets/readme/readme.py new file mode 100644 index 0000000..2e5f24e --- /dev/null +++ b/docs/assets/readme/readme.py @@ -0,0 +1,95 @@ +import os +from copy import copy + +from build123d import * +from ocp_vscode import * + +working_path = os.path.dirname(os.path.abspath(__file__)) + +with BuildPart() as part_context: + with BuildSketch() as sketch: + with BuildLine() as line: + l1 = Line((0, -3), (6, -3)) + l2 = JernArc(l1 @ 1, l1 % 1, radius=3, arc_size=180) + l3 = PolarLine(l2 @ 1, 6, direction=l2 % 1) + l4 = Line(l1 @ 0, l3 @ 1) + make_face() + + with Locations((6, 0, 0)): + Circle(2, mode=Mode.SUBTRACT) + + extrude(amount=2) + + with BuildSketch(Plane.YZ) as plate_sketch: + RectangleRounded(16, 6, 1.5, align=(Align.CENTER, Align.MIN)) + + plate = extrude(amount=-2) + + with Locations(plate.faces().group_by(Face.area)[-1].sort_by(Axis.X)[-1]): + with GridLocations(13, 3, 2, 2): + CounterSinkHole(.5, 1) + + fillet(edges().filter_by(lambda e: e.length == 2).filter_by(Axis.Z), 1) + bore = faces().filter_by(GeomType.CYLINDER).filter_by(lambda f: f.radius == 2) + chamfer(bore.edges(), .2) + +line = Line((0, -3), (6, -3)) +line += JernArc(line @ 1, line % 1, radius=3, arc_size=180) +line += PolarLine(line @ 1, 6, direction=line % 1) + +sketch = make_hull(line.edges()) +sketch -= Pos(6, 0, 0) * Circle(2) +part = extrude(sketch, amount= 2) +part_before = copy(part) + +plate_sketch = Plane.YZ * RectangleRounded(16, 6, 1.5, align=(Align.CENTER, Align.MIN)) +plate = extrude(plate_sketch, amount=-2) +plate_face = plate.faces().group_by(Face.area)[-1].sort_by(Axis.X)[-1] +plate -= Plane(plate_face) * GridLocations(13, 3, 2, 2) * CounterSinkHole(.5, 1, 2) + +part += plate +part_before2 = copy(part) + +part = fillet(part.edges().filter_by(lambda e: e.length == 2).filter_by(Axis.Z), 1) +bore = part.faces().filter_by(GeomType.CYLINDER).filter_by(lambda f: f.radius == 2) +part = chamfer(bore.edges(), .2) + +class Punch(BaseSketchObject): + def __init__( + self, + radius: float, + size: float, + blobs: float, + rotation: float = 0, + mode: Mode = Mode.ADD, + ): + with BuildSketch() as punch: + if blobs == 1: + Circle(size) + else: + with PolarLocations(radius, blobs): + Circle(size) + + if len(faces()) > 1: + raise RuntimeError("radius is too large for number and size of blobs") + + add(Face(faces()[0].outer_wire()), mode=Mode.REPLACE) + + super().__init__(obj=punch.sketch, rotation=rotation, mode=mode) + +tape = Rectangle(20, 5) +for i, location in enumerate(GridLocations(5, 0, 4, 1)): + tape -= location * Punch(.8, 1, i + 1) + +set_defaults(reset_camera=Camera.RESET) +show(line) +save_screenshot(os.path.join(working_path, "create_1d.png")) + +show(sketch, Pos(10, 10) * part_before) +save_screenshot(os.path.join(working_path, "upgrade_2d.png")) + +show(plate, Pos(12, 12) * part_before2, Pos(24, 24) * part) +save_screenshot(os.path.join(working_path, "add_part.png")) + +show(tape) +save_screenshot(os.path.join(working_path, "extend.png")) \ No newline at end of file diff --git a/docs/assets/readme/upgrade_2d.png b/docs/assets/readme/upgrade_2d.png new file mode 100644 index 0000000000000000000000000000000000000000..419ce01c64729a3ff3d86f66468b28201a675e46 GIT binary patch literal 39215 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 literal 0 HcmV?d00001