For years now it has seemed that PyMesh's Windows support has been lacking. The maintainer of the main repo seems to be extremely busy, so I'll set up this repo in the hopes of providing Windows support until changes can be merged into main PyMesh.
For prosperity, the basics steps I've noted down so far are:
-
Use "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
-
Made release -
CGAL: Don't use GMP (CGAL_DISABLE_GMP) -
CGAL: Build and install boost and add to path
-
Cork: Build and install mpir -
Cork: Had to change Cork CMake -
PyMesh: Don't use GMP (CGAL_DISABLE_GMP) -
PyMesh: Edited code to compile -
Install binaries with package -
Added os.add_dll_directory(os.path.normpath("X:/Development/PyMesh/python/pymesh/third_party/bin")) to top of Mesh.py in install -
edit to use pytest (test = numpy.test) -
install pytest
-
install hypothosis
I'll be trying to integrate these steps into the normal pipeline. it may take some time...
Build steps:
- [C++] Build and install boost and add to path
- Get your required source from: https://www.boost.org/users/download/
cd
into the boost root directory- Run
bootstrap && .\b2
- From the boost root dir add
stage/lib/
to your path - You will most likely have to restart your terminal
- [Py] Install pytest with
pip install pytest
- [Py] Install hypothosis with
pip install hypothesis
- Run
python setup.py build
- Run
python setup.py install
- Run
python -c "import pymesh; pymesh.test()"
PyMesh is a code base developed by Qingnan Zhou for his PhD research at New York University. It is a rapid prototyping platform focused on geometry processing. PyMesh is written with both C++ and Python, where computational intensive functionalities are realized in C++, and Python is used for creating minimalistic and easy to use interfaces.
(Model source: Bust of Sappho)
Perhaps the easiest way of trying out PyMesh is through docker:
docker run -it pymesh/pymesh
Python 3.6.4 (default, Feb 17 2018, 09:32:33)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymesh
For example, to run meshstat.py:
docker run -it --rm -v `pwd`:/models pymesh/pymesh meshstat.py -x /models/model.obj
This command mounts your current working directory to the /models
directory
in a docker container and executes the meshstat.py
script on the mesh file
model.obj
in the current directory.
To retrieve the code:
git clone https://github.com/PyMesh/PyMesh.git
cd PyMesh
git submodule update --init
PyMesh has the following required dependencies:
The following C++ libraries are required. They are included in
$PYMESH_PATH/third_party
directory.
PyMesh also has a number of optional dependencies:
- Carve: A fast, robust constructive solid geometry library.
- CGAL: The Computational Geometry Algorithms Library.
- Clipper: An open source freeware library for clipping and offsetting lines and polygons.
- Cork: A 3D boolean/CSG library.
- Draco: An open-source library for compressing and decompressing 3D geometric meshes and point clouds
- Geogram: A programming library of geometric algorithms
- libigl: A simple C++ geometry processing library.
- MMG: Robust, open source & multidisciplinary software for remeshing.
- Qhull: Engine for convex hulls, Delaunay triangulations, Voronoi diagrams computations.
- Quartet: A tetrahedral mesh generator that does isosurface stuffing with an acute tetrahedral tile.
- TBB: Thread building blocks from Intel.
- Tetgen: Tetrahedral mesh generation engine.
- Triangle: A two-Dimensional quality mesh generator and Delaunay triangulator.
All of the optional libraries are included in $PYMESH_PATH/third_party
directory.
All dependencies are included as git submodules in the third_party
directory.
It is recommended to build these dependencies directly (see Build section).
However, it is possible to use an existing dependency installed on your system.
If the dependent library is not installed in standard locations
(/usr/local/
, /opt/local
), one needs to set environment variables that
point to the correct directories. PyMesh check the following environment
variables:
- Eigen: Set
EIGEN_PATH
to the directory containing theeigen3
directory. - CGAL: Set
CGAL_PATH
to the directory containingUseCGAL.cmake
file.- Boost: Set
BOOST_INC
to the directory containing boost. - GMP: Set
GMP_INC
andGMP_LIB
to the directories containing GMP header and library.
- Boost: Set
- libigl: Set
LIBIGL_PATH
theinclude
directory of libigl sources. - Cork: Set
CORK_PATH
to the install directory of Cork. - Tetgen: Set
TETGEN_PATH
to the install directory of Tetgen. - Triangle: Set
TRIANGLE_PATH
to the install directory of Triangle. - Qhull: Set
QHULL_PATH
to the install directory of Qhull. - Clipper: Set
CLIPPER_PATH
to the install directory of Clipper. - Carve: Set
CARVE_PATH
to the install directory of Carve. - Geogram: Set
GEOGRAM_PATH
to the install directory of Geogram. - Quartet: Set
QUARTET_PATH
to the install directory of Quartet. - Draco: Set
Draco_PATH
to the install directory of Draco. - MMG: Set
MMG_PATH
to the install directory of MMG.
Let $PYMESH_PATH
be the root directory of the repository.
The first step is to compile the optional third party dependencies:
cd $PYMESH_PATH/third_party
build.py all
Third party dependencies will be installed in
$PYMESH_PATH/python/pymesh/third_party
directory.
Now we can build the main project. It is recommended to build out of source:
cd $PYMESH_PATH
mkdir build
cd build
cmake ..
To build the PyMesh library:
make
make tests
Make sure all unit tests are passed before using the library.
The output of building PyMesh consists a set of C++ libraries and a python module. Installing the C++ library is currently not available. However, installing the python package can be done:
./setup.py build # This an alternative way of calling cmake/make
./setup.py install
To check PyMesh is installed correctly, run the following python unit tests::
python -c "import pymesh; pymesh.test()"
Once again, make sure all unit tests are passed, and report any unit test failures.
Thank you for using PyMesh! Please consider help PyMesh improve by leaving feedback!