Skip to content

[F2] Multi-chart packing in a common world coordinate frame #18

@csparker247

Description

@csparker247

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions