forked from 1b-agent/opencadstudio-upstream
A DWG DIMENSION references an anonymous *D<n> block that holds its drawn geometry; AutoCAD-family readers render that block rather than re-deriving it from the definition points. OCS re-tessellates dimensions for display and never materialises the block, so on save a created dimension goes out referencing a block that doesn't exist and the writer emits a null block handle. Strict readers (DWG TrueView, QCAD) then drop the dimension or demand a recovery, and lenient ones (BricsCAD) regenerate it at a different position. Add bake_dimension_blocks(), called on the cloned document in io::save_as_version / save_to_bytes, which builds a *D<n> anonymous block from each block-less dimension's exploded geometry (extension lines + dimension line + measurement text) and points its block_name at it. Dimensions that already own a block (imported, or copied via the *D-cloning copy path) are left untouched. Verified end-to-end: before, AutoCAD/Civil 3D 2026 reads 0 dimensions from an OCS-saved file; after baking it reads all of them. Fixes #178, #181, #182. Co-Authored-By: Claude Opus 4.8 <[email protected]>