Boolean operations on paths based on a super fast polygon clipper library by Angus Johnson.
You can download the latest version from:
https://github.com/typemytype/booleanOperations/releases/latest.
Pip is the recommended tool to download and install booleanOperations.
If your Python doesn't come with pip pre-installed, you can install it by downloading the official get-pip.py, and running it as a normal script:
python get-pip.py
To install the booleanOperations package with pip, you do:
pip install --find-links https://github.com/typemytype/booleanOperations/releases/latest booleanOperations
Pip will first try to download the Python wheel archive that was compiled for your platform and Python version.
For the current version, wheels are only available for Python 2.7 on OS X (10.6 and above) and Windows (32-bit).
If the wheel isn't available, pip will attempt to compile the package from the source distribution (.tar.gz
or .zip
).
The included setup.py
file operates in one of two modes depending on the presence/absence of an empty file named dev
in the project root directory.
When the file is present, as in the Github repository, then Cython is required in order to convert the .pyx
files to .cpp
.
In the source distributions this 'dev' file is missing, and pre-generated .cpp
files are present instead.
This mechanism allows source distributions to be installed on systems which don't have Cython, or have a different versions (the idea comes from https://github.com/MattShannon/bandmat).
In both cases a C++ compiler is needed to build the Python extension module.
For example, to compile it in the same location as the Python sources:
python setup.py build_ext --inplace
Containing a BooleanOperationManager
handling all boolean operations on paths. Paths must be similar to defcon
, robofab
contours. A manager draws the result in a pointPen
.
from booleanOperations import BooleanOperationManager
manager = BooleanOperationManager()
Create a BooleanOperationManager
.
Performs a union on all contours
and draw it in the pointPen
.
(this is a what a remove overlaps does)
Knock out the clipContours
from the contours
and draw it in the pointPen
.
Draw only the overlaps from the contours
with the clipContours
and draw it in the pointPen
.
Draw only the parts that not overlaps from the contours
with the clipContours
and draw it in the pointPen
.
Returning all intersection for the given contours
A glyph like object with boolean powers.
from booleanOperations.booleanGlyph import BooleanGlyph
booleanGlyph = BooleanGlyph(sourceGlyph)
Create a BooleanGlyph
object from sourceGlyph
. This is a very shallow glyph object with basic support.
Perform a union with the other
. Other must be a glyph or BooleanGlyph
object.
result = BooleanGlyph(glyph).union(BooleanGlyph(glyph2))
result = BooleanGlyph(glyph) | BooleanGlyph(glyph2)
Perform a difference with the other
. Other must be a glyph or BooleanGlyph
object.
result = BooleanGlyph(glyph).difference(BooleanGlyph(glyph2))
result = BooleanGlyph(glyph) % BooleanGlyph(glyph2)
Perform a intersection with the other
. Other must be a glyph or BooleanGlyph
object.
result = BooleanGlyph(glyph).intersection(BooleanGlyph(glyph2))
result = BooleanGlyph(glyph) & BooleanGlyph(glyph2)
Perform a xor with the other
. Other must be a glyph or BooleanGlyph
object.
result = BooleanGlyph(glyph).xor(BooleanGlyph(glyph2))
result = BooleanGlyph(glyph) ^ BooleanGlyph(glyph2)
Perform a union on it self. This will remove all overlapping contours and self intersecting contours.
result = BooleanGlyph(glyph).removeOverlap()
The name of the sourceGlyph
.
The unicodes of the sourceGlyph
.
The width of the sourceGlyph
.
The lib of the sourceGlyph
.
The note of the sourceGlyph
.
List the contours of the glyph.
List the components of the glyph.
List the anchors of the glyph.