Skip to content

MATERIAL (30 records): per-map block layout needs a corpus file with a non-default material #49

Open

Description

@DrunkOnJava

#47 withdrew MATERIAL's wrong field list (it decoded ambient_color_method = 542113793 on the very first field) and kept only proven content: names/description from the string stream plus the measured data budget (1264 bits R2004, 1284 R2010/R2013, 516/516/1028 R2018). Twelve BD slots decode to exactly 1/48 at data bits 46, 120, 250, 324, 510, 584, 706, 780, 900, 974, 1096, 1170 - six pairs 74 bits apart, one per texture map - but inter-pair gaps (204/260/196/194/196) pin no repeating block. Every file has only ByLayer/ByBlock/Global, bit-identical apart from the name, so the joint-boundary search has nothing to bite on. Needs a redistributable DWG with a user-defined material (a synthetic one from examples/build_fixtures.rs once the writer can emit MATERIAL, or a permissively-licensed sample). Tracked as Unhandled until then.

Activity

  1. added
    type:specImplements or verifies a numbered section of ODA spec v5.4.1
    area:objectsCommon object formats and non-graphical objects (§20.1 to §20.3, §20.4 objects, §28)
    priority:P2Quality and completeness
    blocked:sampleNeeds a corpus file with variation the corpus lacks
    and removed on Oct 21, 2026
  2. DrunkOnJava commented on Oct 21, 2026

    @DrunkOnJava
    OwnerAuthor

    A MATERIAL joint-boundary probe, examples/probe_material.rs, was written in a local worktree (feat/xrecord-material) but never committed. It is preserved at refs/archive/2026-10-21/xrecord-material-probes (commit d6ac794, based on 44cc130; fetch it with git fetch origin refs/archive/2026-10-21/xrecord-material-probes). It has not been rebuilt against current main. It runs a candidate field spec against every MATERIAL record and reports each record's delta to its boundary. A spec only counts when every record of every file lands at delta 0.

  3. DrunkOnJava commented on Oct 26, 2026

    @DrunkOnJava
    OwnerAuthor

    MATERIAL survey, 2026-10-26, examples/probe_material.rs (#222) on the 19-file corpus

    The corpus holds 65 MATERIAL records, not 30, and eight of them are not defaults. All in sample_AC1032.dwg:

    Handle Name Budget, bits Strings
    0x96 / 0x97 / 0x98 ByLayer / ByBlock / Global 516 / 516 / 1028 7 each
    0xDAA Beech 554 4
    0xDB6 Bamboo 1066 4 (two texture-map paths)
    0xDC0 Aluminum Cast 946 3 (one path)
    0xDCA Exposed Aggregate 1130 4 (two paths)
    0xDD4 1.5in Square - Medium Blue 1130 4 (two paths)
    0xDDE Asphalt - Wet 1066 4 (two paths)
    0xDE8 Ashlar - Patterned 874 4 (two paths)
    0xDF2 Blue 738 2

    The other 18 files carry only the three defaults, with the budgets the module documents, now measured on every band: R14, R2000 and R2004 all 1340 / 1340 / 1332 with the two TVs inline (1264 after TV,TV on all three), R2007, R2010 and R2013 all 1284.

    So the joint-boundary search does have something to bite on, on R2018 only: eight records whose budgets differ by map count (the ones with texture paths are the long ones), which should separate a per-map block from the fixed fields. sample_AC1032.dwg has no known source (#96), so it serves as measurement evidence, not as a redistributable fixture; the request for a redistributable file with a user material still stands for CI.

    Two corrections for whoever picks this up: the module table in src/objects/acad_material.rs lists 3 records for sample_AC1032.dwg (there are 11), and this issue's title count (30) is the R2004, R2010 and R2013 files plus the three R2018 defaults: the R14, R2000 and R2007 walks (#72) add 27, and the eight library materials the other 8.

    Reproduce: cargo run --release --example probe_material -- ../../samples/*.dwg [spec]; MAT_BD=1 reproduces the twelve 1/48 slots at the offsets above on arc_2010.dwg.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:objectsCommon object formats and non-graphical objects (§20.1 to §20.3, §20.4 objects, §28)blocked:sampleNeeds a corpus file with variation the corpus lackspriority:P2Quality and completenesstype:specImplements or verifies a numbered section of ODA spec v5.4.1

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions