Releases: educelab/OpenABF
Version 2.0.0
This version represents a major overhaul of the HalfEdgeMesh class with new features and methods for surface traversal and modification. Ultimately, we intend for this library to support easy flattening of multiple connected components stored in a single mesh, and this lays the foundation for that to happen.
While most of the API has stayed the same, or simply expanded in functionality, the biggest breaking change is the need to finalize the mesh structure after adding all of the faces. Previously, one simply added vertices and faces to the mesh:
// add vertices
mesh->insert_vertex(0, 0, 0);
mesh->insert_vertex(1, 0, 0);
mesh->insert_vertex(0, 1, 0);
mesh->insert_vertex(1, 1, 0);
// add faces
mesh->insert_face(0, 2, 1);
mesh->insert_face(1, 2, 3);In this new version, you must additionally call HalfEdgeMesh::update_boundary() after adding all of the faces. This method checks for a variety of mesh construction errors which are now difficult to detect/correct at face insertion time. It also updates the mesh structure to make it easily possible to traverse both interior and boundary edges:
// add vertices
mesh->insert_vertex(0, 0, 0);
mesh->insert_vertex(1, 0, 0);
mesh->insert_vertex(0, 1, 0);
mesh->insert_vertex(1, 1, 0);
// add faces
mesh->insert_face(0, 2, 1);
mesh->insert_face(1, 2, 3);
mesh->update_boundary(); // NEW: Call when you're done adding facesAlternatively, you can use the new insert_vertices() and insert_faces() methods to simplify this whole process:
// add vertices
mesh->insert_vertices({
Vec3f{0, 0, 0},
Vec3f{1, 0, 0},
Vec3f{0, 1, 0},
Vec3f{1, 1, 0}
});
// add faces
mesh->insert_faces({{0, 2, 1}, {1, 2, 3}}); // NEW: Automatically calls update_boundary()Because of this change, a properly constructed HalfEdgeMesh no longer supports non-manifold surfaces or faces with inconsistent winding orders. These issues are now detected (and where possible, corrected) at mesh construction time rather than the user needing to call IsManifold before running one of the flattening algorithms.
Major changes
- The project now requires C++17
HalfEdgeMesh- Add
FindEdgePathfor finding the shortest path between two vertices. - Add
typemember typedef for accessing the underlying type of the mesh's vertex elements. - Vertex: Add property function
normal(). - Edge: Add properties
magnitude()andprevfor previous edge in the triangle. - Face: Add properties
area(),barycenter(), andnormal(). - Add
clone()member function for cloning a mesh's structure. - Add
insert_vertices()functions for adding many vertices at once. - Add
update_boundary()function for finalizing the mesh structure once all faces have been added. This is now required when usinginsert_face(). - Add
insert_faces(), a convenience function for adding many faces at once and updating the mesh structure in a single step. - Add
vertex,edge, andfacegetter functions. - Add various property functions for traversing the mesh structure:
boundary_edge(),boundaries(),num_connected_components(),connected_components(),incoming_edges(),outgoing_edges(). - Add
split_edge()andsplit_path()functions for inserting seams in the mesh.
- Add
MeshIO- New module for reading and writing simple mesh files. Currently supports basic OBJ and PLY files.Parameterization- Add support for conjugate gradient and other Eigen solvers.- Added new examples and renamed some of the old ones.
- Lots of test and documentation updates.
See the following MRs for more details: !14, !17
Full Changelog: v1.1.1...v2.0.0
Version 1.1.1
Patch release to fix compilation on gcc
Version 1.1
- Improve detection of degenerate edge constructions
- Fix the
Vecfold expression on C++17 - Add standalone functions for detecting unreferenced vertices in a mesh
- Various documentation improvements and bug fixes
Version 1.0
The initial release of OpenABF. Provides implementations of ABF, ABF++, and Angle-based LSCM.