0.6.0
Performance Optimizations
Added recommended performance flags for
gfortranbased 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._metadatato 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_SPEEDUPwas dropped in favor of five members, e.g._HAS_CURVE_SPEEDUP(d798f66).Added
bezier.__author__andbezier.__version__attributes.Added
bezier/__config__.pythat addslibbezierto%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-tparameters rather thanx-yvalues (c309998).Surface.intersect()returns a list with a singleSurfacewhen one of the two surfaces is contained in the other (05b1fd9).Surface.is_validwill only returnTrueif 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
dimensionargument in_curve_speedup.pyx::elevate_nodessince 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.hheader 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_intersectionssurface_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
degreewithnum_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 forboolin old MSVC versions that are required to work with Python 2.7 (5577178).