|Build Status| |PyPI| |Python Versions|
BooleanOperations
=================
Boolean operations on paths which uses a super fast `polygon clipper
library by Angus Johnson <http://www.angusj.com/delphi/clipper.php>`__.
You can download the latest version from PyPI:
https://pypi.org/project/booleanOperations.
Install
-------
`Pip <https://pip.pypa.io/en/stable/>`__ is the recommended tool to
install booleanOperations.
To install the latest version:
.. code:: sh
pip install booleanOperations
BooleanOperations depends on the following packages:
- `pyclipper <https://pypi.org/project/pyclipper/>`__: Cython wrapper for
the C++ Clipper library
- `fonttools <github.com/behdad/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://github.com/typemytype/booleanOperations/actions/workflows/ci.yml/badge.svg
:target: https://github.com/typemytype/booleanOperations/actions/workflows/ci.yml
.. |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.9+-blue.svg
Not written in Markdown, so it's shown here as plain text — view it formatted on GitHub.
Overall
Maintained
Code review
Latest release
Releases this year
2,422 followers · starred Feb 2023
45 followers · starred Nov 2015
|Build Status| |PyPI| |Python Versions|
BooleanOperations
=================
Boolean operations on paths which uses a super fast `polygon clipper
library by Angus Johnson <http://www.angusj.com/delphi/clipper.php>`__.
You can download the latest version from PyPI:
https://pypi.org/project/booleanOperations.
Install
-------
`Pip <https://pip.pypa.io/en/stable/>`__ is the recommended tool to
install booleanOperations.
To install the latest version:
.. code:: sh
pip install booleanOperations
BooleanOperations depends on the following packages:
- `pyclipper <https://pypi.org/project/pyclipper/>`__: Cython wrapper for
the C++ Clipper library
- `fonttools <github.com/behdad/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://github.com/typemytype/booleanOperations/actions/workflows/ci.yml/badge.svg
:target: https://github.com/typemytype/booleanOperations/actions/workflows/ci.yml
.. |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.9+-blue.svg
Not written in Markdown, so it's shown here as plain text — view it formatted on GitHub.
Overall
Maintained
Code review
Latest release
Releases this year
2,422 followers · starred Feb 2023
45 followers · starred Nov 2015