docs: Layout2D index semantics, CLI table, CLI roadmap (U9+U10+U11)
Some checks failed
C++ Tests / test-fast (push) Has been cancelled
C++ Tests / test-cgal (push) Has been cancelled
C++ Tests / quality-gates (push) Has been cancelled
API Docs / doc-build (push) Has been cancelled
Markdown link check / check (push) Has been cancelled
C++ Tests / test-fast (pull_request) Successful in 2m10s
C++ Tests / quality-gates (pull_request) Has been skipped
C++ Tests / test-cgal (pull_request) Has been skipped
Some checks failed
C++ Tests / test-fast (push) Has been cancelled
C++ Tests / test-cgal (push) Has been cancelled
C++ Tests / quality-gates (push) Has been cancelled
API Docs / doc-build (push) Has been cancelled
Markdown link check / check (push) Has been cancelled
C++ Tests / test-fast (pull_request) Successful in 2m10s
C++ Tests / quality-gates (pull_request) Has been skipped
C++ Tests / test-cgal (pull_request) Has been skipped
U9 (layout.hpp + example_layout.cpp)
Layout2D.uv and .halfedge_uv now have explicit Doxygen docs stating:
- indexing: v.idx() / h.idx() (raw integer index)
- length: mesh.number_of_vertices() / number_of_halfedges()
- precondition: no vertex removal / collect_garbage() after loading
- access pattern example in the doc comment
example_layout.cpp: access site comment + static_cast<size_t>(v.idx())
U10 (getting-started.md)
New 'CLI parameter reference' table (7 rows) added directly below the
CLI usage examples; cross-references --help as the canonical source
U11 (doc/roadmap/phases.md)
New Phase 9h 'CLI usability extensions' section inserted before Phase 10:
9h.1 --tol / --max-iter solver-tuning params (~30 min, no deps)
9h.2 -g cp_euclidean / -g inversive_distance (~2-4 h, needs 9a ✅)
Each sub-task has effort estimate, implementation sketch, and
acceptance criteria so a future session can pick it up cold.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -138,18 +138,38 @@ struct MobiusMap {
|
||||
/// per-vertex UV coordinates plus a per-half-edge UV atlas for seamed
|
||||
/// textures.
|
||||
struct Layout2D {
|
||||
/// uv[v.idx()] — primary 2-D position (first / shallowest-BFS-depth visit).
|
||||
/// Primary 2-D position per vertex (first / shallowest-BFS-depth visit).
|
||||
///
|
||||
/// **Indexing:** `uv[v.idx()]` — indexed by the raw integer vertex index.
|
||||
/// **Length:** `mesh.number_of_vertices()`.
|
||||
///
|
||||
/// \pre No vertices have been removed from `mesh` after loading (i.e.
|
||||
/// `mesh.is_valid()` and no compaction was performed). On a fresh
|
||||
/// `Surface_mesh` loaded from file, `v.idx()` is always in
|
||||
/// `[0, number_of_vertices())` and contiguous. If vertices were
|
||||
/// deleted and `mesh.collect_garbage()` was called, re-run the
|
||||
/// layout — indices will have shifted.
|
||||
///
|
||||
/// Access pattern:
|
||||
/// ```cpp
|
||||
/// for (auto v : mesh.vertices())
|
||||
/// Eigen::Vector2d uv_v = layout.uv[v.idx()];
|
||||
/// ```
|
||||
std::vector<Eigen::Vector2d> uv;
|
||||
|
||||
/// halfedge_uv[h.idx()] — UV of source(h) as seen from face(h).
|
||||
/// UV of `source(h)` as seen from `face(h)`, indexed by `h.idx()`.
|
||||
///
|
||||
/// For interior (non-seam) halfedges: equals uv[source(h).idx()].
|
||||
/// For seam halfedges: carries the UV from the virtual unfolding across
|
||||
/// the cut (i.e. the trilaterated position that was NOT used as the
|
||||
/// primary uv). This gives each face its own copy of a seam vertex,
|
||||
/// enabling a proper GPU texture atlas without vertex duplication.
|
||||
/// **Indexing:** `halfedge_uv[h.idx()]` — raw integer halfedge index.
|
||||
/// **Length:** `mesh.number_of_halfedges()`. Same no-compaction precondition
|
||||
/// as `uv` (see above).
|
||||
///
|
||||
/// Size = mesh.number_of_halfedges(). Border halfedges = (0,0).
|
||||
/// For interior (non-seam) halfedges: equals `uv[source(h).idx()]`.
|
||||
/// For seam halfedges: carries the UV from the virtual unfolding across the
|
||||
/// cut — the trilaterated position that was NOT used as the primary `uv`.
|
||||
/// This gives each face its own copy of a seam vertex, enabling a proper
|
||||
/// per-halfedge GPU texture atlas without vertex duplication.
|
||||
///
|
||||
/// Border halfedges (outer face) hold `(0, 0)`.
|
||||
std::vector<Eigen::Vector2d> halfedge_uv;
|
||||
|
||||
bool success = false; ///< `true` iff the BFS placed every vertex.
|
||||
|
||||
Reference in New Issue
Block a user