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 FindEdgePath for finding the shortest path between two vertices.
    • Add type member typedef for accessing the underlying type of the mesh's vertex elements.
    • Vertex: Add property function normal()
    • Edge: Add properties magnitude() and prev for previous edge in the triangle
    • Face: Add properties area(), barycenter(), and normal()
    • 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 using insert_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, and face getter 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() and split_path() functions for inserting seams in the mesh
  • 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

Merge request reports

Loading