mirror of
https://github.com/storytold/cadcraft.git
synced 2026-11-09 20:10:12 -06:00
Main now has its own proxy class handling for DWG saves (`proxy_classes`, frombf137e2c,31935157and946af874) and the application object conversion of #2917. This branch is brought onto that: - Cargo.lock, crates/dwg/Cargo.toml and xtask/src/layers.rs are main's. `dwg` no longer depends on `dxf`: the source classes are read from the bridge's ASCII DXF by a bounded scan in `proxy_transport::source_classes`, as main's `dxf_class_names` reads their names. - Saving as DWG 2013 or later restores the source classes in their places (duplicate names and metadata kept) when every CLASS record can be written back. Otherwise (before 2013, a binary DXF, a malformed or unused bad CLASS) main's `proxy_classes` runs: proxies are matched by name or left out and counted as unwritten. Nothing returns an error any more, so a drawing with proxies saves in its own pre-2013 version, without them, as the save report says. A proxy whose number names no source class is left out and counted. - The loss report is main's `not_saved_as` (`Foreign::proxy_class`); `preserves_proxy_entity` and this branch's report test are gone. - On DWG read, `prepare` runs after `application_objects`, so the proxy objects that makes are numbered as the DXF numbers them. It uses main's `proxy_dwg_version`. A registered entity with decoded properties and opaque data now stays as read, as on main, and a read note names it, instead of being dropped. Tests: `cargo test -p cadcraft-dwg` 37 passed, `-p cadcraft-io` all passed (25 ignored), `-p cadcraft-doc`, `-p cadcraft-engine --test save_reports_not_saved` and `--test it` passed; clippy `-p cadcraft-dwg -p cadcraft-io -p cadcraft-doc -p cadcraft-engine --all-targets -D warnings`, fmt, `cargo xtask layers` and the wasm32 check of cadcraft-io pass. `registered_proxy` now checks that a pre-2013 DWG save leaves the proxy out and keeps the rest; main's proxy tests in crates/io/src/tests.rs pass unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H43qQA41CJLauqXnPgBQ7r