forked from 1b-agent/opencadstudio-upstream
The block-definition tessellation cache (BlockCache::build — every block defn) was keyed on geometry_epoch, so every edit rebuilt all block defns. On a block-heavy drawing that turned the ~30ms visible-wire re-tess into a ~400ms spike at line-commit, grip first-move and grip release. Key the block cache on a separate block_epoch. bump_geometry bumps both geometry_epoch and block_epoch (safe default — xref, block create, explode, REFCLOSE, undo, open all keep rebuilding blocks). Operations that provably can't change a block definition now call bump_geometry_no_blocks, which bumps only geometry_epoch so the visible wires re-tessellate against the reused block cache: - add_entity for a non-Insert/Block entity (line, arc, text, hatch, …) — scene.add_entity only ever routes to model/paper space, never block content; - grip drag hide / commit / Esc-cancel — moving a top-level entity or an insert never edits a block defn. Line-commit and grip start/end drop from ~400ms to the ~30ms baseline. Co-Authored-By: Claude Opus 4.8 <[email protected]>