0.6.0
PyPI: https://pypi.org/project/bezier/0.6.0/
Docs: https://bezier.readthedocs.io/en/0.6.0/
Performance Optimizations
- Added recommended performance flags for
gfortran
based on recommendations onfortran90.org
(3877982
). - Added QUADPACK to use in
curve.f90::compute_length
(985a4c0
). - Implemented curve-curve intersection completely in Fortran (e.g.
4a8f801
) which resulted in a 10x speedup when called from Python. Also implemented surface-surface intersection completely in Fortran, resulting in a 3x speedup.
Python Changes
New Features
- Added
CurvedPolygon._metadata
to track where edges originated, e.g. from a surface-surface intersection (871d23d
). This is used for sanity checking in functional tests (e253da2
). - Made speedup checks specific to the module, not all four. I.e.
bezier._HAS_SPEEDUP
was dropped in favor of five members, e.g._HAS_CURVE_SPEEDUP
(d798f66
). - Added
bezier.__author__
andbezier.__version__
attributes. - Added
bezier.get_dll()
for Windows (699e39b
). - Added
bezier/__config__.py
that addslibbezier
to%PATH%
on Windows (8538af4
). - Fortran / Cython speedups added:
_curve_speedup.pyx::subdivide_nodes
_curve_speedup.pyx::newton_refine
_curve_speedup.pyx::locate_point
_curve_speedup.pyx::elevate_nodes
_curve_speedup.pyx::get_curvature
_curve_speedup.pyx::reduce_pseudo_inverse
_curve_speedup.pyx::full_reduce
_curve_speedup.pyx::compute_length
_curve_intersection_speedup.pyx::all_intersections
_curve_intersection_speedup.pyx::free_curve_intersections_workspace
_helpers_speedup.pyx::contains_nd
_helpers_speedup.pyx::vector_close
_helpers_speedup.pyx::in_interval
_helpers_speedup.pyx::ulps_away
_surface_speedup.pyx::specialize_surface
_surface_speedup.pyx::subdivide_nodes
_surface_speedup.pyx::compute_edge_nodes
_surface_intersection_speedup.pyx::newton_refine
_surface_intersection_speedup.pyx::locate_point
_surface_intersection_speedup.pyx::surface_intersections
_surface_intersection_speedup.pyx::free_surface_intersections_workspace
Breaking Changes
Curve.intersect()
returnss-t
parameters rather thanx-y
values (c309998
).Surface.intersect()
returns a list with a singleSurface
when one of the two surfaces is contained in the other (05b1fd9
).Surface.is_valid
will only returnTrue
if the mapB(s, t)
determined by the surface has everywhere positive Jacobian. Previously a negative Jacobian was also allowed (260fb51
).- Removed data members from
Curve
: - Removed data members from
Surface
: - Remove
dimension
argument in_curve_speedup.pyx::elevate_nodes
since it can be inferred fromnodes
(06501c5
).
ABI Changes
New Features
- Fully implemented curve-curve intersection (as
curve_intersection.h::curve_intersections
) and surface-surface intersection (assurface_intersection.h::surface_intersections
) at the ABI level. - Added the
surface_intersection.h
header file and implementations for the described functions (fafd9ff
). - Newly added functions
curve.h::subdivide_nodes_curve
(efb3ce6
)curve.h::newton_refine_curve
(2257344
)curve.h::locate_point_curve
(2121101
,32b0fa9
)curve.h::elevate_nodes_curve
(b03fc28
)curve.h::get_curvature
(69cb2f8
)curve.h::reduce_pseudo_inverse
(7c3db17
)curve.h::full_reduce
(4abd309
)curve.h::compute_length
(985a4c0
,7e71b20
)curve_intersection.h::curve_intersections
(c92f98d
)curve_intersection.h::free_curve_intersections_workspace
(c92f98d
)helpers.h::contains_nd
(36f4b5e
)helpers.h::vector_close
(9f3716a
)helpers.h::in_interval
(3c0af5d
)helpers.h::ulps_away
(0197237
)surface.h::specialize_surface
(eb8693e
,fcd5bad
)surface.h::subdivide_nodes_surface
(6027210
,4fc5f2a
,8beb1ac
,0b2b1f3
,d27b86f
,88c302b
)surface.h::compute_edge_nodes
(2d02590
,f86649a
)surface_intersection.h::newton_refine_surface
(93c288d
)surface_intersection.h::locate_point_surface
(325ea47
,ca134e6
,bf69852
)surface_intersection.h::surface_intersections
surface_intersection.h::free_surface_intersections_workspace
- Added
status.h
with an enum for failure states. Each Fortran procedure that returns a status documents the possible values and if each value is set directly or by a called procedure (9fc8575
,c2accf7
).
Breaking Changes
- Removed functions
curve.h::specialize_curve_generic
(d52453b
)curve.h::specialize_curve_quadratic
(d52453b
)curve_intersection.h::from_linearized
(d62e462
)curve_intersection.h::bbox_line_intersect
(72c0179
)curve_intersection.h::linearization_error
(4a3378b
)curve_intersection.h::segment_intersection
(4060590
)curve_intersection.h::parallel_different
(df3e195
)
- Renamed functions
- Replaced
degree
withnum_nodes (== degree + 1)
in functions that operate on curves:
Miscellany
- Added documentation for "native extensions" in
DEVELOPMENT
(2f9f2c4
). - Overhauled
native-libraries
doc with subsections for OS X and Windows (bfa75ee
,72005fb
, etc.). - Added Fortran unit tests (
758bdd1
,e8afba7
,3164365
, etc.). - Began testing in Mac OS X on Travis (
9ac5e8e
,85f7619
, etc.). - Added a workaround (
include/bezier/_bool_patch.h
) for the missing support forbool
in old MSVC versions that are required to work with Python 2.7 (5577178
).