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
thenpip install vtk==9.3.1
. See #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 #782
- Slots error if width <= height by @erooke in #790
- Drop support for python 3.9 by @jdegenstein in #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 #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 #798
- Refactored shape extractors to avoid class references Issue #788 by @gumyr in commit 52e43d5
- Workflow cleanup by @jdegenstein in #821
- Refactored topology.py ready to split into multiple modules by @gumyr in #812
- Workflow Cleanup by @jdegenstein in #841
- Upgrade to Python 310+ syntax by @jdegenstein in #852
- Add a benchmark workflow to build123d by @jdegenstein in #849
- objects_sketch.py -> mypy typing improvements by @jdegenstein in #853
- Minimal changes to support OCP >= 7.8 in gumy/build123d@ocp781 by @jdegenstein in #858
- Test and fix for exporting small arcs to SVG. by @slobberingant in #862
- Upgrade build123d to OCP>=7.8 by @jdegenstein in #865
- feat: create mesh in fewer iterations by @drbh in #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 #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 #838 - pyproject.toml -> add optional dependencies by @jdegenstein in #869
- readthedocs fixes to topology inheritance diagram, add mixin classes … by @jdegenstein in #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 #876
- pyproject.toml -> add optional
cadquery-ocp-stubs
to [development] optional extras by @jdegenstein in #877 - Move
cadquery-ocp-stubs
from [development] to new [stubs] and exclude from [all] (optional dependencies) by @jdegenstein in #878 - jupyter_tools: fix out of order display of multiple shapes in static html by @victorpoughon in #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 #879
- Encaps vtk by @bernhard-42 in #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 #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 #868
- @victorpoughon made their first contribution in #829
- @hoijui made their first contribution in #882
Full Changelog: v0.8.0...v0.9.0