C++ library for processing and visualizing polygon surface meshes; Visualization Module
This project is a build2 package repository that provides access to pmp-library
, a modern C++ open-source library for processing and visualizing polygon surface meshes.

Usage
Make sure to add the stable section of the cppget.org
repository to your project's repositories.manifest
to be able to fetch this package.
:
role: prerequisite
location: https://pkg.cppget.org/1/stable
# trust: ...
If the stable section of cppget.org
is not an option then add this Git repository itself instead as a prerequisite.
:
role: prerequisite
location: https://github.com/build2-packaging/pmp-library.git
Add the respective dependency in your project's manifest
file to make the required packages available for import.
The libpmp-vis
package requires libpmp
package as its core module and adds the visualization features to the standard mesh processing facilities.
depends: libpmp ^3.0.0
depends: libpmp-vis ^3.0.0
To import the respective library targets include one of the following declarations in a buildfile
.
import pmp = libpmp%lib{pmp}
import pmp_vis = libpmp-vis%lib{pmp-vis}
Configuration
There are no configuration options available.
Issues and Notes
- Naming Scheme:
- Repository Name: Same as the upstream repository:
pmp-library
- Project Name: Same as the upstream repository and the project name given in the upstream CMake file:
pmp-library
- Library Name: To be consistent with programming practices, we wanted the library name to be the name of the upstream include folder:
lib{pmp}
- Package Name: According to the recommended build2 practices, the respective library package gets the prefix
lib
and its name becomes libpmp
.
- Similar for
lib{pmp-vis}
in package libpmp-vis
- For
aarch64-linux-gnu
targets using GCC the loop_subdivision
tests of the libpmp
package fail with terminate called after throwing an instance of 'pmp::InvalidInputException'
and what(): loop_subdivision: Not a triangle mesh.
. This is an upstream issue and is probably already fixed for the next version.
- The package
libpmp-vis
fails on various CI configurations due to the required OpenGL-based libraries, like GLFW and GLEW.
- Library
lib{pmp}
from libpmp
package exports _USE_MATH_DEFINES
and NOMINMAX
macros on Windows to properly function.
pmp-library
supports OpenMP. Enabling OpenMP in the compile options of your configuration will also compile the library with its builtin parallelization.
pmp-library
supports 64-bit scalars and index types when the macros PMP_SCALAR_TYPE_64
and PMP_INDEX_TYPE_64
are used for compilation (and probably export as well). Currently, this is not supported in the package.
pmp-library
supports Emscripten. Most of the required upstream options have not been added to the package so far.
Contributing
Thanks in advance for your help and contribution to keep this package up-to-date.
For now, please, file an issue on GitHub for everything that is not described below.
Recommend Updating Version
Please, file an issue on GitHub with the new recommended version.
Update Version by Pull Request
- Fork the repository on GitHub and clone it to your local machine.
- Run
git submodule init
and git submodule update
to get the current upstream directory.
- Inside the
upstream
directory, checkout the new library version X.Y.Z
by calling git checkout vX.Y.Z
that you want to be packaged.
- If needed, change source files,
buildfiles
, and symbolic links accordingly to create a working build2 package. Make sure not to directly depend on the upstream directory inside the build system but use symbolic links instead.
- Update library version in
manifest
file if it has changed or add package update by using +n
for the n
-th update.
- Make an appropriate commit message by using imperative mood and a capital letter at the start and push the new commit to the
master
branch.
- Run
bdep ci
and test for errors.
- If everything works fine, make a pull request on GitHub and write down the
bdep ci
link to your CI tests.
- After a successful pull request, we will run the appropriate commands to publish a new package version.
Update Version Directly if You Have Permissions
- Inside the
upstream
directory, checkout the new library version X.Y.Z
by calling git checkout vX.Y.Z
that you want to be packaged.
- If needed, change source files,
buildfiles
, and symbolic links accordingly to create a working build2 package. Make sure not to directly depend on the upstream directory inside the build system but use symbolic links instead.
- Update library version in
manifest
file if it has changed or add package update by using +n
for the n
-th update.
- Make an appropriate commit message by using imperative mood and a capital letter at the start and push the new commit to the
master
branch.
- Run
bdep ci
and test for errors and warnings.
- When successful, run
bdep release --tag --push
to push new tag version to repository.
- Run
bdep publish
to publish the package to cppget.org.
Depends (6)
Reviews
Builds
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_fedora_40-gcc_14-bindist |
timestamp |
2025-08-23 11:11:11 UTC (17:51:19 hours ago) |
result |
error (update) | log | rebuild |
toolchain |
public-0.17.0 |
target |
aarch64-linux-gnu |
tgt config |
linux_debian_12-clang_18-O3 |
timestamp |
2025-08-22 13:26:55 UTC (01 15:35:36 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
aarch64-linux-gnu |
tgt config |
linux_debian_12-clang_18 |
timestamp |
2025-08-22 13:24:51 UTC (01 15:37:40 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_debian_12-gcc_14-O3 |
timestamp |
2025-08-22 13:17:41 UTC (01 15:44:50 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_debian_12-gcc_14-ndebug_O3 |
timestamp |
2025-08-22 13:16:59 UTC (01 15:45:31 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_debian_12-gcc_14 |
timestamp |
2025-08-22 13:16:06 UTC (01 15:46:25 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_debian_12-gcc_12-bindist |
timestamp |
2025-08-22 12:26:37 UTC (01 16:35:54 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-microsoft-win32-msvc14.3 |
tgt config |
windows_10-msvc_17.8-O2 |
timestamp |
2025-08-22 12:25:53 UTC (01 16:36:37 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-microsoft-win32-msvc14.3 |
tgt config |
windows_10-msvc_17.10-O2 |
timestamp |
2025-08-22 12:24:11 UTC (01 16:38:20 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-microsoft-win32-msvc14.3 |
tgt config |
windows_10-msvc_17.8-static_O2 |
timestamp |
2025-08-22 12:23:56 UTC (01 16:38:35 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-microsoft-win32-msvc14.3 |
tgt config |
windows_10-msvc_17.8 |
timestamp |
2025-08-22 12:22:53 UTC (01 16:39:37 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-microsoft-win32-msvc14.3 |
tgt config |
windows_10-msvc_17.10 |
timestamp |
2025-08-22 12:22:02 UTC (01 16:40:29 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-microsoft-win32-msvc14.3 |
tgt config |
windows_10-msvc_17.10-static_O2 |
timestamp |
2025-08-22 12:21:45 UTC (01 16:40:46 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_ubuntu_24.04-gcc_13-bindist |
timestamp |
2025-08-22 12:16:45 UTC (01 16:45:46 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_debian_12-clang_17 |
timestamp |
2025-08-22 12:12:51 UTC (01 16:49:40 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_debian_12-clang_17_libc++ |
timestamp |
2025-08-22 12:12:14 UTC (01 16:50:16 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_debian_12-gcc_13.1 |
timestamp |
2025-08-22 12:10:34 UTC (01 16:51:57 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
aarch64-linux-gnu |
tgt config |
linux_debian_12-gcc_14-ndebug_O3 |
timestamp |
2025-08-21 14:13:40 UTC (02 14:48:51 days ago) |
result |
warning (test-installed) | log | rebuild |
toolchain |
public-0.17.0 |
target |
aarch64-linux-gnu |
tgt config |
linux_debian_12-gcc_14-O3 |
timestamp |
2025-08-21 14:10:55 UTC (02 14:51:36 days ago) |
result |
warning (test-installed) | log | rebuild |
toolchain |
public-0.17.0 |
target |
aarch64-linux-gnu |
tgt config |
linux_debian_12-gcc_14 |
timestamp |
2025-08-21 12:55:50 UTC (02 16:06:41 days ago) |
result |
warning (test-installed) | log | rebuild |
toolchain |
public-0.17.0 |
target |
aarch64-linux-gnu |
tgt config |
linux_debian_12-clang_17_libc++ |
timestamp |
2025-08-21 12:34:23 UTC (02 16:28:07 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
aarch64-linux-gnu |
tgt config |
linux_debian_12-clang_17 |
timestamp |
2025-08-21 12:34:08 UTC (02 16:28:23 days ago) |
result |
success | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-microsoft-win32-msvc14.3 |
tgt config |
windows_10-clang_18_llvm_msvc_17.10-O2 |
timestamp |
2025-08-21 12:20:33 UTC (02 16:41:57 days ago) |
result |
warning (test-installed) | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-microsoft-win32-msvc14.3 |
tgt config |
windows_10-clang_18_llvm_msvc_17.10 |
timestamp |
2025-08-21 12:20:17 UTC (02 16:42:14 days ago) |
result |
warning (test-installed) | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-microsoft-win32-msvc14.3 |
tgt config |
windows_10-clang_18_llvm_msvc_17.10-static_O2 |
timestamp |
2025-08-21 12:18:51 UTC (02 16:43:40 days ago) |
result |
warning (test-installed) | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-microsoft-win32-msvc14.3 |
tgt config |
windows_10-clang_17_msvc_msvc_17.10 |
timestamp |
2025-08-21 12:15:51 UTC (02 16:46:40 days ago) |
result |
warning (test-installed) | log | rebuild |
toolchain |
public-0.17.0 |
target |
aarch64-linux-gnu |
tgt config |
linux_debian_12-gcc_14-static_O3 |
timestamp |
2025-08-21 12:09:22 UTC (02 16:53:09 days ago) |
result |
error (test-installed) | log | rebuild |
toolchain |
public-0.17.0 |
target |
aarch64-linux-gnu |
tgt config |
linux_debian_12-clang_18_libc++ |
timestamp |
2025-08-21 12:02:26 UTC (02 17:00:05 days ago) |
result |
warning (test-installed) | log | rebuild |
toolchain |
public-0.17.0 |
target |
aarch64-linux-gnu |
tgt config |
linux_debian_12-clang_18_libc++-O3 |
timestamp |
2025-08-21 12:00:43 UTC (02 17:01:48 days ago) |
result |
warning (test-installed) | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-w64-mingw32 |
tgt config |
windows_10-gcc_13.2_mingw_w64-O2 |
timestamp |
2025-08-21 11:49:39 UTC (02 17:12:52 days ago) |
result |
error (update) | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-w64-mingw32 |
tgt config |
windows_10-gcc_13.2_mingw_w64 |
timestamp |
2025-08-21 11:46:08 UTC (02 17:16:23 days ago) |
result |
error (update) | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-w64-mingw32 |
tgt config |
windows_10-gcc_13.2_mingw_w64-static_O2 |
timestamp |
2025-08-21 11:45:37 UTC (02 17:16:54 days ago) |
result |
error (update) | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-freebsd14.1 |
tgt config |
freebsd_14-clang_18-static_O3 |
timestamp |
2025-08-21 11:43:48 UTC (02 17:18:42 days ago) |
result |
error (update) | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-freebsd14.1 |
tgt config |
freebsd_14-clang_18 |
timestamp |
2025-08-21 11:42:58 UTC (02 17:19:33 days ago) |
result |
error (update) | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_debian_12-gcc_14-static_O3 |
timestamp |
2025-08-21 11:41:39 UTC (02 17:20:51 days ago) |
result |
error (test-installed) | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-freebsd14.1 |
tgt config |
freebsd_14-clang_18-O3 |
timestamp |
2025-08-21 11:41:31 UTC (02 17:21:00 days ago) |
result |
error (update) | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-freebsd13.3 |
tgt config |
freebsd_13-clang_17 |
timestamp |
2025-08-21 11:37:02 UTC (02 17:25:29 days ago) |
result |
error (update) | log | rebuild |
toolchain |
public-0.17.0 |
target |
aarch64-linux-gnu |
tgt config |
linux_debian_12-clang_18_libc++-static_O3 |
timestamp |
2025-08-21 11:16:53 UTC (02 17:45:37 days ago) |
result |
error (test-installed) | log | rebuild |
toolchain |
public-0.17.0 |
target |
aarch64-linux-gnu |
tgt config |
linux_debian_12-clang_18-static_O3 |
timestamp |
2025-08-21 11:16:26 UTC (02 17:46:04 days ago) |
result |
error (test-installed) | log | rebuild |
toolchain |
public-0.17.0 |
target |
aarch64-linux-gnu |
tgt config |
linux_debian_12-gcc_13 |
timestamp |
2025-08-21 11:14:07 UTC (02 17:48:23 days ago) |
result |
warning (test-installed) | log | rebuild |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_debian_12-clang_18 |
result |
unbuilt |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_debian_12-clang_18-O3 |
result |
unbuilt |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_debian_12-clang_18-static_O3 |
result |
unbuilt |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_debian_12-clang_18_libc++ |
result |
unbuilt |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_debian_12-clang_18_libc++-O3 |
result |
unbuilt |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_debian_12-clang_18_libc++-static_O3 |
result |
unbuilt |
toolchain |
public-0.17.0 |
target |
x86_64-linux-gnu |
tgt config |
linux_fedora_39-gcc_13-bindist |
result |
unbuilt |
toolchain |
public-0.17.0 |
target |
x86_64-apple-darwin22.5.0 |
tgt config |
macos_13-clang_15.0 |
result |
unbuilt |
toolchain |
public-0.17.0 |
target |
x86_64-apple-darwin23.5.0 |
tgt config |
macos_14-clang_15.0 |
result |
unbuilt |
toolchain |
public-0.17.0 |
target |
x86_64-apple-darwin23.5.0 |
tgt config |
macos_14-clang_15.0-O3 |
result |
unbuilt |
toolchain |
public-0.17.0 |
target |
x86_64-apple-darwin23.5.0 |
tgt config |
macos_14-clang_15.0-static_O3 |
result |
unbuilt |
toolchain |
public-0.17.0 |
target |
x86_64-apple-darwin23.5.0 |
tgt config |
macos_14-gcc_14_homebrew |
result |
unbuilt |
toolchain |
public-0.17.0 |
target |
x86_64-apple-darwin23.5.0 |
tgt config |
macos_14-gcc_14_homebrew-O3 |
result |
unbuilt |
toolchain |
public-0.17.0 |
target |
x86_64-apple-darwin23.5.0 |
tgt config |
macos_14-gcc_14_homebrew-static_O3 |
result |
unbuilt |
Changes
Changelog
All notable changes to this project are documented in this file.
The format is based on Keep a Changelog.
This project aims to adhere to Semantic Versioning.
Unreleased
Added
- Add
mesh_to_matrices()
and matrices_to_mesh()
functions to convert to and from Eigen matrices.
- Add support to write binary STL files.
- Added
geodesics_heat()
for computing geodesics (based on the heat method) on general polygon meshes.
- Generalize curvature computation in
curvature()
to polygon meshes.
- Add
mean_edge_length(SurfaceMesh)
.
- Add
min_face_area()
to compute minimum face area of all faces.
- Add
edge_area()
to compute the area associated to an edge.
- Added circulator enumerating edges around vertex:
SurfaceMesh::edges(Vertex)
.
- Functions
laplace_matrix()
, mass_matrix()
, gradient_matrix()
, and divergence_matrix()
that compute matrix representations of those discrete differential operators. Works for both triangle meshes and general polygon meshes, based on the paper Bunge et al, "Polygon Laplacian made simple", Eurographics 2020.
- Smoothing, parameterization, and fairing are now implemented based on sparse Laplacian matrices, which generalizes to general polygon meshes.
- Add
PMP_STRICT_COMPILATION
CMake option to control treating warnings as errors. Default: On.
- Add function
flip_faces()
to reverse face orientation in a mesh (#123)
- Meshes and textures can be loaded by dropping the files onto the window, both in normal GLFW windows and browser windows (using emscripten). Thanks to Stephan Wenninger!
Changed
- Get rid of git submodules, vendor all third-party libraries for simplicity. See also #167.
- The function
voronoi_area()
now computes the barycentric Voronoi area, because this version generalizes better to polygon meshes. The mixed Voronoi area (for triangle meshes) is now computed by voronoi_area_mixed()
.
- Consistently use lowercase file names
- Rename
Timer
to StopWatch
SurfaceMeshGL
renamed to Renderer
and de-coupled from SurfaceMesh
- Replace
triangle_area(Face)
by face_area(Face)
, which now supports general polygons. surface_area(SurfaceMesh)
now also works for general polygon meshes.
- Remove max angle triangulation objective leading to fold-overs.
- Breaking change: Re-design algorithms API to use a simple function interface.
- Breaking change: Make helper classes
Heap
, Quadric
, NormalCone
, TriangleKdTree
private.
- Remove
vertex_curvature()
, VertexCurvature
, and angle_sum()
.
- Support CMake's
BUILD_SHARED_LIBS
option to control building shared libraries
- Fix
Mat3::inverse()
to use fabs()
- Remove
Matrix::allFinite()
.
- Make
SurfaceMesh::bounds()
a free function pmp::bounds()
.
- Make
SurfaceMesh::edge_length()
a free function pmp::edge_length()
.
- Remove object properties.
- Remove support for PLY format, see 1ec912b for why.
- Remove support for XYZ and AGI point set formats.
- Move
SurfaceMesh::read()
and SurfaceMesh::write()
to free functions pmp::read()
and pmp::write()
.
- Move IO functionality into its own module
- Upgrade C++ standard to C++17
- Remove
PMP_ASSERT()
macro.
- Remove
get_*_property_type()
functions from SurfaceMesh
- Move example apps from
src/apps
to examples
. Remove PMP_BUILD_APPS
CMake option.
- Rename
Simplification
to Decimation
- Rename
Factory
to Shapes
- Drop
Surface
prefix from algorithms
- Update glew to version 2.2.0.
- Update stb_image to version 2.28 and stb_image_write to version 1.16.
- Upgrade ImGui to version 1.89.8
[2.0.1] 2022-08-26
Fixed
- Fix shared library version
- Fix compilation with PMP_SCALAR_TYPE=64
- Use correct C++ standard (C++14) in public target compile options
- Fix crash in smoothing demo app
Changed
- Upgrade ImGui to version 1.88
[2.0.0] 2022-08-14
Added
- Add support for texture seams in
SurfaceSimplification
, thanks to Timo Menzel.
- Add quad/tri subdivision, thanks to Hendrik Meyer.
- Add
SurfaceFactory
class to generate basic shapes. Thanks to u/lycium on Reddit for suggesting a simplification of the icosahedron()
function.
- Add support to render colors per face
- Add support to render colors per vertex, thanks to Xiewei Zhong
- Add function to compute volume of a mesh, thanks to Xiewei Zhong
- Add post-increment iterators and make low level functions to add elements public. This makes it possible to use CGAL algorithms on a PMP
SurfaceMesh
. Thanks to Andreas Fabri for contributing the changes!
- Add PMP_INSTALL option to CMake.
- Add PMP_BUILD_VIS CMake option to enable / disable building the pmp_vis library and its dependencies.
Changed
- Bump C++ standard to C++14
TriangleKdTree
: no longer record number of tests, remove NearestNeighbor::tests
member
- Remove
SurfaceSubdivision::sqrt3()
- Remove
PMP_SHOW
macro
- Remove
pmp::Version
class and Version.h
- Build shared libraries on all platforms by default (except pmp_vis , see #87)
- Bump CMake minimum required version to 3.16.3
- Make
SurfaceTriangulation::Objective
a scoped enum
- Remove
SurfaceMesh::triangulate()
functions to avoid redundancy with SurfaceTriangulation
- Improve API by reporting errors using exceptions (see #16).
SurfaceFeatures
now returns the number of boundary / feature edges detected.
- Update Eigen to version 3.4.0
- Update GoogleTest to version 1.12.1
- Update stb_image to version 2.26 and stb_image_writer to version 1.15.
- Update GLFW to version 3.3.8
- Change CMake policy CMP0072 to "NEW" behavior preferring GLVND
Fixed
- Fix
SurfaceMesh::get_object_propertyType()
to get_object_property_type()
SurfaceRemeshing
: Don't leak feature properties. Spotted by Pierre Buyssens.
- Fixed a rare bug regarding ImGui scaling on Linux. Thanks to Jan Erik Swiadek for reporting and fixing this!
- Fix crash in
SurfaceRemeshing
when dealing with low quality meshes (#90, #89)
SurfaceMesh::bounds()
no longer includes deleted vertices. Thanks to Paul Du.
- Fix crash in
SurfaceHoleFilling
when a vertex selection already exists.
- Fix bug in
SurfaceHoleFilling
leading to artifacts in the filled surface patch. See #64.
- Change sign of
vec2::perp()
to correctly model CCW rotation by 90 degrees.
- Fix bug in OpenGL buffer clean-up in
SurfaceMeshGL
.
[1.2.1] 2020-05-10
Fixed
- Fix rendering issues around sharp edges
- Fix bug in adaptive remeshing leading to over-refinement of corner vertices.
- Fix bug in bounding box computation. Thanks a lot to Jascha Achenbach for reporting this bug!
[1.2.0] 2020-03-15
External libraries
- Upgrade Eigen to current master version to get rid of a compile error on Windows
- Upgrade ImGui to version 1.75
- Upgrade stb_image to current master version
Added
- Add constructors using initializer lists to Matrix/Vector classes
- Add assignment from and cast from Eigen matrices and vectors
- Improved rendering of general polygons, avoiding erroneous tessellation into overlapping/flipped triangles in case of non-convex polygons.
- Added support for rendering using MatCaps. Thanks to Alec Jacobson for suggesting this!
Fixed
- Fix erroneous header install path (visualization)
- Fix bug hole filling (when filling single-triangle holes). Thanks a lot to Pierre Buyssens for reporting this bug!
- Fix bug when fairing a mesh w/o boundary constraints. Thanks a lot to Pierre Buyssens for reporting this bug!
[1.1.0] 2019-05-30
Added
- Compile-time switch
PMP_SCALAR_TYPE
to choose between float/double as Scalar
- Support point set rendering for surface meshes without faces
- Add hole filling based on Liepa algorithm
- Add explicit warranty and liability disclaimer
Changed
- Breaking change: Public members in Window and TrackballViewer classes made
private and encapsulated through access functions
- Change SurfaceSmoothing to avoid model shrinking
- Improve normal computation for polygonal faces
- Upgrade GLFW to version 3.3
- Upgrade ImGui to version 1.70
- Upgrade Eigen to version 3.3.7
- Documentation updates
Fixed
- Fix a bug in OFF reader when loading faces with high valence
- Fix a bug SurfaceGeodesic that lead to dist(v0,v1) != dist(v1,v0). As a consequence, the Novotni method has been removed from SurfaceGeodesic.
[1.0.0] 2019-02-18
Added
- Algorithms module
- Visualization tools
- Support for range-based for loops
- Configurable index type
- Global object properties
- Support for emscripten
- Unit test suite
- Continuous integration
- Coding standard
- Version API
Changed
- Switched to MIT license
- Library scope handle and property types
- Enhanced IO capabilities