Releases: gumyr/build123d
Releases · gumyr/build123d
v0.10.0
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 https://github.com/gumyr/build123d/commit...
v0.9.1
Notable Changes
- Enable citation of build123d in scholarly articles
Selected Other Changes
- Fix various typos by @luzpaz in #892
- Fix source typos by @luzpaz in #896
- Enable use of Oriented Bound Box with Solid.from_bounding_box by @jdegenstein in #897
- Adding Face radius and rotational_axis properties by @gumyr in fd44037
New Contributors
Full Changelog: v0.9.0...v0.9.1
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 vtkthenpip install vtk==9.3.1. See #883 for any further updates.
Breaking Changes
- Eliminate previously deprecated e.g.
Shape.export_stlmethods. 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.ymlto 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.pyby @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_svgAPI 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-stubsto [development] optional extras by @jdegenstein in #877 - Move
cadquery-ocp-stubsfrom [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.pyand 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_boxand implementoptimal=Falsein 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_perimeterfixes issue #751 by @gumyr in 8a91db6 5ed1499 312b50c - Added better explanations of what are the points lists for
Face.make_surface_from_array_of_pointsby @Jojain in #755 - Added
Face.is_planarproperty fixes issue #756 by @gumyr in 9fb163c - Adding
Compound.first_level_shapesto 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.loftby @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.Pathsupport 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.trimby @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: boolkeyword toShape.bounding_boxand 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__.pyfixes 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_zargument 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.isometricto 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
GeomTypeenum, fromShape.geom_type()by @BogdanTheGeek in #559 - Add black config section to
pyproject.tomlandCONTRIBUTING.mdby @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_atoperator ^ 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