Releases: gumyr/build123d
Releases · gumyr/build123d
v0.9.0
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
v0.8.0
What's Changed
- Added Compound.unwrap & Compound.len as part of fix of issue #694 by @gumyr in 99b378f
- Fix thicken normal calculation when no override is provided by @danieledapo in #695
- Enhanced offset to allow holes to grow outside of the Face by @gumyr fixes Issue #702 in 043629e
- Updated partcad.yaml to make the examples work in the latest PartCAD by @openvmp in #706
- Fix
__eq__
and__ne__
for classes implementing them by @alexer in #707 - Remove use of deprecated
Compound.make_compound()
intutorial_joints.py
and fix intro ex. 23 algebra by @jdegenstein in #715 - Added Axis position & direction to docs by @gumyr in 14805a5
- New section "Iterating Over Compounds" to Assembly documentation. by @slobberingant in #713
- Fixed param_at_point fixes issues #570 and #708 by @gumyr in 04cf1ef
- Fix lint.yml and upgrade actions versions by @jdegenstein in #724
- Fixed invalid length of arcs fixes issue #717 by @gumyr in d3228ed
- Fixed split with nested Compounds fixes issue #698 by @gumyr in f1a9c58
- Adding pdf & epub to the docs by @gumyr in various commits 9dd8a27
- Fixed Failed DoubleTangentArc issue #664 and #728 by @gumyr in 371803d 8e798f2
- Added tuple as valid input to Color fixes issue #727 by @gumyr in various commits b81fecd
- Remove mesh from
bounding_box
and implementoptimal=False
in a few more places by @jdegenstein in #733 - Upgrade build123d to numpy >=2, <3 by @jdegenstein in #704
- test: check that exporter.library is >= 2.3.1 not == 2.3.1 by @erooke in #732
- Various documentation fixes by @jdegenstein in #737
- Added Face as an option to split PR#427 by @gumyr and thanks @MatthiasJ1 in 7be2eb1
- Adding a design tutorial by @gumyr in a66b8c7
- Updating example Issue #743 by @gumyr in ca3d8fa
- Adding
Shape.split_by_perimeter
fixes issue #751 by @gumyr in 8a91db6 5ed1499 312b50c - Added better explanations of what are the points lists for
Face.make_surface_from_array_of_points
by @Jojain in #755 - Added
Face.is_planar
property fixes issue #756 by @gumyr in 9fb163c - Adding
Compound.first_level_shapes
to extract objects by @gumyr in 9fb163c - Improved algebra +,-,& operators fixes issue #752 by @gumyr in 0b4b2b2
- Fix for deeply nested Compounds issue #607 by @gumyr in 3dbc873
- Enhancing Triangle issue #765 by @gumyr in f3fa230
- Added
Shell.loft
by @Jojain in #767 - Plane instantiation from planar Geom_BoundedSurface faces Issue #756 by @dalibor-frivaldsky in #764
- Added thicken and new split tools by @Jojain in #771
- pyproject.toml -> don't support python 3.13 since cadquery-ocp only supports up to 3.12 by @jdegenstein in #779
- Housekeeping various issues by @erooke in #783
pathlib.Path
support for file import and export by @erooke in #787- Program to refactor topology.py issue #788 by @gumyr in e06337a
- doc: added link to ggears to external.rst by @GarryBGoode #791
New Contributors
- @alexer made their first contribution in #707
- @slobberingant made their first contribution in #713
- @erooke made their first contribution in #732
- @dalibor-frivaldsky made their first contribution in #764
- @GarryBGoode made their first contribution in #791
Full Changelog: v0.7.0...v0.8.0
v0.7.0
What's Changed
- Fixed Face.is_coplanar for flipped Faces by @gumyr (fixes issue #661) 410007d
- import_step: do not assign labels to Compound.for_construction by @mbugert (fixes #662) in #663
- Enable sdist releases on PyPI starting with build123d v0.7.0 by @jdegenstein in #660
- Add a surface modeling tutorial by @gumyr in 5b8f0e9
- Various documentation changes by @gumyr in 88709a6 fc23959 31c2aaa 2de9225
- Fix typos by @henrebotha in #666
- Adding note about use of show by @gumyr (fixes #669) 1ec8b4f
- exporters3d.py -> Revert change to node_label.IsNull() check by @jdegenstein in #674
- Fixed Wire.trim providing incorrect results by @gumyr (fixes #676) 722165d)
- isclose on all platforms to fix MacOS / arm64 test failure for
Wire.trim
by @jdegenstein in #679 - Change Empty Builders RuntimeError to a UserWarning by @jdegenstein (fixes #487) in #677
- Fixed incorrect step import positioning of assembly by @gumyr and @bernhard-42 (fixes #671) fd4b16b
- Fix docstring & add PrecisionMode to init by @gumyr in 37c2c29
- fix location_at, position_at and tangent_at with PositionMode.LENGTH for Wire by @danieledapo in #680
- Add
optimal: bool
keyword toShape.bounding_box
and improve joint symbol performance by @jdegenstein and @bernhard-42 (fixes #657) in #684 - Fixing a typo on Update advantages.rst by @xela144 in #691
- Add missing svg files in assembly page for pack function by @roman-dvorak in (fixes #689) #690
- Added Shell.sweep and add Face.sweep ValueError by @gumyr (fixes #622) in 88a4057)
- Updating and fixing some documentation issues by @jdegenstein in (fixes #524 #682) #667
New Contributors
- @mbugert made their first contribution in #663
- @henrebotha made their first contribution in #666
- @danieledapo made their first contribution in #680
- @xela144 made their first contribution in #691
Full Changelog: v0.6.0...v0.7.0
v0.6.0
What's Changed
- Adding exporters to
__init__.py
fixes Issue #634 by @gumyr in commit a2d8b08 - Add yet-another-cad-viewer to editors & viewers by @Yeicor in #606
- Added interactive teacup model to docs by @gumyr (several commits)
- Created the PartCAD package for build123d examples. Added links. by @openvmp in #610
- Add the dl4to4ocp external library by @Yeicor in #616
- In the docs' index, replace e.g. with i.e. in two places by @Garbaz in #614
- test.yml -> change macos-latest to macos-13 to use x86_64 by @jdegenstein in #617
- Edits for 'tips' documentation. by @led in #628
- Fix solution ttt-ppp0101.py by @ABoss in #626
- import_step now supports colors and labels by @gumyr in 7a1cfc1
- Add
align_z
argument to pack() Method. by @roman-dvorak in #632 - Fixed export_stl reference in docs Issue 634 by @gumyr in c99881b)
- change requirement ezdxf >= 1.1.0 by @jdegenstein in #638
- Add a test for revolute joints around an axis other than Z by @zackyancey in #613
- Update documentation for pack function by @roman-dvorak in #641
- Partial fix for Issue #451 (sweep multiple faces) by @gumyr in f469937
- Fixing Issue #475 (revolve axis check too limiting) by @gumyr in ad55863
- Handling null TDF Label - Fix Issue #618 by @gumyr in 8a3ee82
- Added new Edge.trim_to_length feature by @gumyr in 4561105
- Fixed intersections of Axis Issue #615 by @gumyr in 2c40e19
- Added Plane.find_intersection(Plane) Issue #327 by @gumyr
in 35a33f8 - Add major_radius bool to HexLocations and rename apothem parameter to radius by @jdegenstein in #643
- Fix JernArc not always co-planar with input plane by @jdegenstein in #644
- Added geometry intersections Issue #327 #328 by @gumyr in ce72ee2
- Complete JernArc relocates vertex by @jdegenstein in #649
- Added
Plane.isometric
to built-in planes by @jdegenstein in #647 - Replaced Axis.as_infinite_edge with Edge init method Issue #648 by @gumyr in ce20991
- Remove unused numpy-stl dependency and update Apple Silicon instructions by @jdegenstein in #652
- Added Face.location_at & _ocp_section by @gumyr in e29c9fb
- Fix incorrect MC units and reduce code duplication of UNITS_PER_METER by @jdegenstein in #658
- Improved Vector.str/repr by @gumyr in 55c2231
- context aware shapes: fix to generic typevar to pass-through return types @jdegenstein in #659
New Contributors
- @openvmp made their first contribution in #610
- @Garbaz made their first contribution in #614
- @led made their first contribution in #628
- @ABoss made their first contribution in #626
- @roman-dvorak made their first contribution in #632
- @zackyancey made their first contribution in #613
Full Changelog: v0.5.0...v0.6.0
v0.5.0
What's Changed
- Better GroupBy dunder str/repr/ipython methods by @jdegenstein in #560
- Return
GeomType
enum, fromShape.geom_type()
by @BogdanTheGeek in #559 - Add black config section to
pyproject.toml
andCONTRIBUTING.md
by @jdegenstein in #561 - Reformatted codebase and standardize on black 24.2.0 by @gumyr (2e81b9d, a5a6ccd)
- Ensure offset faces have same normal issue #564 @gumyr (568c351)
- Added tolerance to intersections issue #519 @gumyr (7dbdc88)
- Fix 2D exporter conversion lookups. by @jrmobley in #571
- Added pnt to tangent_at, fixed PositionMode @gumyr 9edf411
- Add Color to allowable types for fill_color and line_color. by @jrmobley in #573
- Add DoubleTangentArc (new 1D object) @gumyr (18aafed)
- Added Maker Coin example to the docs @gumyr e7838bf
- Adding another TTT example to the docs @gumyr a489324
- Add Face.make_bezier_surface() by @fanf2 in #552
- docs: fix typo by @nobkd in #588
- Fix 3MF color export and partial support for color import by @jdegenstein in #594
- Adding new step exporter that supports color export and labels @gumyr 5419b20
- Adding export_step, export_stl, export_gltf functions and deprecating methods @gumyr (several commits)
- Adding apothem attribute to RegularPolygon issue #585 @gumyr 24710ae
- exporters3d.py -> Enable parallel execution in export_gltf by @jdegenstein in #597
- Various fixes to Face.center_location, Face.normal_at issue #599 @gumyr
- Add color inheritance and iterable, improve Color str/repr @gumyr (3462070 and others)
New Contributors
- @BogdanTheGeek made their first contribution in #559
- @fanf2 made their first contribution in #552
- @nobkd made their first contribution in #588
Full Changelog: v0.4.0...v0.5.0
v0.4.0
What's Changed
- Added offset error handling @gumyr #480
- Fixed how trace fuses faces @gumyr #481
- Improving performance and removing random failures @gumyr #508 #509
- Added Builder error handling to guide new users @gumyr commit 3389545
- Fix offset of faces with holes by @jdegenstein in #491
- Small doc change: Area() to property area by @asteppke in #492
- Example in Documentation (updated rev1) by @42sol-eu in #490
- closing issue #493 - examples to documentation by @42sol-eu in #504
- Include rounding in Plane(face) and Plane(loc) by @jdegenstein in #511 #515
- Return volume of 0.0 for 1D and 2D shapes by @jdegenstein in #488
- change Polyline and FilletPolyline to accept 2 pts as minimum by @jdegenstein in #516
- Added Shape constructor and deprecate make_* shape methods @gumyr #521 #523 #527 #528 #529
- Allowing Shell to take a single Face @gumyr #531
- Added transition to 1D sweep @gumyr #482
- Add automatic testing workflow for arm64 MacOS by @jdegenstein in #522
- Enhanced algebra boolean operations @gumyr #537
- Enable parallel execution where available in OCCT by @jdegenstein in #542
- Add Plane.reverse() @gumyr #546
- Adding full_round operation and arc_center and radius return values @gumyr commits 745bb7d b3019fc
- Adding TTT part 24-SPO-06-Buffer Stand and Stud Wall & Platonic Solids examples @gumyr commits ef7358e 72827ff
New Contributors
Full Changelog: v0.3.0...v0.4.0
v0.3.0
What's Changed
- operations_part.py -> fix loft type checking to allow compound by @jdegenstein in #443
- add
location_at
operator ^ for edge/wire, and tighten helix default tolerance by @jdegenstein in #453 - Update GroupBy to use the generic types by @jmarzka in #448
- Support multidimensional minus in algebra mode by @voneiden in #465
- Added FAQ about glob imports by @barnabywalters in #462
- Improve chamfer performance on m1 by @MatthiasJ1 in #476
Full Changelog: v0.2.0...v0.3.0
Added Triangle and Intrinsic/Extrinsic Rotation Ordering
What's Changed
- Added new Sketch Object: Triangle -- Add any triangle to the sketch by specifying the length of any side and any two other side lengths or interior angles.
- Add rotation ordering to Location, Rotation, and Plane.rotated by @jdegenstein in #420
(optionally specify rotation ordering with Intrinsic or Extrinsic enums - Update topology.py to fix Edge.intersections edge length issue #324 by @jdegenstein in #425
- ensure parents of joints are handled properly during deep copy by @bernhard-42 in #426
- Trapezoid width is now fully controlled by width param by @jdegenstein in #430
Full Changelog: v0.1.1...v0.2.0
pypi2
Initial Release
Trial release in order to publish to pypi.