Tag: polygon

Polygon | new version 2.0.8 and 3.0.8

After more than one year I released new versions of my python packages for polygon handling. There are only two small changes:

  • fix to isInside() to be more reliable with nested contours
  • binaries ar now hosted at PiPY and can be installed with pip

This is my last release of Polygon2 for Python version 2.x, there will be no further updates.

Polygon | new version 2.0.7 and 3.0.7

Polygon logoAfter one and a half year I released new versions of my packages for polygon handling. There are no big changes, just some patches that have accumulated over the time. Most important are:

  • fixed some methods to work with instances of subclasses
  • fixed a bug in the SVG export (rgb), thanks to Diederik van Lierop
  • fixed a bug with exceptions in the initialisation, thanks to Diederik van Lierop
  • fixed a bug in gpc: replace on DBL_EPSILON with variable GPC_EPSILON, thanks to Peter Vavaroutsos
  • code changes to work with future versions of numpy (#define NPY_NO_DEPRECATED_API NPY_1_8_API_VERSION
  • added optional labels to SVG export and changed default colors, thanks to Diederik van Lierop (Polygon 3.0.7 only)

Packages can be found on bitbucket (Polygon2, Polygon3) and pypi (Polygon2, Polygon3).



Polygon | problems with nested and overlapping structures

Polygon is not able to handle nested and overlapping contours correctly. This is because the underlying structures and  functions of GPC have only a flat list of contours (solids and holes) without any hierarchy. A hole is not bound to a single solid but is valid for the whole Polygon. If your Polygon object contains more than one solid contour and at least one hole you may not get the results you expected.

One big problem is that it’s very easy to create such Polygon objects using standard operations! An example (thanks to Willie Maddox) illustrates this:

from Polygon import Polygon
poly3 = Polygon(((-3,-3),(-3,3),(3,3),(3,-3)))
poly2 = Polygon(((-2,-2),(-2,2),(2,2),(2,-2)))
poly1 = Polygon(((-1,-1),(-1,1),(1,1),(1,-1)))
p = poly3 - poly2 + poly1

p will be a square (poly3) with a hole (poly2) and a second solid contour (poly1) inside the hole:

 0:Contour: [0:1.0, -1.0] [1:-1.0, -1.0] [2:-1.0, 1.0] [3:1.0, 1.0]
 1:Hole : [0:2.0, 2.0] [1:-2.0, 2.0] [2:-2.0, -2.0] [3:2.0, -2.0]
 2:Contour: [0:3.0, -3.0] [1:-3.0, -3.0] [2:-3.0, 3.0] [3:3.0, 3.0]

But the hole is not bound to the outer contour, it is valid for the inner contour as well and covers it completely. If you do further operations with this Polygon the results may be wrong. p.isInside(0,0) will return False because the point is inside a hole, even if it is inside a second solid contour.

You may use the method p.simplify() to make the Polygon p valid for further operations, but you  may lose overlapping contours. The method first adds all solid contours and then substracts all holes. In the example above the inner solid contour is lost:

 0:Hole : [0:2.0, 2.0] [1:-2.0, 2.0] [2:-2.0, -2.0] [3:2.0, -2.0]
 1:Contour: [0:3.0, -3.0] [1:-3.0, -3.0] [2:-3.0, 3.0] [3:3.0, 3.0]

Unfortunately there is no easy way to change this behaviour. The main problem is located in the data structures of GPC, which is a core component of Polygon and can’t be replaced easily.

Polygon | new version 2.0.6 and 3.0.6

Polygon logoI just released the new version of my packages for polygon handling with Python 2 and Python 3. There are only small changes, the most important ones are:

  1. moved development and downloads from GitHub to bitbucket after GitHub closed the download area,
  2. renamed the packages from Polygon to Polygon2 and Polygon3 to avoid confusion, especially on pypi,
  3. added a Douglas-Peucker simplification routine to Polygon3.

From now on I will implement new features in Polygon3 while Polygon2 will receive bugfixes only.

Binary packages for Windows will follow. I currently can’t compile x64 binaries for Python 3.3 because neither my Visual Studio 2008 nor Visual Studio 2010 Express supports this. I would appreciate any help for this or the contribution of packages.



Polygon | Douglas-Peucker and Future Development

Polygon logoThe Polygon3 branch now includes an implementation of the Douglas-Peucker algorithm for line simplification by reducing the number of points. It is already included in the repository and will be part of the next release.

Now that python 3.3 is out I decided to focus much more on python-3. This has some impact on my development of python modules. Bugs in the Polygon2 branch (for python 2.x) will be fixed in the near future but new features will only be implemented in the Polygon3 branch.

Polygon | more Windows binaries

Polygon logoI just added more Windows binaries of my python package for polygon handling to the download areas on GitHub. You can download the following variants:

  • for Python 2.7 or Python 3.2 (Polygon 2 / Polygon 3)
  • for 32 or 64bit Windows (win32 / win-amd64)
  • with or without support for numpy compiled in (version 1.6.2)

Please report any problems you have with the packages.

Polygon | new versions 2.0.5 and 3.0.5

Polygon logo

I released new versions of my python package for polygon handling. The changes contain only bug fixes, no new features were added:

  • fixes some issues with recent versions of NumPy
  • fixes some issues with recent versions of Python 2 and 3
  • NumPy support is enabled by default now

Source and binary Packages for Python 2 and 3 will be available on GitHub and PyPI soon.

Polygon development moves to GitHub

The development of the python package Polygon was moved to github. I created two projects for the code for python 2 and 3.

The project pages at origo.ethz.ch will be closed soon. The information was updated at pypi.python.org, but no code was changed yet. Since there are no known bugs and feature requests right now, new versions are not scheduled for the near future.

Polygon 2: https://github.com/jraedler/Polygon2

Polygon 3: https://github.com/jraedler/Polygon3