Summary
After tearing a mesh with split_path and parameterizing each connected component independently (#19 / F3), each chart is a free-floating 2D mesh in its own coordinate frame. F2 packs those flattened sub-meshes into a shared world coordinate frame — scaled to preserve relative area ratios and laid out so they do not overlap.
Scope
F2 operates on geometry, not on UV map structures. Input: a list of parameterized HalfEdgeMesh instances. Output: each sub-mesh's 2D vertex positions are rewritten so the whole set lives in a common frame. Downstream consumers (mesh IO, atlas writers, external UV-map types) can build atlases or vt tables from the resulting positions.
Explicitly out of scope
- A
UVMap / per-wedge UV map class. UV-map data structures belong in a different repository (consumer-side). OpenABF produces parameterized meshes and places them in a shared frame; it does not own UV map types.
- Writing UV coordinates back onto the input mesh's vertices. This was the original design of
ParameterizeConnectedComponents (proposed under F3) and was abandoned: a single mesh vertex can be shared across multiple charts after tearing, and any write-back strategy silently destroys data for the shared-vertex case.
Proposed API
// Translate/scale each chart in place so the whole set lives in a common frame
PackCharts(std::vector<MeshType::Pointer>& charts, ...);
Acceptance Criteria
- Each chart's vertex positions are rewritten to fit a shared world coordinate frame
- Charts are uniformly scaled across the set (preserves relative area ratios)
- No charts overlap; all fit within the target frame
- Tests verify non-overlap + containment
- At minimum a shelf-packing implementation
Dependencies
Conductor Track
F2
Summary
After tearing a mesh with
split_pathand parameterizing each connected component independently (#19 / F3), each chart is a free-floating 2D mesh in its own coordinate frame. F2 packs those flattened sub-meshes into a shared world coordinate frame — scaled to preserve relative area ratios and laid out so they do not overlap.Scope
F2 operates on geometry, not on UV map structures. Input: a list of parameterized
HalfEdgeMeshinstances. Output: each sub-mesh's 2D vertex positions are rewritten so the whole set lives in a common frame. Downstream consumers (mesh IO, atlas writers, external UV-map types) can build atlases orvttables from the resulting positions.Explicitly out of scope
UVMap/ per-wedge UV map class. UV-map data structures belong in a different repository (consumer-side). OpenABF produces parameterized meshes and places them in a shared frame; it does not own UV map types.ParameterizeConnectedComponents(proposed under F3) and was abandoned: a single mesh vertex can be shared across multiple charts after tearing, and any write-back strategy silently destroys data for the shared-vertex case.Proposed API
Acceptance Criteria
Dependencies
HEM::extract_connected_components()provides the input)Conductor Track
F2