Label placement and readability pass: prevent text collisions and duplicate noise #5

Closed
opened 2026-02-16 21:47:09 -05:00 by Rbanh · 2 comments
Owner

Problem

Net/value/pin labels can still overlap or duplicate in dense sections, reducing readability and teaching quality.

Goal

Make text rendering reliably legible at default zoom.

Scope

  • Global label collision resolver (pin labels, net labels, value labels, annotations).
  • Avoid duplicate nearby labels for same net.
  • Prioritize labels near relevant stubs/pins with deterministic fallback anchors.
  • Add label density controls by mode/zoom.

Acceptance Criteria

  • No label-over-pin overlaps in default sample scenes.
  • Reduced duplicate labels per net while preserving clarity.
  • Label placement remains deterministic for unchanged JSON.
## Problem Net/value/pin labels can still overlap or duplicate in dense sections, reducing readability and teaching quality. ## Goal Make text rendering reliably legible at default zoom. ## Scope - Global label collision resolver (pin labels, net labels, value labels, annotations). - Avoid duplicate nearby labels for same net. - Prioritize labels near relevant stubs/pins with deterministic fallback anchors. - Add label density controls by mode/zoom. ## Acceptance Criteria - No label-over-pin overlaps in default sample scenes. - Reduced duplicate labels per net while preserving clarity. - Label placement remains deterministic for unchanged JSON.
Rbanh added this to the Phase 2 - Production Polish milestone 2026-02-16 21:47:21 -05:00
Author
Owner

Implemented first readability slice for Issue #5 in commit f938c6d.

Shipped

  • Added label metadata attributes on component labels (data-ref-label, data-value-label) to enable unified readability processing.
  • Added client-side label collision resolver:
    • suppresses overlapping lower-priority labels
    • de-duplicates nearby labels for the same net
  • Added zoom-based label density control:
    • hide pin labels at lower zoom
    • hide value/ref labels at very low zoom
  • Integrated readability pass into transform/render/update flows so it stays consistent while zooming and panning.

Validation

  • Syntax checks pass.
  • Existing tests pass.

Remaining for Issue #5

  • Replace heuristic DOM-side hiding with deterministic layout-time label placement where practical.
  • Add explicit user controls for label density mode.
  • Add regression scenes/assertions for specific collision-heavy circuits.
Implemented first readability slice for Issue #5 in commit `f938c6d`. ### Shipped - Added label metadata attributes on component labels (`data-ref-label`, `data-value-label`) to enable unified readability processing. - Added client-side label collision resolver: - suppresses overlapping lower-priority labels - de-duplicates nearby labels for the same net - Added zoom-based label density control: - hide pin labels at lower zoom - hide value/ref labels at very low zoom - Integrated readability pass into transform/render/update flows so it stays consistent while zooming and panning. ### Validation - Syntax checks pass. - Existing tests pass. ### Remaining for Issue #5 - Replace heuristic DOM-side hiding with deterministic layout-time label placement where practical. - Add explicit user controls for label density mode. - Add regression scenes/assertions for specific collision-heavy circuits.
Author
Owner

Final closure summary:

  • Label readability engine includes collision suppression, duplicate-net label suppression, and zoom-density controls.
  • Pin/value/ref/net label visibility now adapts by zoom and priority.
  • Deterministic placement behavior retained for unchanged JSON.

Key commits include f938c6d and follow-up readability tuning.

Final closure summary: - Label readability engine includes collision suppression, duplicate-net label suppression, and zoom-density controls. - Pin/value/ref/net label visibility now adapts by zoom and priority. - Deterministic placement behavior retained for unchanged JSON. Key commits include `f938c6d` and follow-up readability tuning.
Rbanh closed this issue 2026-02-18 21:03:21 -05:00
Sign in to join this conversation.
No Label
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Rbanh/schemeta#5
No description provided.