Breaking Changes
- Convert Shape methods to properties:
is_null,is_valid,shape_type. Unfortunately it isn't possible to keep the old method and deprecate it when switching over to properties. The fix is just to remove the()e.g.is_valid() -> is_valid.
Notable Changes
- Added a new Shape property -
global_locationwhich will provide the location of a part relative to the global coordinate system when it's deep within an assembly - Some of the
to_***methods have been deprecated. For exampleVector.to_tuple()has been replaced withtuple(Vector) - Added a new operation draft with the
Solid.draftinstance method. It allows you to create parts that are going to be cast or moulded requiring a draft angle on the vertical sides. - There is now a build123d roadmap - see here: https://github.com/gumyr/build123d/wiki/Roadmap
- Added a
Face.wrapmethod by @gumyr. This method is useful for applying flat features—such as decorative patterns, cutouts, or boundary outlines—onto curved or freeform surfaces while retaining their original proportions. - @jwagenet added four new 1D lines
ArcArcTangentLine,ArcArcTangentArc,PointArcTangentLine, andPointArcTangentArc. They all implement solvers to find intersections, tangent directions. NOTE: These new 1D line objects are already in deprecated status as there are plans to unify and extend these types of curves into fewer objects. - @jwagenet has created a new section on Topology Selection and Exploration of the docs: https://build123d.readthedocs.io/en/latest/topology_selection.html
- When adding Shapes (without using the builders or,
Part,Sketch,Curve) build123d will now typically create aShapeList. This is meant to improve the user experience related to the breaking change in v0.9.0. With the new releaseFace + Facereturns:ShapeList(# of two faces). - @jdegenstein added a new constrained surface creation method
Face.make_surface_patch - @gongfan99 added
Face.make_gordon_surfacemethod for gordon surface creation along with a new pure python dependency of build123d called ocp_gordon - @gumyr added a new
BlendCurveobject for blending with up to C2 continuity between two curves
Selected Other Changes
- make
Axis.positionandAxis.directionproperties by @snoyer in #905 - Adding
Face.radii,Face.is_circular_convex,Face.is_circular_concave, renameFace.rotational_axistoFace.axis_of_rotationby @gumyr in 0208621 - add
alignparameter toimport_svgby @snoyer in #908 - Add a new TestCase that asserts that examples exit successfully. by @fischman in #910
- Run tests in parallel by default, and update CONTRIBUTING.md by @fischman in #911
- Switch to lib3mf official pypi release from py_lib3mf by @jdegenstein in #917
- Update type signature for component getters by @mingmingrr in #923
- Avoid deepcopy'ing Shape.topo_parent. by @fischman in #914
- Fixing examples, PR #910 by @gumyr aeb6b32
- Improve topo_explore_connected_faces to remove duplicate faces by @gumyr in 8ba128c
- Improving geometry eq/hash to enable sets by @gumyr in 10a466f
- TooTallToby tutorials: unbreak and test. by @fischman in #912
- PolarLine() make localized direction a unit vector to only scale by length by @jwagenet in #931
- Revise docstrings for build objects by @jwagenet in #930
- Use
uvfor setup of github actions workflows by @jdegenstein in #934 - Quick fix documentation issues by @jwagenet in #933
- Add very minimal support for CompSolid by @gumyr in b1f0eed
- Add new docs section "Selectors and Operators" by @jwagenet in #959
- Add Tangent objects for Point and Arc by @jwagenet in #947
- Fixed Issue #944 (section not working) by @gumyr in 8c17183
- Replacing location_at(planar) with (x_dir) by @gumyr in 0624bff
- Fixed DoubleTangentArc to create Edge by @gumyr in c4080e1
- Added Toy Truck example by @gumyr in bf62063 and others
- Fix
revolvedirection and size with negativerevolution_arcby @jwagenet in #964 - Resolve deprecation warnings of regex library by @emmanuel-ferdman in #976
- pyproject.toml -> update ipython version pin to include v9.x.x by @jdegenstein in #981
- Add explicit scipy dependency by @ndevenish in #978
- Add OCCT text alignment to
Text/make_textby @jwagenet in #960 - Adding deglob tool (tools/deglob.py) to help remove glob imports by @gumyr in 2431a05
- Added Location.center to enable sort_by, etc and add Location.mirror by @gumyr in 2a730b5 and d4cb274
- Fixed normal_at(u,v) Issue #973 by @gumyr in 0854cac and 739368c
- Fixed Issue #843 added is_forward to Edge parameter methods by @gumyr in 6590df1
- Fixed full_round Issue #972 by @gumyr in ed5e030
- Fixed normal_at bug when passed a Vector by @gumyr in 890f1a5
- Added Face.wrap feature by @gumyr in 60cd260
- Store benchmark results as CSV; artifact and printed to stdout by @jdegenstein in #982
- Rework Location constructor, improve pylint by @gumyr in 6711511
- Deprecated to_axis Issue #155 by @gumyr in 2efd21f
- Adding method Face.wrap_faces by @gumyr in ccdfda8
- Adding topo_parent to Triangle vertices by @gumyr in aecc71d
- Enabling ShapeList + Shape by @gumyr in cec429c
- Fix various typos by @luzpaz in #986
- Add timestamp argument to STEP export by @jgraichen in #984
- Adding bicycle tire example by @gumyr in 0e7ab98
- Improved Edge.param_at_point and Wire.trim - Issue #795 by @gumyr 14ef7d1
- Added draft operation by @gumyr in 30d2690 and others
- Deprecating Color.to_tuple Issue #155 by @gumyr in 83cea39
- Deprecating Axis.to_plane, refactored Plane constructor Issue #155 by @gumyr in 2e0c193
- Deprecating Vertex.to_tuple - Issue #155 by @gumyr in ce3e6ba
- Deprecating Edge/Wire.to_wire and Face.to_arcs by @gumyr in 421dc66
- Deprecating Location.to_tuple Issue #155 by @gumyr in f445de3
- Convert Shape methods to properties: is_null, is_valid, shape_type by @gumyr in 560a536
- Deprecating Shape.relocate Issue #768 by @gumyr in ffc97ef
- Adding example of making many holes by @gumyr in 6aaadd1
- Adding global_location property by @gumyr in b25b330
- Adding Face.location_at(point) and Shell.location_at(point) by @gumyr in 10a3a25 and 3f2d0a4
- Fixing fillet/chamfer parent id Issue #393 by @gumyr in 02439d3
- Improving trace - Issue #1021 by @gumyr in f3f9fd2
- Ensure tolerance is passed to wrap_edge function... by @seltzered in #999
- Bugfix: correct
ArcArcTangentArctangency with reversed start_arc in algebra mode by @jwagenet in #1000 - Bugfixes: Slot objects by @jwagenet in #1003
- Add missing example STEP and other doc fixes by @jwagenet in #1023
- tools/deglob.py -> add ability to write deglobbed change back to target file by @jdegenstein in #988
- Added continuity to topo_explore_connected_edges by @gumyr in 4795bf7
- fix PolarLine with angles that make the length negative by @danieledapo in #1040
- Add
Face.make_surface_patchconstrained surface modeling method by @jdegenstein in #1043 - Add missing docstring to
Face.make_surface_patchand enhance error checking / handling and related tests by @jdegenstein in #1048 - Update external tools to add OCP.wasm and update Yet Another CAD Viewer by @yeicor in #1050
- Add method to list available system font names and FontStyles by @jwagenet in #1051
- Enhancing loft to support a single hole by @gumyr in 9f51515
- Feature:
ArcArcTangentArcadd missing tangent cases and fix bad objects in BuildLine by @jwagenet in #1058 - Add link to bd_beams_and_bars to external tools by @mtancoigne in #1059
- Fix link format in external tools docs by @mtancoigne in #1061
- add ability to do perspective projection by @Mx-El in #1062
- operations_part.py -> reset
pending_edgesformake_brake_formedby @jdegenstein in #1069 - Feature: add
ColorLikehandling toColorby @jwagenet in #1072 - Docs should say arc when curve would be ambiguous by @paulftw in #1082
- Wire.param_at_point improved by @gumyr in 735f4ff
- Adding BlendCurve Issue #1054 by @gumyr in 6028b14
- Adding Mixin1D.curvature_comb by @gumyr in 790f0ea
- Add Edge.make_constrained_arcs by @gumyr in 8b28861
- Intersect Everything: Geometry and 0D, 1D Shape by @jwagenet in #1090
- Move from macos-13 (x86_64) to macos-15-intel (also x86_64) for relevant workflows by @jdegenstein in #1100
- feat: add Gordon surface implementation and test by @gongfan99 in #1099
- fix: make_gordon_surface supports all edge types by @gongfan99 in #1101
- Adding Airfoil 1D object by @gumyr in f67cc12
- fix: gradient error in gordon surface intersect by @gongfan99 in #1106
- Added Edge.make_constrained_lines method by @gumyr in 1368513 and others
- Updated surface modeling docs to cover new functionality by @gumyr in 4a32ced and others
- .readthedocs.yaml -> fix tab title version on dev version builds by @jdegenstein in #1111
- Deprecate some Arcs (e.g. ArcArcTangentArc) by @jdegenstein in #1097
- Improving Face creation - fix inner Wires by @gumyr in 696e99c
New Contributors
- @mingmingrr made their first contribution in #923
- @jwagenet made their first contribution in #931
- @emmanuel-ferdman made their first contribution in #976
- @ndevenish made their first contribution in #978
- @jgraichen made their first contribution in #984
- @seltzered made their first contribution in #999
- @mtancoigne made their first contribution in #1059
- @Mx-El made their first contribution in #1062
- @paulftw made their first contribution in #1082
- @gongfan99 made their first contribution in #1099
Full Changelog: v0.9.1...v0.10.0