Clipper Changelog

What's new in Clipper 6.4.2

Mar 23, 2017
  • Released on 27 February 2017 (Rev 512)
  • Several minor bug fixes: #152 #160 #161 #162

New in Clipper 6.4 (Sep 29, 2016)

  • Numerous generally minor bugfixes.

New in Clipper 6.2.1 (Nov 1, 2014)

  • Bugfix in ClipperOffset.Execute where the Polytree.IsHole property was returning incorrect values with negative offsets
  • Very minor improvement to join rounding in ClipperOffset
  • Fixed CPP OpenGL demo.

New in Clipper 6.2.0 (Nov 1, 2014)

  • The ZFillFunction (custom callback function) has had its parameters changed.
  • Curves demo removed (temporarily).
  • Deprecated functions have been removed.

New in Clipper 6.1.5 (Nov 1, 2014)

  • Improved the joining of output polygons sharing a common edge when those common edges are horizontal.
  • Fixed a bug in ClipperOffset.AddPath() which would produce incorrect solutions when open paths were added before closed paths.
  • Minor code tidy and performance improvement

New in Clipper 6.1.4 (Nov 1, 2014)

  • Fixed bugs in MinkowskiSum
  • Fixed minor bug when using Clipper.ForceSimplify.
  • Modified use_xyz callback so that all 4 vertices around an intersection point are now passed to the callback function.

New in Clipper 6.1.3 (Jan 22, 2014)

  • Fixed potential endless loop condition when adding open paths to Clipper.
  • Fixed missing implementation of SimplifyPolygon function in C++ code.
  • Fixed incorrect upper range constant for polygon coordinates in Delphi code.
  • Added PointInPolygon function.
  • Overloaded MinkowskiSum function to accommodate multi-contour paths.

New in Clipper 6.1.2 (Jan 22, 2014)

  • Fixed broken C++ header file.
  • Minor improvement to joining polygons.

New in Clipper 6.1.1 (Dec 13, 2013)

  • Fixed a couple of bugs affecting open paths that could raise unhandled exceptions.

New in Clipper 6.1.0 (Dec 13, 2013)

  • Deleted: Previously deprecated code has been removed.
  • Modified: The OffsetPaths function is now deprecated as it has been replaced by the ClipperOffset class which is much more flexible.
  • Bugfixes: Several minor bugs have been fixed including occasionally an incorrect nesting within the PolyTree structure.

New in Clipper 6.0.0 (Oct 30, 2013)

  • Added: Open path (polyline) clipping. A new 'Curves' demo application showcases this (see the 'Curves' directory).
  • Update: Major improvement in the merging of shared/collinear edges in clip solutions (see Execute).
  • Added: The IntPoint structure now has an optional 'Z' member. (See the precompiler directive use_xyz.)
  • Added: Users can now force Clipper to use 32bit integers (via the precompiler directive use_int32) instead of using 64bit integers.
  • Modified: To accommodate open paths, the Polygon and Polygons structures have been renamed Path and Paths respectively. The AddPolygon and AddPolygons methods of the ClipperBase class have been renamed AddPath and AddPaths respectively. Several other functions have been similarly renamed.
  • Modified: The PolyNode Class has a new IsOpen property.
  • Modified: The Clipper class has a new ZFillFunction property.
  • Added: MinkowskiSum and MinkowskiDiff functions added.
  • Added: Several other new functions have been added including
  • PolyTreeToPaths, OpenPathsFromPolyTree and ClosedPathsFromPolyTree.
  • Added: The Clipper constructor now accepts an optional InitOptions parameter to simplify setting properties.
  • Bugfixes: Numerous minor bugs have been fixed.
  • Deprecated: Version 6 is a major upgrade from previous versions and quite a number of changes have been made to exposed structures and functions. To minimize inconvenience to existing library users, some code has been retained and some added to maintain backward compatibility. However, because this code will be removed in a future update, it has been marked as deprecated and a precompiler directive use_deprecated has been defined.

New in Clipper 5.1.6 (May 24, 2013)

  • BugFix: CleanPolygon function was buggy.
  • Changed: The behavior of the 'miter' JoinType has been changed so that when squaring occurs, it's no longer extended up to the miter limit but is squared off at exactly 'delta' units. (This improves the look of mitering with larger limits at acute angles.)
  • Added: New OffsetPolyLines function
  • Update: Minor code refactoring and optimisations

New in Clipper 5.1.5 (May 7, 2013)

  • Added: ForceSimple property to Clipper class
  • Update: Minor code optimizations and trivial bug fixes
  • Update: Improved documentation

