https://github.com/typemytype/booleanOperations
Boolean operations on paths
https://github.com/typemytype/booleanOperations
Last synced: 6 months ago
JSON representation
Boolean operations on paths
- Host: GitHub
- URL: https://github.com/typemytype/booleanOperations
- Owner: typemytype
- License: mit
- Created: 2013-11-11T21:35:22.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2022-10-30T07:37:57.000Z (about 3 years ago)
- Last Synced: 2025-04-28T21:45:49.756Z (6 months ago)
- Language: Python
- Size: 454 KB
- Stars: 39
- Watchers: 9
- Forks: 18
- Open Issues: 13
-
Metadata Files:
- Readme: README.rst
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
|Build Status| |PyPI| |Python Versions|
BooleanOperations
=================
Boolean operations on paths which uses a super fast `polygon clipper
library by Angus Johnson `__.
You can download the latest version from PyPI:
https://pypi.org/project/booleanOperations.
Install
-------
`Pip `__ is the recommended tool to
install booleanOperations.
To install the latest version:
.. code:: sh
pip install booleanOperations
BooleanOperations depends on the following packages:
- `pyclipper `__: Cython wrapper for
the C++ Clipper library
- `fonttools `__
All dependencies are available on PyPI, so they will be resolved
automatically upon installing booleanOperations.
BooleanOperationManager
-----------------------
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``.
.. code:: py
from booleanOperations import BooleanOperationManager
manager = BooleanOperationManager()
BooleanOperationManager()
~~~~~~~~~~~~~~~~~~~~~~~~~
Create a ``BooleanOperationManager``.
manager.union(contours, pointPen)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Performs a union on all ``contours`` and draw it in the ``pointPen``.
(this is a what a remove overlaps does)
manager.difference(contours, clipContours, pointPen)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Knock out the ``clipContours`` from the ``contours`` and draw it in the
``pointPen``.
manager.intersection(contours, clipContours, pointPen)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Draw only the overlaps from the ``contours`` with the
``clipContours``\ and draw it in the ``pointPen``.
manager.xor(contours, clipContours, pointPen)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Draw only the parts that not overlaps from the ``contours`` with the
``clipContours``\ and draw it in the ``pointPen``.
manager.getIntersections(contours)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Returning all intersection for the given contours
BooleanGlyph
------------
A glyph like object with boolean powers.
.. code:: py
from booleanOperations.booleanGlyph import BooleanGlyph
booleanGlyph = BooleanGlyph(sourceGlyph)
BooleanGlyph(sourceGlyph)
~~~~~~~~~~~~~~~~~~~~~~~~~
Create a ``BooleanGlyph`` object from ``sourceGlyph``. This is a very
shallow glyph object with basic support.
booleanGlyph.union(other)
^^^^^^^^^^^^^^^^^^^^^^^^^
Perform a **union** with the ``other``. Other must be a glyph or
``BooleanGlyph`` object.
.. code:: py
result = BooleanGlyph(glyph).union(BooleanGlyph(glyph2))
result = BooleanGlyph(glyph) | BooleanGlyph(glyph2)
booleanGlyph.difference(other)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Perform a **difference** with the ``other``. Other must be a glyph or
``BooleanGlyph`` object.
.. code:: py
result = BooleanGlyph(glyph).difference(BooleanGlyph(glyph2))
result = BooleanGlyph(glyph) % BooleanGlyph(glyph2)
booleanGlyph.intersection(other)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Perform a **intersection** with the ``other``. Other must be a glyph or
``BooleanGlyph`` object.
.. code:: py
result = BooleanGlyph(glyph).intersection(BooleanGlyph(glyph2))
result = BooleanGlyph(glyph) & BooleanGlyph(glyph2)
booleanGlyph.xor(other)
^^^^^^^^^^^^^^^^^^^^^^^
Perform a **xor** with the ``other``. Other must be a glyph or
``BooleanGlyph`` object.
.. code:: py
result = BooleanGlyph(glyph).xor(BooleanGlyph(glyph2))
result = BooleanGlyph(glyph) ^ BooleanGlyph(glyph2)
booleanGlyph.removeOverlap()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Perform a **union** on it self. This will remove all overlapping
contours and self intersecting contours.
.. code:: py
result = BooleanGlyph(glyph).removeOverlap()
--------------
booleanGlyph.name
^^^^^^^^^^^^^^^^^
The **name** of the ``sourceGlyph``.
booleanGlyph.unicodes
^^^^^^^^^^^^^^^^^^^^^
The **unicodes** of the ``sourceGlyph``.
booleanGlyph.width
^^^^^^^^^^^^^^^^^^
The **width** of the ``sourceGlyph``.
booleanGlyph.lib
^^^^^^^^^^^^^^^^
The **lib** of the ``sourceGlyph``.
booleanGlyph.note
^^^^^^^^^^^^^^^^^
The **note** of the ``sourceGlyph``.
booleanGlyph.contours
^^^^^^^^^^^^^^^^^^^^^
List the **contours** of the glyph.
booleanGlyph.components
^^^^^^^^^^^^^^^^^^^^^^^
List the **components** of the glyph.
booleanGlyph.anchors
^^^^^^^^^^^^^^^^^^^^
List the **anchors** of the glyph.
.. |Build Status| image:: https://api.travis-ci.org/typemytype/booleanOperations.svg
:target: https://travis-ci.org/typemytype/booleanOperations
.. |PyPI| image:: https://img.shields.io/pypi/v/booleanOperations.svg
:target: https://pypi.org/project/booleanOperations/
.. |Python Versions| image:: https://img.shields.io/badge/python-3.6,%203.7-blue.svg