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/__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::elevate_nodes_curve
(b03fc28)curve.h::get_curvature
(69cb2f8)curve.h::reduce_pseudo_inverse
(7c3db17)curve.h::full_reduce
(4abd309)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::subdivide_nodes_surface
(6027210, 4fc5f2a, 8beb1ac, 0b2b1f3, d27b86f, 88c302b)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.).
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).