New in Clipper 5.1.4 (Mar 26, 2013)

  • Update: CleanPolygon function enhanced.
  • Update: Documentation improved.

New in Clipper 5.1.3 (Mar 14, 2013)

  • Bugfix: Minor bugfixes.
  • Update: Documentation significantly improved.

New in Clipper 5.1.2 (Feb 26, 2013)

  • Bugfix: PolyNode class was missing a constructor.
  • Update: The MiterLimit parameter in the OffsetPolygons function has been renamed Limit and can now also be used to limit the number of vertices used to construct arcs when JoinType is set to jtRound.

New in Clipper 5.1.0 (Feb 18, 2013)

  • Update: ExPolygons has been replaced with the PolyTree & PolyNode classes to more fully represent the parent-child relationships of the polygons returned by Clipper.
  • Added: New CleanPolygon and CleanPolygons functions.
  • Bugfix: Another orientation bug fixed.

New in Clipper 5.0.3 (Jan 12, 2013)

  • Bugfix: Area function bug (only present in C++ code).

New in Clipper 5.0.2 (Jan 3, 2013)

  • Bugfix: Significant fixes in and tidy of the internal Int128 class (which is used only when polygon coordinate values are greater than ±0x3FFFFFFF (~1.07e9)).
  • Update: The Area algorithm has been updated and is faster.
  • Update: Documentation updates. The newish but undocumented 'CheckInputs' parameter of the OffsetPolygons function has been renamed 'AutoFix' and documented too. The comments on rounding have also been improved (ie clearer and expanded).

New in Clipper 4.10.0 (Dec 27, 2012)

  • Bugfix: Orientation bugs should now be resolved
  • Bugfix: Bug in Int128 class

New in Clipper 4.9.7 (Nov 29, 2012)

  • Bugfix: Bug that very rarely returned the wrong polygon orientation.
  • Bugfix: Obscure bug affecting OffsetPolygons when using jtRound for the JoinType parameter and when polygons also contain very large coordinate values (> +/-100000000000).

New in Clipper 4.9.6 (Nov 9, 2012)

  • Bugfix: Another obscure bug related to joining polygons.

New in Clipper 4.9.4 (Nov 2, 2012)

  • Bugfix: Bugs in Int128 class occasionally causing wrong orientations.
  • Bugfix: Further fixes related to joining polygons.

New in Clipper 4.9.3 (Nov 1, 2012)

  • Bugfix: Bugs in Int128 class occasionally causing wrong orientations

New in Clipper 4.9.0 (Nov 1, 2012)

  • Bugfix: Obscure bug related to joining polygons.

New in Clipper 4.8.8 (Aug 30, 2012)

  • Bugfix: Fixed bug in OffsetPolygons function introduced in version 4.8.5.

New in Clipper 4.8.7 (Aug 30, 2012)

  • Bugfix: ReversePolygon function in C++ translation was broken.
  • Bugfix: Two obscure bugs affecting orientation fixed too.

New in Clipper 4.8.6 (Aug 13, 2012)

  • Bugfix: Potential for memory overflow errors when using
  • ExPolygons structure.
  • Bugfix: The polygon coordinate range has been reduced to
  • 0x3FFFFFFFFFFFFFFF (4.6e18).
  • Update: ReversePolygons function was misnamed ReversePoints in C++.
  • Update: SimplifyPolygon function now takes a PolyFillType parameter.

New in Clipper 4.8.5 (Jul 16, 2012)

  • Bugfix: Potential for memory overflow errors in OffsetPolygons().

New in Clipper 4.8.4 (Jun 2, 2012)

  • Bugfix: Another obscure bug affecting ExPolygons structure.

New in Clipper 4.8.3 (May 28, 2012)

  • Bugfix: Obscure bug causing incorrect removal of a vertex.

New in Clipper 4.8.2 (May 21, 2012)

  • Bugfix: Obscure bug could cause an exception when using ExPolygon structure.

New in Clipper 4.8.1 (May 14, 2012)

  • Update: Cody tidy and minor bug fixes.

New in Clipper 4.8.0 (Apr 30, 2012)

  • Bugfix: Occasional errors in orientation fixed.
  • Update: Added notes on rounding to the documentation.

