This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description

About

Pyclipper is a Cython wrapper exposing public functions and classes of the C++ translation of the Angus Johnson’s Clipper library (ver. 6.2.1).

Pyclipper releases were tested with Python 2.7 and 3.4 on Linux (Ubuntu 14.04, x64) and Windows (8.1, x64).

Source code is available on GitHub. The package is published on PyPI.

About Clipper

Clipper - an open source freeware library for clipping and offsetting lines and polygons.

The Clipper library performs line & polygon clipping - intersection, union, difference & exclusive-or, and line & polygon offsetting. The library is based on Vatti’s clipping algorithm.

Angus Johnson’s Clipper library

Install

Dependencies

Cython dependency is optional. Cpp sources generated with Cython are available in releases.

Note on using the setup.py:

setup.py operates in 2 modes that are based on the presence of the dev file in the root of the project.

  • When dev is present, Cython will be used to compile the .pyx sources. This is the development mode (as you get it in the git repository).
  • When dev is absent, C/C++ compiler will be used to compile the .cpp sources (that were prepared in in the development mode). This is the distribution mode (as you get it on PyPI).

This way the package can be used without or with an incompatible version of Cython.

The idea comes from Matt Shannon’s bandmat library.

From PyPI

Cython not required.

pip install pyclipper

From source

Cython required.

Clone the repository:

git clone git@github.com:greginvm/pyclipper.git

Install:

python setup.py install

After every modification of .pyx files compile with Cython:

python setup.py build_ext --inplace

Clippers’ preprocessor directives

Clipper can be compiled with the following preprocessor directives: use_int32, use_xyz, use_lines and use_deprecated. Among these the use_int32 and use_lines can be used with Pyclipper.

  • use_int32 - when enabled 32bit ints are used instead of 64bit ints. This improve performance but coordinate values are limited to the range +/- 46340. In Pyclipper this directive is disabled by default.
  • use_lines - enables line clipping. Adds a very minor cost to performance. In Pyclipper this directive is enabled by default (since version 0.9.2b0).

In case you would want to change these settings, clone this repository and change the define_macros collection (setup.py, pyclipper extension definition). Add a set like ('use_int32', 1) to enable the directive, or remove the set to disable it. After that you need to rebuild the package.

How to use

This wrapper library tries to follow naming conventions of the original library.

  • ClipperLib namespace is represented by the pyclipper module,
  • classes Clipper and ClipperOffset -> Pyclipper and PyclipperOffset,
  • when Clipper is overloading functions with different number of parameters or different types (eg. Clipper.Execute, one function fills a list of paths the other PolyTree) that becomes Pyclipper.Execute and Pyclipper.Execute2.

Basic clipping example (based on Angus Johnson’s Clipper library):

import pyclipper

subj = (
    ((180, 200), (260, 200), (260, 150), (180, 150)),
    ((215, 160), (230, 190), (200, 190))
)
clip = ((190, 210), (240, 210), (240, 130), (190, 130))

pc = pyclipper.Pyclipper()
pc.AddPath(clip, pyclipper.PT_CLIP, True)
pc.AddPaths(subj, pyclipper.PT_SUBJECT, True)

solution = pc.Execute(pyclipper.CT_INTERSECTION, pyclipper.PFT_EVENODD, pyclipper.PFT_EVENODD)

# solution (a list of paths): [[[240, 200], [190, 200], [190, 150], [240, 150]], [[200, 190], [230, 190], [215, 160]]]

Basic offset example:

import pyclipper

subj = ((180, 200), (260, 200), (260, 150), (180, 150))

pco = pyclipper.PyclipperOffset()
pco.AddPath(subj, pyclipper.JT_ROUND, pyclipper.ET_CLOSEDPOLYGON)

solution = pco.Execute(-7.0)

# solution (a list of paths): [[[253, 193], [187, 193], [187, 157], [253, 157]]]

The Clipper library uses integers instead of floating point values to preserve numerical robustness. If you need to scale coordinates of your polygons, this library provides helper functions scale_to_clipper() and scale_from_clipper() to achieve that.

Migrating from Pyclipper 0.9.3b0

In previous version of Pyclipper (0.9.3b0) polygons could be automatically scaled using the SCALING_FACTOR variable. This was removed in version 1.0.0 due to inexact conversions related to floating point operations. This way the library now provides the original numerical robustness of the base library.

The SCALING_FACTOR removal breaks backward compatibility. For an explanation and help with migration, see https://github.com/greginvm/pyclipper/wiki/Deprecating-SCALING_FACTOR.

Authors

  • The Clipper library is written by Angus Johnson,
  • This wrapper was initially written by Maxime Chalton,
  • Adaptions to make it work with version 5 written by Lukas Treyer,
  • Adaptions to make it work with version 6.2.1 and PyPI package written by Gregor Ratajc,
  • SCALING_FACTOR removal and additions to documentation by Michael Schwarz (@Feuermurmel),
  • Bug fix sympy.Zero is not a collection by Jamie Bull (@jamiebull1),
  • Travis CI and Appveyor CI integration for continuous builds of wheel packages by Cosimo Lupo (@anthrotype).

