Add ability to create seams in a mesh
Adds the ability to insert seams into the mesh so that closed objects can be better parameterized.
This MR depends upon a major overhaul of the HalfEdgeMesh class in order to enable this functionality. Most importantly, all half-edges are now paired, even if the paired edge is not adjacent to a face. Since this represents a major change in the API and logic, this MR will also bump the library to v2.0.0.
Changes
- Require C++17 and update some of the code standards accordingly
- docs: Cleanup and rearrangement to fix some Doxygen issues
- examples: Added new examples and renamed some of the old ones
- 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.
- Lots of test and documentation updates.
Edited by Seth Parker