fix(hatch): deselect refresh, boundary offset, fill-click
Three hatch fixes: - Selected hatches are tinted, but the hatch model cache and GPU upload were keyed only on geometry_epoch, so Esc cleared the selection set without repainting — the hatch stayed blue (#71). Key both on selection_generation too. - add_hatch stored the boundary entity in local render space, so the boundary wire re-projected `world_offset` away from the fill on offset (large-coordinate) drawings. Build it in WCS. - Clicking a hatch only selected it on its boundary wire, not its fill. Two causes: visible_hatches_for_click used a narrower block-visibility test than the render path (fill drawn but not clickable), and point_in_polygon closed every NaN sub-path — degrading the explicit 2-point edge encoding of a boundary into zero-area loops. Mirror the render's visibility test and only auto-close sub-paths of >=3 verts. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
ebf12780c5
commit
6b4272521c
4 changed files with 82 additions and 37 deletions
|
|
@ -119,7 +119,10 @@ pub struct Pipeline {
|
|||
/// Last `(geometry_epoch, camera_generation)` value for which GPU buffers
|
||||
/// were uploaded. We re-upload when either side changes — pan/zoom bumps
|
||||
/// camera_generation, which triggers re-culling and a fresh upload.
|
||||
pub cached_epoch: (u64, u64),
|
||||
/// `(geometry_epoch, camera_generation, selection_generation)` of the
|
||||
/// last static-buffer upload. Selection is tracked so the selected-hatch
|
||||
/// tint refreshes on select / deselect (issue #71).
|
||||
pub cached_epoch: (u64, u64, u64),
|
||||
/// Content id of the wire buffer currently resident on the GPU (Phase
|
||||
/// 3.2). When the incoming `ViewportData.wire_content_id` matches, the
|
||||
/// world-space wire vertices are unchanged (e.g. a pure pan reused the
|
||||
|
|
@ -899,7 +902,7 @@ impl Pipeline {
|
|||
gpu_face3d_fill: None,
|
||||
gpu_face3d_edges: vec![],
|
||||
viewcube,
|
||||
cached_epoch: (u64::MAX, u64::MAX),
|
||||
cached_epoch: (u64::MAX, u64::MAX, u64::MAX),
|
||||
cached_wire_id: u64::MAX,
|
||||
cached_selection: (u64::MAX, u64::MAX),
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue