forked from 1b-agent/opencadstudio-upstream
Every pan/rotate on a large drawing jerked once at the start of the gesture. Instrumentation traced it to `paper_sheet_wires_arc` re-running a full ~300 ms tessellation of the whole model block on the first hit-test after each camera move. `entity_wires_arc` (the pick/snap source in Model layout) delegated to the camera_generation-keyed, view-culled `paper_sheet_wires_arc`. A camera move bumps `camera_generation`, so the next hit-test cold-missed that cache and re-tessellated every visible entity — O(visible), which is why the jump grew with on-screen object count and shrank when zoomed in. The GPU render was unaffected (it holds the separate camera-independent `model_static_wires`), so only that one CPU frame stalled and the accumulated mouse motion applied at once, reading as a jump. Point the Model pick path at the same resident static set the render holds (keyed on geometry_epoch only). Pick wants every entity, not a view-culled subset, so this is also more correct — off-screen entities stay pickable — and it never re-tessellates on a camera move. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>