New in Clipper 4.7.6 (Apr 11, 2012)

  • Fixed a bug in Orientation function (affecting C# translations only).
  • Minor documentation update.

New in Clipper 4.7.5 (Mar 28, 2012)

  • Fixed a recently introduced bug that occasionally caused an unhandled exception in C++ and C# translations.

New in Clipper 4.7.4 (Mar 15, 2012)

  • Bugfix: Another minor bugfix.

New in Clipper 4.7.3 (Mar 7, 2012)

  • Bugfix: Another minor bugfix.

New in Clipper 4.7.2 (Mar 7, 2012)

  • Bugfix: Fixed bug introduced in ver 4.7 which sometimes caused an exception if ExPolygon structure was passed to Clipper's Execute method.

New in Clipper 4.7.1 (Mar 7, 2012)

  • Bugfix: Rare crash when JoinCommonEdges joined polygons that 'cancelled' each other.
  • Bugfix: Clipper's internal Orientation method occasionally returned wrong result.
  • Update: Improved C# code

New in Clipper 4.7 (Mar 7, 2012)

  • Improved the joining of output polygons sharing a common edge.

New in Clipper 4.6.6 (Mar 7, 2012)

  • Bugfix: Another obscure bug occasionally causing incorrect polygon orientation.

New in Clipper 4.6.5 (Mar 7, 2012)

  • Bugfix: Obscure bug occasionally causing incorrect hole assignment in ExPolygon structure.

New in Clipper 4.6.4 (Mar 7, 2012)

  • Added: SimplifyPolygon and SimplifyPolygons functions.

New in Clipper 4.6.3 (Mar 7, 2012)

  • Bugfix: Fixed another minor mitering bug in OffsetPolygons.

New in Clipper 4.6.2 (Mar 7, 2012)

  • Bugfix: Fixed a rare bug in the orientation of polygons returned by Clipper's Execute() method.
  • Bugfix: Previous update introduced a mitering bug in the OffsetPolygons function.

New in Clipper 4.6 (Oct 31, 2011)

  • Added: Support for Positive and Negative polygon fill
  • types (in addition to the EvenOdd and NonZero fill types).
  • Bugfix: The OffsetPolygons function was generating the
  • occasional artefact when 'shrinking' polygons.

New in Clipper 4.5.5 (Oct 31, 2011)

  • Bugfix: Fixed an obscure bug in Clipper's JoinCommonEdges
  • method.
  • Update: Replaced IsClockwise function with Orientation
  • function. The orientation issues affecting OffsetPolygons
  • should now be finally resolved.
  • Change: The Area function once again returns a signed value.

New in Clipper 4.5.1 (Oct 31, 2011)

  • Deleted: The UseFullCoordinateRange property has been
  • deleted since integer range is now managed implicitly.
  • BugFix: Minor bug in OffsetPolygon mitering.
  • Change: C# JoinType enum moved from Clipper class to
  • ClipperLib namespace.
  • Change: The Area function now returns the absolute area
  • (irrespective of orientation).
  • Change: The IsClockwise function now requires a second
  • parameter - YAxisPositiveUpward - to accommodate displays
  • with Y-axis oriented in either direction

New in Clipper 4.4.4 (Oct 31, 2011)

  • BugFix: fixed a minor rounding issue in OffsetPolygons
  • function (affected C++ & C# translations).
  • BugFix: fixed a minor bug in OffsetPolygons' function
  • declaration (affected C++ translation only).
  • Change: 'clipper' namespace changed to 'ClipperLib'
  • namespace in both C++ and C# code to remove the ambiguity
  • between the Clipper class and the namespace. (This also
  • required numerous updates to the accompanying demos.)

New in Clipper 4.4.3 (Oct 31, 2011)

  • BugFix: fixed a minor rounding issue in OffsetPolygons
  • function (affected C++ & C# translations).
  • BugFix: fixed a minor bug in OffsetPolygons' function
  • declaration (affected C++ translation only).
  • Change: 'clipper' namespace changed to 'ClipperLib'
  • namespace in both C++ and C# code to remove the ambiguity
  • between the Clipper class and the namespace. (This also
  • required numerous updates to the accompanying demos.)

New in Clipper 4.4.2 (Aug 26, 2011)

  • BugFix: a minor bugfixes in Clipper.
  • Update: the OffsetPolygons function has been significantly improved by offering 4 different join styles.

New in Clipper 4.4.0 (Aug 26, 2011)

  • BugFix: A number of minor bugs have been fixed that mostly affected the new ExPolygons structure.

New in Clipper 4.3.0 (Aug 26, 2011)

  • New: ExPolygons structure that explicitly associates 'hole' polygons with their 'outer' container polygons.
  • New: Execute method overloaded so the solution parameter can now be either Polygons or ExPolygons.
  • BugFix: Fixed a rare bug in solution polygons orientation.

New in Clipper 4.2.8 (Aug 26, 2011)

  • Update: JoinCommonEdges() improved once more.
  • BugFix: Several minor bugs fixed.

New in Clipper 4.2.6 (Aug 26, 2011)

  • Bugfix: minor bug in SlopesEqual function.
  • Update: Merging of output polygons sharing common edges has been significantly improved

New in Clipper 4.2.4 (Aug 26, 2011)

  • Input polygon coordinates can now contain the full range of signed 64bit integers (ie +/-9,223,372,036,854,775,807). This means that floating point values can be converted to and from
  • Clipper's 64bit integer coordinates structure (IntPoint) and still retain a precision of up to 18 decimal places. However, since the large-integer math that supports this expanded range imposes a small cost on performance (~15%), a new property
  • UseFullCoordinateRange has been added to the Clipper class to allow users the choice of whether or not to use this expanded coordinate range. If this property is disabled, coordinate values are restricted to +/-1,500,000,000.

New in Clipper 4.2 (Aug 26, 2011)

  • JoinCommonEdges() code significantly improved plus other minor improvements.

New in Clipper 4.1.2 (Aug 26, 2011)

  • Update: Minor code tidy.
  • Bugfix: Possible endless loop in JoinCommonEdges() in clipper.pas.

New in Clipper 4.1.1 (Aug 26, 2011)

  • Update: All polygon coordinates are now stored as 64bit integers (though they're still restricted to range -1.5e9 to +1.5e9 pending the inclusion of code supporting 64bit math).
  • Change: AddPolygon and AddPolygons methods now return boolean values.
  • Bugfix: Bug in JoinCommonEdges() caused potential endless loop.
  • Bugfix: Bug in IsClockwise(). (C++ code only)

New in Clipper 4.0 (Aug 26, 2011)

  • Clipper 4 is a major rewrite of earlier versions. The biggest change is that floating point values are no longer used, except for the storing of edge slope values. The main benefit of this is the issue of numerical robustness has been
  • addressed. Due to other major code improvements Clipper v4 is approximately 40% faster than Clipper v3.
  • The AddPolyPolygon method has been renamed to AddPolygons.
  • The IgnoreOrientation property has been removed.
  • The clipper_misc library has been merged back into the main clipper library.

New in Clipper 1.4s (Jul 11, 2010)

  • Bugfix: Some code in BuildResult() in clipper.cpp was being executed out of order.

New in Clipper 1.4r (Jul 11, 2010)

  • Bugfix: The returned orientation of polygons (clockwise vs counter-clockwise) was not always correct.
  • Improvement: Removed occasional overlapping co-linear segments (empty spikes) from result polygons.

New in Clipper 1.4m (Jul 4, 2010)

  • Added DuplicatePointTolerance() to Clipper class
  • Very minor tweaks to clipping algorithm

New in Clipper 1.4i (Jun 18, 2010)

  • Minor improvements to C++ code

New in Clipper 1.4e (Jun 17, 2010)

  • Bugfix: Clipper.pas & Clipper.cpp

New in Clipper 1.4c (Jun 17, 2010)

  • Added C++ support for AGG graphics library

New in Clipper 1.4 (Jun 15, 2010)

  • Added support for AGG graphics library (currently Delphi only)

New in Clipper 1.3 (Jun 15, 2010)

  • Added clipper.dll (& support files) to provide any Windows application with to access Clipper's functionality.
  • Code tidying.

New in Clipper 1.2u (Jun 15, 2010)

  • Bugfix: In clipper.cpp, there was inadequate clean-up in the Execute method.

New in Clipper 1.2s (Jun 15, 2010)

  • Minor code tidy up.
  • Added C++ translation of clipper.pas

New in Clipper 1.2n (Jun 15, 2010)

  • Minor bug in the 'uses' clause fixed.

New in Clipper 1.2m (Jun 15, 2010)

  • Minor code tidy up.
  • Demo application updated.

New in Clipper 1.2i (Jun 15, 2010)

  • Minor code tidy up.
  • Demo application updated

New in Clipper 1.2e (Jun 15, 2010)

  • Added ForceAlternateOrientation property to TClipper class.
  • This property is only useful when operating on 'simple' polygons. It ensures that the result of the TClipper
  • Execute method will be (simple) polygons with clockwise 'outer' and counter-clockwise 'inner' (or 'hole') polygons.
  • Note: there is no danger in enabling this property when operating on complex polygons. The only downside is a very minor penalty in execution speed. (Default = false)
  • Minor code tidy up.