Difference between revisions of "Documentation/Labs/VTKWidgets"
From Slicer Wiki
Line 33: | Line 33: | ||
=Design and Implementation= | =Design and Implementation= | ||
+ | |||
+ | For the fiducials, we are currently using a vtkSeedWidget in both 2D and 3D. With the oriented polygonal handle representation being the only option to show a glyph and text together, and it being a 3D widget, it introduces some quirks in the 2D viewers. The Markups displayable managers have already been split into 2D and 3D versions to deal with this. | ||
+ | |||
+ | Some approaches: | ||
+ | |||
+ | * subclass the seed widget and representation and handles and create Slicer specific implementations | ||
+ | ** Cons: | ||
+ | ***not easy to feed back into VTK | ||
+ | ** Pros: | ||
+ | ***full control | ||
+ | * modify the Slicer specific VTK github fork to implement the features we need in C++, then migrate them back via gerrit | ||
+ | ** Cons: | ||
+ | *** Still constrained by the VTK implementation as a starting point | ||
+ | ** Pros: | ||
+ | *** more freedom to experiment/customise | ||
+ | *** easy to feed back into VTK | ||
+ | * Port the Slicer3 Tcl implmentation of the 2D fiducials to Python for Slicer4 | ||
+ | ** Cons: | ||
+ | *** issues with the reloadability of the scripted displayable managers | ||
+ | *** not easy to feed back into VTK | ||
+ | ** Pros: | ||
+ | *** full control | ||
+ | *** nominally easier as that version supported many of our missing use cases | ||
=References= | =References= |
Revision as of 22:29, 31 March 2015
Home < Documentation < Labs < VTKWidgetsContents
Motivation
This page has the following purposes:
- It documents the user and developer features we wish to support in Slicer's version of the VTK Widgets
- It documents the changes we would like to ultimately see implemented in the official VTK Widgets.
- It presents Slicer specific implementation acting as a "experimental ground" to better understand how VTK widgets could be updated.
Features Missing in 4.4
For Users
- Control L to make a new fiducial list
- Control I for persistent place toggle
- Control M to make a ruler between last two placed fiducials
- back tick and control/shift back tick to jump slices to fiducials
- delete or backspace (or 'd') to delete fiducial under mouse
- 'p' to place fiducial without having to click in window to grab focus
- Right click context menu (allow all operations currently supported in the table widget in the Markups GUI)
- modifier key to move fiducials between slices in 2D
- scaling issues (2D widget is scaled down by 300x compared to 3D)
- restrict to surface (found issues with the point placer wrt how it would be used in Slicer)
- rubber band placement for rulers
For Developers
- A start/end and moving event with seed number
- A start/end and hover event
- near widget vs near handle events
- A 2D version of the oriented handle widget
- consistent widget interfaces for click to place as well as programatic placement (vs them being added with zero size and having to be manipulated)
- consistent distribution of settings from the widget to all handles (process events on/off, visibility, display properties).
- expanded WidgetState settings that can be queried and maybe set
Design and Implementation
For the fiducials, we are currently using a vtkSeedWidget in both 2D and 3D. With the oriented polygonal handle representation being the only option to show a glyph and text together, and it being a 3D widget, it introduces some quirks in the 2D viewers. The Markups displayable managers have already been split into 2D and 3D versions to deal with this.
Some approaches:
- subclass the seed widget and representation and handles and create Slicer specific implementations
- Cons:
- not easy to feed back into VTK
- Pros:
- full control
- Cons:
- modify the Slicer specific VTK github fork to implement the features we need in C++, then migrate them back via gerrit
- Cons:
- Still constrained by the VTK implementation as a starting point
- Pros:
- more freedom to experiment/customise
- easy to feed back into VTK
- Cons:
- Port the Slicer3 Tcl implmentation of the 2D fiducials to Python for Slicer4
- Cons:
- issues with the reloadability of the scripted displayable managers
- not easy to feed back into VTK
- Pros:
- full control
- nominally easier as that version supported many of our missing use cases
- Cons: