-
Notifications
You must be signed in to change notification settings - Fork 65
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
New Feature: Multiplanar Oblique Views #359
Conversation
✅ Deploy Preview for volview-dev ready!Built without sensitive environment variables
To edit notification comments on pull requests, go to your Netlify site configuration. |
ac0af62
to
82ce49f
Compare
82ce49f
to
79f7296
Compare
79f7296
to
d281a34
Compare
d281a34
to
8f52381
Compare
I seem to be getting some initial flickering behavior. Repro: load the protate example, then switch to the oblique only view. Moving my mouse over the three views (intersecting with the reslice cursor widget) causes the rendering to change. |
182486f
to
5738aa3
Compare
Updated the branch to fix this issue, and some other interaction issues regarding panning operation. Please test again. |
I think a good next step for this is to use this in place of the 2D views, especially paired with Kitware/vtk-js#2887. And a subsequent step would be if the volume is too big for GPU memory (based on some arbitrary threshold and user setting), we can fall back to the ImageMapper. |
eb2d9d8
to
51f2555
Compare
40c18fa
to
b34d440
Compare
b34d440
to
443ff8a
Compare
Add a global `reset views` button to reset all currently mounted views in the layout. The tool button's emitted event can be listened through newly added custom-events store.
Move instantiation of vtkResliceCursorWidget to App component so that only one is created and shared between the oblique views.
The 3D view re-uses the reslice proxy representations from the 2D views, and adds an outline for the ImageData for context.
Remove the individual camera reset buttons within the 2D viewports. Since all three oblique 2D views are linked via the reslice cursor widget, they affect each other anyway. The global camera reset button does the same thing.
Update and sync outline colors with orientation box icon Use parallel projection for 3D oblique view
Create a new representation proxy called vtkMultiSliceRepresentationProxy, which will represent the outline box of the source imagedata and the three vtkResliceRepresentationProxy reslice proxies internally. Update VtkObliqueThreeView to use this new proxy. This is required since the architecture of VolView is designed such that in any given "view", there can be exactly one representation proxy that can be used for each source type (e.g. vtkImageData).
Temporarily disable all tools that do not work in oblique views layout. These will be re-enabled as support for each tool is added.
739be23
to
125a335
Compare
125a335
to
64cb97c
Compare
Looking good! Is not crashing. Orientation is fixed. For me the layout menu still doesn't auto-close when an option has been selected. My preference is to continue to have sliders for moving between slices in each view - but I realize that this is a bit odd, since the amount you should step when you advance a "slice" in an oblique direction is not well defined. However, I think it would be useful in practice. Could you set the step size to the smallest of the voxel spacing values for every window and then provide sliders similar to the sliders in the quad / axial views? If you don't have time for the slider or for auto-closing the layout menu now, you can merge as-is, and I can make an issue/feature requests instead. Overall, this is outstanding! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
Yes, setting the step size to the smallest spacing would be good empirical default I think. I will check if this and the menu closing can be done quickly / easily. |
For some reason (can't recall why), we used a slightly different approach within ResliceCursorWidget: The idea is that 1 step should "change" the current slice. (a tiny voxel spacing in an axis (e.g. Z) should not impact the XZ plane sliding). I believe the code I shared is wrong because it does not apply the "spacing" on |
I'll help address the e2e test failures |
I'm good to merge soon. Anything else @jadh4v? |
Yes, let's merge. I will do another PR for adding the sliders. It will need some additional work regarding dynamic update of range and slider position (when plane rotates). |
Add a new layout with Multiplanar Oblique Views
Sub-tasks:
Add proxy class for ResliceImageMapper vtk-js#2850
Add typescript definitions and expose lineWidth in vtkGeometryRepresentationProxy vtk-js#2906
Additional Fixes (9/28/2023):
A complete list of all vtk-js PRs related to this Volview feature:
Kitware/vtk-js#2908
Kitware/vtk-js#2906
Kitware/vtk-js#2896
Kitware/vtk-js#2895
Kitware/vtk-js#2888
Kitware/vtk-js#2883
Kitware/vtk-js#2850
Kitware/vtk-js#2847
oblique-views-volview.mp4