Upgrade Steps
* Due to some necessary changes to one of our key dependencies (cadquery-ocp), when upgrading build123d from approx. <=0.8.0 to 0.9.0, the VTK formerly provided by cadquery-ocp is not always cleanly removed. There are two known solutions to this (1) create a new clean environment, or (2) `pip uninstall vtk` then `pip install vtk==9.3.1`. See https://github.com/gumyr/build123d/issues/883 for any further updates.
Breaking Changes
* Eliminate previously deprecated e.g. `Shape.export_stl` methods. Please use the appropriate function instead e.g. `export_stl(Shape, "filename.stl")`
* While Part() + ... generates a Compound if needed as normal. Solid() + ... may return a ShapeList of Solids as Compound is not available for lower-order classes. Typically wrapping with `Compound()` is a usable workaround for these cases to approximate the old behavior. This change was necessary due to the refactor of topology.py.
* surface.thicken(amount) → Solid.thicken(surface, amount). This aligns with the principle that lower-order classes cannot directly generate higher-order objects.
Major Notable Changes
* Major refactor of approx 10k line topology.py primarily by gumyr and also others, split into multiple smaller files and eliminate circular references. Restructure topological shapes to depend only on lower dimensional shapes and clarify input and return types. (many commits)
* Codebase now passes mypy static type checking primarily by gumyr and also others (many commits)
* Dropped support for Python 3.9, and added support for Python 3.13
* Added optional dependencies: ocp_vscode, development, docs, stubs, benchmark and all. You can install like `pip install build123d[development]`
* shape.split(Keep.BOTH) now returns a tuple of Shape objects instead of a Compound.
* Shape.extrude() has been replaced with topology-specific methods: e.g. Edge.extrude(vertex), Face.extrude(edge), ...
* Shape.intersect() may now return None when no intersection is found.
* Edge.intersect() has been enhanced to accept a Plane and return either Vertices or Edge (if fully contained within the plane).
* Now depends on cadquery-ocp>=7.8,<7.9 which includes some internal changes to OCCT shape hashing
Selected Other Changes
* Alignment rework by erooke in https://github.com/gumyr/build123d/pull/782
* Slots error if width <= height by erooke in https://github.com/gumyr/build123d/pull/790
* Drop support for python 3.9 by jdegenstein in https://github.com/gumyr/build123d/pull/794
* Replaced unwrap with unwrap_topods_compound in topology.py Issue 788 by gumyr in commit 3b0fcb0
* Update `test.yml` to use the newly released cadquery-ocp PyPI packages for macos-arm64 by jdegenstein in https://github.com/gumyr/build123d/pull/797
* Curve object become Wire/Edge, replace Compound.first_level_shapes with Shape.get_top_level_shapes Issue 788 by gumyr in commit e82b20a
* Update docs to remove obsolete advice for Apple Silicon installation by jdegenstein in https://github.com/gumyr/build123d/pull/798
* Refactored shape extractors to avoid class references Issue 788 by gumyr in commit 52e43d5
* Workflow cleanup by jdegenstein in https://github.com/gumyr/build123d/pull/821
* Refactored topology.py ready to split into multiple modules by gumyr in https://github.com/gumyr/build123d/pull/812
* Workflow Cleanup by jdegenstein in https://github.com/gumyr/build123d/pull/841
* Upgrade to Python 310+ syntax by jdegenstein in https://github.com/gumyr/build123d/pull/852
* Add a benchmark workflow to build123d by jdegenstein in https://github.com/gumyr/build123d/pull/849
* objects_sketch.py -> mypy typing improvements by jdegenstein in https://github.com/gumyr/build123d/pull/853
* Minimal changes to support OCP >= 7.8 in gumy/build123docp781 by jdegenstein in https://github.com/gumyr/build123d/pull/858
* Test and fix for exporting small arcs to SVG. by slobberingant in https://github.com/gumyr/build123d/pull/862
* Upgrade build123d to OCP>=7.8 by jdegenstein in https://github.com/gumyr/build123d/pull/865
* feat: create mesh in fewer iterations by drbh in https://github.com/gumyr/build123d/pull/868
* Removing deprecated methods from docs by gumyr in commit 5571e9e
* Fixed convert color making typing explicit by gumyr in commit d12f80c
* Move new mesher benchmark to `test_benchmarks.py` by jdegenstein in https://github.com/gumyr/build123d/pull/870
* Fixing Issue 796 + pylint improvements by gumyr in commit 7b16193
* Improved split with a non-planar tool by gumyr in commit 19d925f
* simplify `import_svg` API by snoyer in https://github.com/gumyr/build123d/pull/838
* pyproject.toml -> add optional dependencies by jdegenstein in https://github.com/gumyr/build123d/pull/869
* readthedocs fixes to topology inheritance diagram, add mixin classes … by jdegenstein in https://github.com/gumyr/build123d/pull/872
* Added Keep.ALL to split by gumyr in commit eebd82d
* exporters3d.py -> add "build123d" to exported step files, change step "Name" to build123d label by jdegenstein in https://github.com/gumyr/build123d/pull/876
* pyproject.toml -> add optional `cadquery-ocp-stubs` to [development] optional extras by jdegenstein in https://github.com/gumyr/build123d/pull/877
* Move `cadquery-ocp-stubs` from [development] to new [stubs] and exclude from [all] (optional dependencies) by jdegenstein in https://github.com/gumyr/build123d/pull/878
* jupyter_tools: fix out of order display of multiple shapes in static html by victorpoughon in https://github.com/gumyr/build123d/pull/829
* Separate test_direct_api.py into multiple separate files by gumyr in multiple commits
* allow to filter and group by property by snoyer in https://github.com/gumyr/build123d/pull/879
* Encaps vtk by bernhard-42 in https://github.com/gumyr/build123d/pull/887
* Added sort_by lambda and update docstring by gumyr in commit 0625c77 f077d72
* README: Makes reading it a tiny bit smoother by hoijui in https://github.com/gumyr/build123d/pull/882
* Added Edge.is_interior property Issue 816 by gumyr in commit 4aee76f
* Updating doc: separating key concepts, adding OpenSCAD section by gumyr in commit 94fdd97 and 0da16cf
* Added section on moving shapes by gumyr in commit 9f5b4ea
* Added Shape static_moments, matrix_of_inertia, principal_properties and radius_of_gyration properties method by gumyr in commit 8fe3ec1
* Added Axis.is_skew and tested for is_skew in Axis.intersect by gumyr in commit b8dcad3
* Making Axis friendly to sub-classing by gumyr in commit 0e3dbbe
* Adding Face.remove_holes and Face.total_area property by gumyr in commit c728124
New Contributors
* drbh made their first contribution in https://github.com/gumyr/build123d/pull/868
* victorpoughon made their first contribution in https://github.com/gumyr/build123d/pull/829
* hoijui made their first contribution in https://github.com/gumyr/build123d/pull/882
**Full Changelog**: https://github.com/gumyr/build123d/compare/v0.8.0...v0.9.0