Releases: educelab/OpenABF
Version 2.1.0
What's Changed
- Fix B3 (Vec reverse iterator return types) and B1 (ABF lambda update index) by @csparker247 in #29
- Fix B7 (PlanGrad unused allocation) and B2 (ABFPlusPlus hardcoded 1.F) by @csparker247 in #30
- Fix B4 (Vec binary * and / constrained to arithmetic scalars) by @csparker247 in #31
- Fix B5 (is_file_type bounds check) and B6 (PLY vmap validation) by @csparker247 in #32
- Fix M4 (operator<< moved inside OpenABF namespace) by @csparker247 in #33
- Fix M1 (barycenter return type) and M2 (magnitude const) by @csparker247 in #34
- Fix M3: rename detail::erase_if to detail::filter by @csparker247 in #35
- perf: replace vector-returning iteration methods with lazy ranges (P1 + A2) by @csparker247 in #36
- docs: document insert_face boundary update behavior (A3) by @csparker247 in #38
- refactor: add [[nodiscard]] to gradient() and replace vIdx2vIntIdx map with vector (A4, P2) by @csparker247 in #37
- test: add double-precision parameterization tests (F4) by @csparker247 in #39
- feat: add configurable gradient threshold to ABF and ABFPlusPlus (A1) by @csparker247 in #40
- refactor: extract addContrib lambda in AngleBasedLSCM matrix assembly (A6) by @csparker247 in #41
- feat: add explicit pin selection to AngleBasedLSCM (A5) by @csparker247 in #43
- Deploy Doxygen docs to GitHub Pages by @Copilot in #61
- chore: bump version to v2.1.0 by @Copilot in #60
- Add two-stage release pipeline (RC + final) with downstream dispatch by @Copilot in #59
- feat: Hierarchical LSCM (HLSCM) - cascadic multigrid UV parameterization by @csparker247 in #44
- Change auto* to auto in trim_left/right by @ramcdona in #72
- Fix install CMake files in architecture independent directory by @bkmgit in #74
- Fix edges_ staleness in split_edge; rename detail::filter; clean up exceptions by @csparker247 in #79
- F3: HalfEdgeMesh::extract_connected_components() by @csparker247 in #80
- Add face_map to ExtractedComponent by @csparker247 in #81
- test(hlscm): verify levelRatio actually affects hierarchy (T8) by @csparker247 in #82
- test(hlscm): assert pinned vertex UVs in setPinnedVertices test (T6) by @csparker247 in #83
- docs(hlscm): mark detail::hlscm types as @internal (A9) by @csparker247 in #84
- test(hlscm): use curved mesh for ABFPlusPlusAnglePreservation (T7) by @csparker247 in #85
- test(hlscm): direct unit tests for internal HLSCM components (T5) by @csparker247 in #86
- feat: add sphere cap built-in mesh generator to benchmark (E2) by @csparker247 in #87
- refactor(A8): extract shared LSCM system-building utility by @csparker247 in #88
- chore: sync index.md status for closed Conductor tracks by @csparker247 in #89
- docs: clear remaining Doxygen warnings by @csparker247 in #90
- perf(lscm): benchmark IncompleteCholesky CG; keep SparseLU default by @csparker247 in #91
- perf(hlscm): cut per-collapse and per-level heap allocations by @csparker247 in #92
- feat(lscm): multi-pin UV constraints on ABLSCM and HLSCM by @csparker247 in #93
- refactor: align identifier naming with codebase convention (#94) by @csparker247 in #95
- feat(hlscm): static Compute() overload with hierarchy tuning by @csparker247 in #97
New Contributors
- @Copilot made their first contribution in #61
- @ramcdona made their first contribution in #72
- @bkmgit made their first contribution in #74
Full Changelog: v2.0.0...v2.1.0
Version 2.1.0, Release Candidate 1
What's Changed
- Fix B3 (Vec reverse iterator return types) and B1 (ABF lambda update index) by @csparker247 in #29
- Fix B7 (PlanGrad unused allocation) and B2 (ABFPlusPlus hardcoded 1.F) by @csparker247 in #30
- Fix B4 (Vec binary * and / constrained to arithmetic scalars) by @csparker247 in #31
- Fix B5 (is_file_type bounds check) and B6 (PLY vmap validation) by @csparker247 in #32
- Fix M4 (operator<< moved inside OpenABF namespace) by @csparker247 in #33
- Fix M1 (barycenter return type) and M2 (magnitude const) by @csparker247 in #34
- Fix M3: rename detail::erase_if to detail::filter by @csparker247 in #35
- perf: replace vector-returning iteration methods with lazy ranges (P1 + A2) by @csparker247 in #36
- docs: document insert_face boundary update behavior (A3) by @csparker247 in #38
- refactor: add [[nodiscard]] to gradient() and replace vIdx2vIntIdx map with vector (A4, P2) by @csparker247 in #37
- test: add double-precision parameterization tests (F4) by @csparker247 in #39
- feat: add configurable gradient threshold to ABF and ABFPlusPlus (A1) by @csparker247 in #40
- refactor: extract addContrib lambda in AngleBasedLSCM matrix assembly (A6) by @csparker247 in #41
- feat: add explicit pin selection to AngleBasedLSCM (A5) by @csparker247 in #43
- Deploy Doxygen docs to GitHub Pages by @Copilot in #61
- chore: bump version to v2.1.0 by @Copilot in #60
New Contributors
- @Copilot made their first contribution in #61
Full Changelog: v2.0.0...v2.1.0-rc.1
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.