Skip to content

Viewer rotation (90° defaults + arbitrary angle) #31

Description

@diegospa99

Goal

Rotate the morphology / cell-segment / edge view to a different orientation than the source image.

Why

Xenium pucks come out of the instrument in a fixed orientation that's often not the most useful one for analysis or presentation:

  • Comparing similar regions across pucks is easier when their dominant tissue axis is aligned
  • Publication-ready figures often want a specific orientation (e.g., pleura at the top)
  • Some pucks are mounted sideways or upside-down relative to anatomical convention

Today the viewer is locked to the source orientation. Currently TMA-style slides render top-to-bottom and the user can't reorient.

Proposed UI

MVP — 90° increments (4 positions):

  • A small rotation control (button group or 4 chevron icons) in the toolbar near Pan / Region / Measure / Save PNG / Split
  • Rotates: 0° → 90° → 180° → 270° → back to 0°
  • All layers rotate together (morphology, transcripts, cell segments, tissue graph, edges)
  • The bird's-eye view inset also rotates to match
  • Click-to-inspect coordinates remain correct (rotated coords → original cell IDs)

Stretch — arbitrary angle:

  • A small angle input or rotation slider (0–360°)
  • Snap-to-90° toggle for easy alignment
  • Persists across dataset switches within a session (or not — open to discussion)

Out of scope

  • Flipping (mirror across an axis) — separate issue if useful
  • Per-puck rotation memory across sessions — separate issue
  • Rotation of saved-region exports — would inherit rotation but the region geometry should be preserved in original coords

Implementation note

Likely a CSS / canvas transform on the OpenSeadragon viewport (or whichever rendering layer is in use). Coordinate transforms need to be applied to edge endpoints + cell-segment polygons so picking still works.

Use case driving this

Currently doing a manuscript-level visual audit of LR mechanisms per neighborhood (N4 fibrotic-mimetic). Comparing the same mechanism across multiple PNX timepoints / pucks is much easier when all pucks present with the same anatomical orientation.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions