Metadata-Version: 2.1
Name: pycork
Version: 0.1.3
Summary: pycork provides a fully compiled interface to the cork boolean library 
Home-page: https://github.com/drlukeparry/pycork
Author: Luke Parry
Author-email: dev@lukeparry.uk
License: UNKNOWN
Project-URL: Documentation, https://github.com/drylukeparry/pycork
Project-URL: Source, https://github.com/drylukeparry/pycork
Project-URL: Tracker, https://github.com/drlukeparry/pycork/issues
Keywords: Boolean CSG,Cork
Platform: UNKNOWN
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Natural Language :: English
Classifier: Topic :: Scientific/Engineering
Description-Content-Type: text/x-rst
License-File: LICENSE

Pycork - Cork Python Library for Boolean CSG Operations on Meshes
=============================================================================

.. image:: https://github.com/drlukeparry/pycork/actions/workflows/pythonpublish.yml/badge.svg
    :target: https://github.com/drlukeparry/pycork/actions
.. image:: https://badge.fury.io/py/pycork.svg
    :target: https://badge.fury.io/py/pycork
.. image:: https://static.pepy.tech/personalized-badge/pycork?period=total&units=international_system&left_color=black&right_color=orange&left_text=Downloads
 :target: https://pepy.tech/project/pycork


Pycork is a Python library offering the functionality of the Cork boolean CSG library in a compiler friendly form suitable across all platforms. The library includes the dependencies for the Multi-Precision Integer and Rationals (MPIR) 3.0 built-in used by the Cork libary. The package aims to provide a simpler route for compiling the package for individuals and in addition, generating python bindings for use across other projects. Refactoring has been authored to tidy up the existing codebase so that it can be built across multiple platforms, in particular Windows, using the CMake build-system. At this stage, no further optimisations or improvements will be made specifically to the cork library, inclusive of its algorithms.

The python bindings are simple and offer access to the core functionality offered by the Cork library to perform boolean operations on watertight meshes. Additionally, it removes the awkward step of generatig .off files that are used in the command-line interface of the Cork library. The user may pass triangular meshes (vertices, tri-faces indices) as numpy arrays to each function.

For further information, see the latest `release notes <https://github.com/drlukeparry/pycork/blob/master/CHANGELOG.md>`_.

Installation
*************

Installation is currently supported on Windows. No special requiremnets are necessary for using pycork, except having the numpy library available. It is recommend to also install the `trimesh <https://github.com/mikedh/trimesh>`_ library to provide an interface to processing meshes as input for pycork.

.. code:: bash

    conda install -c numpy
    pip install trimesh

Installation of pycork can then be performed using pre-built python packages using the PyPi repository.

.. code:: bash

    pip install pycork

Alternatively, pycork may be compiled directly from source. Currently the prerequisites are the a compliant c++ build environment, include CMake build system. Currently the package has been tested on Windows 10, using VS2019.

.. code:: bash

    git clone https://github.com/drlukeparry/pycork.git && cd ./pycork
    git submodule update --init --recursive

    python setup.py install

Usage
******

The Cork CSG library, by design, has a simple interface for is functionality. Further detailed description of the function is therefore not necessary.

.. code:: python

    import numpy as np
    import trimesh

    import pycork

    # Note any manifold, watertight mesh can be used in conjuction with the Trimesh library
    meshA = trimesh.load_mesh('meshA.off')
    meshB = trimesh.load_mesh('meshB.off')

    # Extra list of vertices and triangular faces from the meshes
    vertsA = meshA.vertices
    trisA = meshA.faces

    vertsB = meshB.vertices
    trisB = meshB.faces

    pycork.isSolid(vertsA, trisA)
    pycork.isSolid(vertsB, trisB)

    #Perform the boolean opertions directly with Cork library
    vertsC, trisC = pycork.union(vertsA, trisA,
                                 vertsB, trisB)

    vertsD, trisD = pycork.intersection(vertsA, trisA,
                                        vertsB, trisB)


    meshC = trimesh.Trimesh(vertices=vertsC, faces=trisC, process=True)




