Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DRAFT: ADR 61 - Volumetric Viewer #6193

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions docs/arch/adr-60.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# ADR 60: Volumetric Viewer

## Status

Proposed: 2024-08-06

## Context

As part of an NIH grant, there is a need for a 3D viewer and annotation tools for FEM. Specifically, there is a need to visualize a "cube" of data and explore it volumetrically. Additionally, as part a follow up ADR, a method to generate and efficiently store the annotations to the data is needed. A prototype of the viewer - [VolumetricViewer](https://github.com/zooniverse/volumetric-viewer) - has been developed and released for alpha testing, with the feedback being compiled into the below recommendation.

## Decision

The Volumetric Viewer is a separate viewer than all the other viewers because of how it handles 3D data. The concept of pan, zoom, rotate, and annotation models take on a different level of complexity within a 3D context, therefore the viewer should be separate with tailored controls for the 3D context.

Comment on lines +13 to +14
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the word "separate" here can be confusing because some subject viewers are already "separate" from each other. For instance, the JSONDataViewer is completely separate from the FlipbookViewer. I recommend using language such as:

"The Volumetric Viewer is a unique viewer in that it handles a new type of data. The concept of pan, zoom, and rotate take on a 3D context, therefore the viewer will have tailored controls instead of the default ImageToolbar".

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could expand on the above statement by mentioning that the viewer will use all internal state for pan, zoom, and rotation rather than the MobX Store (if that's something you're fairly certain about, for instance I don't see any reason why you'd need a mobx store for those UI features).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd also like to see description of "why Three.js" here. The prototyping phase involved heavy research into how to display 3D subjects in our existing classifier and any dev wishing to expand on the concept should have insight into that researching phase.

## Features

Features of the FEM Volumetric Viewer will include:
1. Configuration of Volumetric Viewer for 3D volumetric and/or 2D planar view choice
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Configuration implies setup in a dashboard like the project builder. "Toggling between 3D volumetric and/or 2D planar view" communicates the UI/UX intent.

1. Mouse and/or Keyboard interactions for navigating the volumetric data in both 2D & 3D
1. Mouse and/or Keyboard interactions for annotating the volumetric data in both 2D & 3D
1. Hiding of the ImageToolbar component (pan, zoom, rotate, invert, etc)

### Viewer Configuration
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What part of lib-classifier does this file live in? Are these properties meant to be added to the SubjectViewerStore?


```js
{
enable2D: <Integer:0-10>,
frame: [<Integer:x-coordinate>, <Integer:y-coordinate>, <Integer:z-coordinate>]
threshold: <Integer:0-10>,
tool: 'point-volumetric'
}
```