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.
- Add function
flip_faces()
to reverse face orientation in a mesh (#123)
- Support CMake's
BUILD_SHARED_LIBS
option to control building shared libraries - Fix
Mat3::inverse()
to usefabs()
- Remove
Matrix::allFinite()
. - Make
SurfaceMesh::bounds()
a free functionpmp::bounds()
. - Remove
SurfaceMesh::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()
andSurfaceMesh::write()
to free functionspmp::read()
andpmp::write()
. - Move IO functionality into its own module
- Upgrade C++ standard to C++17
- Remove
get_*_property_type()
functions fromSurfaceMesh
- Move example apps from
src/apps
toexamples
. RemovePMP_BUILD_APPS
CMake option. - Rename
Simplification
toDecimation
- Rename
Factory
toShapes
- Drop
Surface
prefix from algorithms - Update stb_image to version 2.27 and stb_image_writer to version 1.16.
- 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
- Upgrade ImGui to version 1.88
- 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 theicosahedron()
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.
- Bump C++ standard to C++14
TriangleKdTree
: no longer record number of tests, removeNearestNeighbor::tests
member- Remove
SurfaceSubdivision::sqrt3()
- Remove
PMP_SHOW
macro - Remove
pmp::Version
class andVersion.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 withSurfaceTriangulation
- 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
- Fix
SurfaceMesh::get_object_propertyType()
toget_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
.
- 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!
- 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
- 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!
- 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!
- 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
- 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
- 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.
- 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
- Switched to MIT license
- Library scope handle and property types
- Enhanced IO capabilities