File size: 1,341 Bytes
3f3b143 fc56f58 | 1 2 3 4 5 6 7 8 | # Native computed OBJ export
`mb3-obj::encode` emits explicit computed brush contours as polygon faces and patch point grids as quads. It matches all four E02 OBJ captures (old/new triangle and 3×3 patch). Internal coordinates are retained; no MAP axis conversion occurs. Position equality uses finite f32 component equality with signed zero canonicalized for lookup; first occurrence wins within a brush only. Global indices remain 1-based. Patch quad order is `(i,i+stride,i+stride+1,i+1)`.
Computed geometry is required; no clipping/tessellation is performed here. Polygons need at least three vertices; malformed patch array counts and non-finite geometry fail. This is structural export, not a manifold/convexity check. Editable planes/anchors, property tables, UVs and stored normals are absent from OBJ. The CLI must explicitly acknowledge those losses before publication.
Limits cover encoded bytes, aggregate geometry/face elements and requested deduplication-map storage (two key/index slots per unique vertex as a logical accounting unit, excluding hash-table capacity/control overhead and allocator overhead). Reservations are fallible. Formatting uses Rust round-trip decimals, so arbitrary float text need not match historical .NET printing even though the four captures match. No original executable or asset is modified.
|