The package is maintained by Gregor Ratajc.

License

  • Pyclipper is available under MIT license.
  • The core Clipper library is available under Boost Software License. Freeware for both open source and commercial applications.

Changelog

1.0.3

  • added Travis CI and Appveyor CI to build wheel packages (thanks to @anthrotype)

1.0.2

  • bug fix: sympy.Zero recognized as a collection (thanks to @jamiebull1)

1.0.0

  • (breaks backwards compatibility) removes SCALING_FACTOR (thanks to @Feuermurmel)

0.9.3b0

  • Applied SCALING_FACTOR to the relevant function parameters and class properties
  • Refactored tests

0.9.2b1

  • bug fix: Fix setting of the PyPolyNode.IsHole property

0.9.2b0

  • enable preprocessor directive use_lines by default,
  • bug fix: PyPolyNode.Contour that is now one path and not a list of paths as it was previously.
Release History

Release History

1.0.5

This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

1.0.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

1.0.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.9.3b0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.9.2b1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.9.2b0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.9.1b0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
pyclipper-1.0.5-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (263.1 kB) Copy SHA256 Checksum SHA256 cp27 Wheel Sep 3, 2016
pyclipper-1.0.5-cp27-cp27m-manylinux1_i686.whl (525.7 kB) Copy SHA256 Checksum SHA256 cp27 Wheel Sep 3, 2016
pyclipper-1.0.5-cp27-cp27m-manylinux1_x86_64.whl (543.8 kB) Copy SHA256 Checksum SHA256 cp27 Wheel Sep 3, 2016
pyclipper-1.0.5-cp27-cp27mu-manylinux1_i686.whl (525.7 kB) Copy SHA256 Checksum SHA256 cp27 Wheel Sep 3, 2016
pyclipper-1.0.5-cp27-cp27mu-manylinux1_x86_64.whl (543.8 kB) Copy SHA256 Checksum SHA256 cp27 Wheel Sep 3, 2016
pyclipper-1.0.5-cp27-cp27m-win32.whl (85.5 kB) Copy SHA256 Checksum SHA256 cp27 Wheel Sep 3, 2016
pyclipper-1.0.5-cp27-cp27m-win_amd64.whl (103.7 kB) Copy SHA256 Checksum SHA256 cp27 Wheel Sep 3, 2016
pyclipper-1.0.5-cp33-cp33m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (262.9 kB) Copy SHA256 Checksum SHA256 cp33 Wheel Sep 3, 2016
pyclipper-1.0.5-cp33-cp33m-manylinux1_i686.whl (527.0 kB) Copy SHA256 Checksum SHA256 cp33 Wheel Sep 3, 2016
pyclipper-1.0.5-cp33-cp33m-manylinux1_x86_64.whl (545.7 kB) Copy SHA256 Checksum SHA256 cp33 Wheel Sep 3, 2016
pyclipper-1.0.5-cp33-cp33m-win32.whl (84.1 kB) Copy SHA256 Checksum SHA256 cp33 Wheel Sep 3, 2016
pyclipper-1.0.5-cp33-cp33m-win_amd64.whl (97.0 kB) Copy SHA256 Checksum SHA256 cp33 Wheel Sep 3, 2016
pyclipper-1.0.5-cp34-cp34m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (263.2 kB) Copy SHA256 Checksum SHA256 cp34 Wheel Sep 3, 2016
pyclipper-1.0.5-cp34-cp34m-manylinux1_i686.whl (538.1 kB) Copy SHA256 Checksum SHA256 cp34 Wheel Sep 3, 2016
pyclipper-1.0.5-cp34-cp34m-manylinux1_x86_64.whl (557.8 kB) Copy SHA256 Checksum SHA256 cp34 Wheel Sep 3, 2016
pyclipper-1.0.5-cp34-cp34m-win32.whl (84.1 kB) Copy SHA256 Checksum SHA256 cp34 Wheel Sep 3, 2016
pyclipper-1.0.5-cp34-cp34m-win_amd64.whl (97.1 kB) Copy SHA256 Checksum SHA256 cp34 Wheel Sep 3, 2016
pyclipper-1.0.5-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (262.6 kB) Copy SHA256 Checksum SHA256 cp35 Wheel Sep 3, 2016
pyclipper-1.0.5-cp35-cp35m-manylinux1_i686.whl (536.0 kB) Copy SHA256 Checksum SHA256 cp35 Wheel Sep 3, 2016
pyclipper-1.0.5-cp35-cp35m-manylinux1_x86_64.whl (554.3 kB) Copy SHA256 Checksum SHA256 cp35 Wheel Sep 3, 2016
pyclipper-1.0.5-cp35-cp35m-win32.whl (83.5 kB) Copy SHA256 Checksum SHA256 cp35 Wheel Sep 3, 2016
pyclipper-1.0.5-cp35-cp35m-win_amd64.whl (95.3 kB) Copy SHA256 Checksum SHA256 cp35 Wheel Sep 3, 2016
pyclipper-1.0.5.zip (117.7 kB) Copy SHA256 Checksum SHA256 Source Sep 3, 2016

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS HPE HPE Development Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting