volview 4.0.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. package/dist/css/app.925b979f.css +1 -0
  2. package/dist/css/chunk-vendors.43a6a19a.css +5 -0
  3. package/{public → dist}/favicon.ico +0 -0
  4. package/{public → dist}/global.css +0 -0
  5. package/{src/assets/KitwareHeadAndNeck.jpg → dist/img/KitwareHeadAndNeck.11db5ffb.jpg} +0 -0
  6. package/dist/index.html +1 -0
  7. package/dist/itk/image-io/BMPImageIOReadImage.js +1 -0
  8. package/dist/itk/image-io/BMPImageIOReadImage.umd.js +1 -0
  9. package/dist/itk/image-io/BMPImageIOReadImage.wasm +0 -0
  10. package/dist/itk/image-io/BMPImageIOWriteImage.js +1 -0
  11. package/dist/itk/image-io/BMPImageIOWriteImage.umd.js +1 -0
  12. package/dist/itk/image-io/BMPImageIOWriteImage.wasm +0 -0
  13. package/dist/itk/image-io/GDCMImageIOReadImage.js +1 -0
  14. package/dist/itk/image-io/GDCMImageIOReadImage.umd.js +1 -0
  15. package/dist/itk/image-io/GDCMImageIOReadImage.wasm +0 -0
  16. package/dist/itk/image-io/GDCMImageIOWriteImage.js +1 -0
  17. package/dist/itk/image-io/GDCMImageIOWriteImage.umd.js +1 -0
  18. package/dist/itk/image-io/GDCMImageIOWriteImage.wasm +0 -0
  19. package/dist/itk/image-io/JPEGImageIOReadImage.js +1 -0
  20. package/dist/itk/image-io/JPEGImageIOReadImage.umd.js +1 -0
  21. package/dist/itk/image-io/JPEGImageIOReadImage.wasm +0 -0
  22. package/dist/itk/image-io/JPEGImageIOWriteImage.js +1 -0
  23. package/dist/itk/image-io/JPEGImageIOWriteImage.umd.js +1 -0
  24. package/dist/itk/image-io/JPEGImageIOWriteImage.wasm +0 -0
  25. package/dist/itk/image-io/MetaImageIOReadImage.js +1 -0
  26. package/dist/itk/image-io/MetaImageIOReadImage.umd.js +1 -0
  27. package/dist/itk/image-io/MetaImageIOReadImage.wasm +0 -0
  28. package/dist/itk/image-io/MetaImageIOWriteImage.js +1 -0
  29. package/dist/itk/image-io/MetaImageIOWriteImage.umd.js +1 -0
  30. package/dist/itk/image-io/MetaImageIOWriteImage.wasm +0 -0
  31. package/dist/itk/image-io/NiftiImageIOReadImage.js +1 -0
  32. package/dist/itk/image-io/NiftiImageIOReadImage.umd.js +1 -0
  33. package/dist/itk/image-io/NiftiImageIOReadImage.wasm +0 -0
  34. package/dist/itk/image-io/NiftiImageIOWriteImage.js +1 -0
  35. package/dist/itk/image-io/NiftiImageIOWriteImage.umd.js +1 -0
  36. package/dist/itk/image-io/NiftiImageIOWriteImage.wasm +0 -0
  37. package/dist/itk/image-io/NrrdImageIOReadImage.js +1 -0
  38. package/dist/itk/image-io/NrrdImageIOReadImage.umd.js +1 -0
  39. package/dist/itk/image-io/NrrdImageIOReadImage.wasm +0 -0
  40. package/dist/itk/image-io/NrrdImageIOWriteImage.js +1 -0
  41. package/dist/itk/image-io/NrrdImageIOWriteImage.umd.js +1 -0
  42. package/dist/itk/image-io/NrrdImageIOWriteImage.wasm +0 -0
  43. package/dist/itk/image-io/PNGImageIOReadImage.js +1 -0
  44. package/dist/itk/image-io/PNGImageIOReadImage.umd.js +1 -0
  45. package/dist/itk/image-io/PNGImageIOReadImage.wasm +0 -0
  46. package/dist/itk/image-io/PNGImageIOWriteImage.js +1 -0
  47. package/dist/itk/image-io/PNGImageIOWriteImage.umd.js +1 -0
  48. package/dist/itk/image-io/PNGImageIOWriteImage.wasm +0 -0
  49. package/dist/itk/image-io/ReadDICOMTags.js +1 -0
  50. package/dist/itk/image-io/ReadDICOMTags.umd.js +1 -0
  51. package/dist/itk/image-io/ReadDICOMTags.wasm +0 -0
  52. package/dist/itk/image-io/ReadImageDICOMFileSeries.js +1 -0
  53. package/dist/itk/image-io/ReadImageDICOMFileSeries.umd.js +1 -0
  54. package/dist/itk/image-io/ReadImageDICOMFileSeries.wasm +0 -0
  55. package/dist/itk/image-io/VTKImageIOReadImage.js +1 -0
  56. package/dist/itk/image-io/VTKImageIOReadImage.umd.js +1 -0
  57. package/dist/itk/image-io/VTKImageIOReadImage.wasm +0 -0
  58. package/dist/itk/image-io/VTKImageIOWriteImage.js +1 -0
  59. package/dist/itk/image-io/VTKImageIOWriteImage.umd.js +1 -0
  60. package/dist/itk/image-io/VTKImageIOWriteImage.wasm +0 -0
  61. package/dist/itk/pipelines/dicom.js +1 -0
  62. package/dist/itk/pipelines/dicom.umd.js +1 -0
  63. package/{src/io/itk-dicom/web-build → dist/itk/pipelines}/dicom.umd.wasm +0 -0
  64. package/{src/io/itk-dicom/web-build → dist/itk/pipelines}/dicom.wasm +0 -0
  65. package/dist/itk/web-workers/IOInput.d.ts +6 -0
  66. package/dist/itk/web-workers/IOInput.js +1 -0
  67. package/dist/itk/web-workers/ITKConfig.d.ts +8 -0
  68. package/dist/itk/web-workers/ITKConfig.js +1 -0
  69. package/dist/itk/web-workers/RunPipelineInput.d.ts +10 -0
  70. package/dist/itk/web-workers/RunPipelineInput.js +1 -0
  71. package/dist/itk/web-workers/WebWorkerInput.d.ts +6 -0
  72. package/dist/itk/web-workers/WebWorkerInput.js +1 -0
  73. package/dist/itk/web-workers/bundles/pipeline.worker.js +1 -0
  74. package/dist/itk/web-workers/loadImageIOPipelineModule.d.ts +4 -0
  75. package/dist/itk/web-workers/loadImageIOPipelineModule.js +1 -0
  76. package/dist/itk/web-workers/loadMeshIOPipelineModule.d.ts +4 -0
  77. package/dist/itk/web-workers/loadMeshIOPipelineModule.js +1 -0
  78. package/dist/itk/web-workers/loadPipelineModule.d.ts +3 -0
  79. package/dist/itk/web-workers/loadPipelineModule.js +1 -0
  80. package/dist/itk/web-workers/min-bundles/pipeline.worker.js +3 -0
  81. package/dist/itk/web-workers/pipeline.worker.d.ts +1 -0
  82. package/dist/itk/web-workers/pipeline.worker.js +1 -0
  83. package/dist/itk/web-workers/runPipeline.d.ts +5 -0
  84. package/dist/itk/web-workers/runPipeline.js +1 -0
  85. package/dist/js/23.be4d694e.js +21 -0
  86. package/dist/js/23.be4d694e.js.map +1 -0
  87. package/dist/js/385.51ca48a2.js +2 -0
  88. package/dist/js/385.51ca48a2.js.map +1 -0
  89. package/dist/js/422.c64a6aa7.js +2 -0
  90. package/dist/js/422.c64a6aa7.js.map +1 -0
  91. package/dist/js/979.c4823352.js +2 -0
  92. package/dist/js/979.c4823352.js.map +1 -0
  93. package/dist/js/app.81e49d9a.js +2 -0
  94. package/dist/js/app.81e49d9a.js.map +1 -0
  95. package/dist/js/chunk-vendors.0ab48f8d.js +33 -0
  96. package/dist/js/chunk-vendors.0ab48f8d.js.map +1 -0
  97. package/{public → dist}/pvm-sample.png +0 -0
  98. package/package.json +3 -2
  99. package/.browserslistrc +0 -4
  100. package/.editorconfig +0 -6
  101. package/.env +0 -6
  102. package/.eslintrc.js +0 -109
  103. package/.gitattributes +0 -1
  104. package/.github/workflows/checks.yml +0 -16
  105. package/.github/workflows/publish.yml +0 -52
  106. package/.prettierignore +0 -5
  107. package/CONTRIBUTING.md +0 -29
  108. package/babel.config.js +0 -3
  109. package/documentation/config.js +0 -15
  110. package/documentation/content/KWVolViewLogo.png +0 -0
  111. package/documentation/content/KWVolViewLogo.svg +0 -35
  112. package/documentation/content/VolViewLogo.png +0 -0
  113. package/documentation/content/VolViewLogo.svg +0 -22
  114. package/documentation/content/doc/index.md +0 -64
  115. package/documentation/content/doc/loading_data.md +0 -30
  116. package/documentation/content/doc/mouse_controls.md +0 -34
  117. package/documentation/content/doc/quick_start_guide.md +0 -75
  118. package/documentation/content/doc/rendering.md +0 -27
  119. package/documentation/content/doc/state_files.md +0 -18
  120. package/documentation/content/doc/toolbar.md +0 -20
  121. package/documentation/content/doc/welcome_screen.md +0 -23
  122. package/documentation/content/gallery/01-volview-welcome-notes.jpg +0 -0
  123. package/documentation/content/gallery/01-volview-welcome.jpg +0 -0
  124. package/documentation/content/gallery/02-volview-about.jpg +0 -0
  125. package/documentation/content/gallery/02-volview-notifications.jpg +0 -0
  126. package/documentation/content/gallery/02-volview-settings.jpg +0 -0
  127. package/documentation/content/gallery/03-volview-sample-datasets.jpg +0 -0
  128. package/documentation/content/gallery/04-volview-active-data.jpg +0 -0
  129. package/documentation/content/gallery/05-volview-select-data-to-delete.jpg +0 -0
  130. package/documentation/content/gallery/06-volview-corner-annotation.jpg +0 -0
  131. package/documentation/content/gallery/07-volview-layout-notes.jpg +0 -0
  132. package/documentation/content/gallery/07-volview-layout.jpg +0 -0
  133. package/documentation/content/gallery/09-volview-layout-3DPrimary.jpg +0 -0
  134. package/documentation/content/gallery/10-volview-wl-pan-zoom-notes.jpg +0 -0
  135. package/documentation/content/gallery/10-volview-wl-pan-zoom.jpg +0 -0
  136. package/documentation/content/gallery/11-volview-paint-notes.jpg +0 -0
  137. package/documentation/content/gallery/11-volview-paint.jpg +0 -0
  138. package/documentation/content/gallery/12-volview-paint-options.jpg +0 -0
  139. package/documentation/content/gallery/13-volview-crop-notes.jpg +0 -0
  140. package/documentation/content/gallery/13-volview-crop.jpg +0 -0
  141. package/documentation/content/gallery/14-volview-ruler.jpg +0 -0
  142. package/documentation/content/gallery/15-volview-crosshairs.jpg +0 -0
  143. package/documentation/content/gallery/16-volview-rendering.jpg +0 -0
  144. package/documentation/content/gallery/17-volview-colormap-notes.jpg +0 -0
  145. package/documentation/content/gallery/17-volview-colormap.jpg +0 -0
  146. package/documentation/content/gallery/17-volview-opacity-notes.jpg +0 -0
  147. package/documentation/content/gallery/17-volview-opacity.jpg +0 -0
  148. package/documentation/content/gallery/17-volview-opacity2.jpg +0 -0
  149. package/documentation/content/gallery/18-volview-presets.jpg +0 -0
  150. package/documentation/content/gallery/19-volview-color.jpg +0 -0
  151. package/documentation/content/gallery/19-volview-color2.jpg +0 -0
  152. package/documentation/content/gallery/20-volview-lightfollowcamera0.jpg +0 -0
  153. package/documentation/content/gallery/20-volview-lightfollowcamera1.jpg +0 -0
  154. package/documentation/content/gallery/20-volview-lightfollowcamera2.jpg +0 -0
  155. package/documentation/content/gallery/20-volview-lightfollowcamera3.jpg +0 -0
  156. package/documentation/content/gallery/21-volview-hybrid-final.jpg +0 -0
  157. package/documentation/content/gallery/21-volview-hybrid0.0.jpg +0 -0
  158. package/documentation/content/gallery/21-volview-hybrid0.5.jpg +0 -0
  159. package/documentation/content/gallery/21-volview-hybrid1.0.jpg +0 -0
  160. package/documentation/content/gallery/LocalAmbientOcclusion.jpg +0 -0
  161. package/documentation/content/gallery/Notes.pptx +0 -0
  162. package/documentation/content/gallery/VolView-Overview.jpg +0 -0
  163. package/documentation/content/gallery/index.md +0 -53
  164. package/documentation/content/icon/favicon-16x16.png +0 -0
  165. package/documentation/content/icon/favicon-196x196.png +0 -0
  166. package/documentation/content/icon/favicon-32x32.png +0 -0
  167. package/documentation/content/icon/favicon-96x96.png +0 -0
  168. package/documentation/content/index.pug +0 -43
  169. package/documentation/content/logo.png +0 -0
  170. package/documentation/content/logo.svg +0 -20
  171. package/documentation/data/menu.yml +0 -3
  172. package/documentation/themes/navy/layout/partial/footer.swig +0 -22
  173. package/documentation/tpl/__en__ +0 -31
  174. package/documentation/tpl/__sidebar__ +0 -11
  175. package/patches/jsdom-global+3.0.2.patch +0 -12
  176. package/patches/vue-toastification+1.7.14.patch +0 -41
  177. package/patches/vuetify+2.6.10.patch +0 -13
  178. package/prettier.config.js +0 -9
  179. package/public/index.html +0 -28
  180. package/server/helper.py +0 -147
  181. package/server/host.js +0 -134
  182. package/server/serialize.js +0 -111
  183. package/server/serialize.py +0 -203
  184. package/server/server.py +0 -84
  185. package/server/test.py +0 -17
  186. package/src/assets/logo.png +0 -0
  187. package/src/assets/logo.svg +0 -20
  188. package/src/assets/samples/3DUS-Fetus.jpg +0 -0
  189. package/src/assets/samples/CTA-Head_and_Neck.jpg +0 -0
  190. package/src/assets/samples/MRA-Head_and_Neck.jpg +0 -0
  191. package/src/assets/samples/MRI-Cardiac.jpg +0 -0
  192. package/src/assets/samples/MRI-PROSTATEx.jpg +0 -0
  193. package/src/components/AboutBox.vue +0 -157
  194. package/src/components/AiModule.vue +0 -60
  195. package/src/components/AnnotationsModule.vue +0 -37
  196. package/src/components/App.vue +0 -539
  197. package/src/components/ColorFunctionSlider.vue +0 -181
  198. package/src/components/DataBrowser.vue +0 -173
  199. package/src/components/DragAndDrop.vue +0 -107
  200. package/src/components/GroupableItem.vue +0 -30
  201. package/src/components/ImageDataBrowser.vue +0 -186
  202. package/src/components/ImageListCard.vue +0 -114
  203. package/src/components/ItemGroup.vue +0 -74
  204. package/src/components/LabelmapList.vue +0 -36
  205. package/src/components/LayoutGrid.vue +0 -96
  206. package/src/components/MeasurementsList.vue +0 -134
  207. package/src/components/MessageCenter.vue +0 -189
  208. package/src/components/MessageItem.vue +0 -83
  209. package/src/components/MessageNotificationContent.vue +0 -20
  210. package/src/components/MessageNotifications.vue +0 -84
  211. package/src/components/ModelBrowser.vue +0 -83
  212. package/src/components/ModulePanel.vue +0 -137
  213. package/src/components/PaintControls.vue +0 -174
  214. package/src/components/PatientBrowser.vue +0 -280
  215. package/src/components/PatientStudyVolumeBrowser.vue +0 -325
  216. package/src/components/RenderingModule.vue +0 -49
  217. package/src/components/ResizableNavDrawer.vue +0 -158
  218. package/src/components/SampleDataBrowser.vue +0 -198
  219. package/src/components/SaveSession.vue +0 -57
  220. package/src/components/Settings.vue +0 -35
  221. package/src/components/SliceSlider.vue +0 -182
  222. package/src/components/SpleenModule.vue +0 -101
  223. package/src/components/ToolButton.vue +0 -58
  224. package/src/components/ToolStrip.vue +0 -186
  225. package/src/components/ViewOverlayGrid.vue +0 -84
  226. package/src/components/VolumePresets.vue +0 -165
  227. package/src/components/VolumeProperties.vue +0 -171
  228. package/src/components/VolumeRendering.vue +0 -365
  229. package/src/components/VtkThreeView.vue +0 -512
  230. package/src/components/VtkTwoView.vue +0 -665
  231. package/src/components/__tests__/ResizableNavDrawer.spec.js +0 -32
  232. package/src/components/__tests__/ToolButton.spec.js +0 -46
  233. package/src/components/icons/KitwareLogoIcon.vue +0 -54
  234. package/src/components/icons/VolViewFullLogo.vue +0 -139
  235. package/src/components/icons/VolViewLogo.vue +0 -78
  236. package/src/components/styles/utils.css +0 -16
  237. package/src/components/styles/vtk-view.css +0 -116
  238. package/src/components/tools/CropTool.vue +0 -61
  239. package/src/components/tools/CrosshairsTool.vue +0 -93
  240. package/src/components/tools/MouseManipulatorTool.vue +0 -108
  241. package/src/components/tools/PaintTool.vue +0 -54
  242. package/src/components/tools/PanTool.vue +0 -35
  243. package/src/components/tools/RulerTool.vue +0 -202
  244. package/src/components/tools/SliceScrollTool.vue +0 -123
  245. package/src/components/tools/WindowLevelTool.vue +0 -191
  246. package/src/components/tools/ZoomTool.vue +0 -35
  247. package/src/components/tools/crop/Crop2D.vue +0 -367
  248. package/src/components/tools/crop/Crop2DLineHandle.vue +0 -103
  249. package/src/components/tools/crop/Crop3D.vue +0 -192
  250. package/src/components/tools/crop/CropControls.vue +0 -38
  251. package/src/components/tools/crop/types.ts +0 -12
  252. package/src/components/tools/crosshairs/CrosshairSVG2D.vue +0 -125
  253. package/src/components/tools/crosshairs/CrosshairsWidget2D.vue +0 -100
  254. package/src/components/tools/paint/PaintWidget2D.vue +0 -192
  255. package/src/components/tools/ruler/RulerSVG2D.vue +0 -181
  256. package/src/components/tools/ruler/RulerWidget2D.vue +0 -154
  257. package/src/composables/__tests__/useDoubleRecord.spec.ts +0 -57
  258. package/src/composables/__tests__/useOrientationLabels.spec.ts +0 -29
  259. package/src/composables/isViewAnimating.ts +0 -25
  260. package/src/composables/manageVTKSubscription.ts +0 -6
  261. package/src/composables/onProxyManagerEvent.ts +0 -50
  262. package/src/composables/proxyManager.ts +0 -13
  263. package/src/composables/sync/__tests__/createPrimitiveSyncContext.spec.ts +0 -41
  264. package/src/composables/sync/__tests__/useWindowingSync.spec.ts +0 -51
  265. package/src/composables/sync/createPrimitiveSyncContext.ts +0 -83
  266. package/src/composables/sync/useWindowingSync.ts +0 -48
  267. package/src/composables/useAppLoadingNotifications.ts +0 -73
  268. package/src/composables/useCameraOrientation.ts +0 -34
  269. package/src/composables/useCurrentImage.ts +0 -74
  270. package/src/composables/useCurrentSlice.ts +0 -43
  271. package/src/composables/useDoubleRecord.ts +0 -77
  272. package/src/composables/useEventListener.ts +0 -26
  273. package/src/composables/useGlobalErrorHook.ts +0 -18
  274. package/src/composables/useMultiSelection.ts +0 -29
  275. package/src/composables/useOrientationLabels.ts +0 -62
  276. package/src/composables/usePanels.ts +0 -42
  277. package/src/composables/usePersistCameraConfig.ts +0 -138
  278. package/src/composables/useResizeObserver.ts +0 -37
  279. package/src/composables/useResizeToFit.ts +0 -50
  280. package/src/composables/useSceneBuilder.ts +0 -96
  281. package/src/composables/useToast.js +0 -11
  282. package/src/composables/useVTKCallback.ts +0 -33
  283. package/src/composables/useVTKWorldToDisplay.ts +0 -141
  284. package/src/composables/useViewProxy.ts +0 -87
  285. package/src/composables/useVolumeThumbnailing.ts +0 -173
  286. package/src/composables/useWebGLWatchdog.ts +0 -32
  287. package/src/composables/useWidgetManager.ts +0 -41
  288. package/src/config.ts +0 -182
  289. package/src/constants.ts +0 -38
  290. package/src/core/id.ts +0 -18
  291. package/src/core/provider.ts +0 -31
  292. package/src/core/proxies.ts +0 -90
  293. package/src/core/thumbnailers/__tests__/vtk-image.spec.ts +0 -58
  294. package/src/core/thumbnailers/index.ts +0 -5
  295. package/src/core/thumbnailers/volume-thumbnailer.ts +0 -130
  296. package/src/core/thumbnailers/vtk-image.ts +0 -142
  297. package/src/core/tools/__tests__/paint.spec.ts +0 -101
  298. package/src/core/tools/__tests__/ruler.spec.ts +0 -73
  299. package/src/core/tools/paint/brush.ts +0 -20
  300. package/src/core/tools/paint/ellipse-brush.ts +0 -96
  301. package/src/core/tools/paint/index.ts +0 -141
  302. package/src/core/tools/ruler.ts +0 -149
  303. package/src/global.d.ts +0 -24
  304. package/src/io/__tests__/io.spec.ts +0 -26
  305. package/src/io/dicom.ts +0 -187
  306. package/src/io/index.ts +0 -11
  307. package/src/io/io.ts +0 -157
  308. package/src/io/itk/itkConfig.js +0 -8
  309. package/src/io/itk-dicom/dicom.cpp +0 -327
  310. package/src/io/itk-dicom/web-build/dicom.js +0 -16
  311. package/src/io/itk-dicom/web-build/dicom.umd.js +0 -21
  312. package/src/io/manifest.ts +0 -30
  313. package/src/io/readers.ts +0 -36
  314. package/src/io/state-file/index.ts +0 -170
  315. package/src/io/state-file/schema.ts +0 -277
  316. package/src/io/state-file/utils.ts +0 -33
  317. package/src/io/types.ts +0 -4
  318. package/src/io/vtk/async.reader.worker.ts +0 -50
  319. package/src/io/vtk/async.ts +0 -58
  320. package/src/io/vtk/async.writer.worker.ts +0 -46
  321. package/src/io/vtk/common.ts +0 -30
  322. package/src/io/zip.ts +0 -31
  323. package/src/main.js +0 -66
  324. package/src/main.ts +0 -1
  325. package/src/plugins/vuetify.js +0 -25
  326. package/src/shims-itk.d.ts +0 -67
  327. package/src/shims-misc.d.ts +0 -4
  328. package/src/shims-tsx.d.ts +0 -13
  329. package/src/shims-vtk.d.ts +0 -1042
  330. package/src/shims-vue.d.ts +0 -5
  331. package/src/store/__tests__/datasets.spec.ts +0 -75
  332. package/src/store/__tests__/messages.spec.ts +0 -74
  333. package/src/store/__tests__/rulers.spec.ts +0 -77
  334. package/src/store/__tests__/view-configs.spec.ts +0 -37
  335. package/src/store/datasets-dicom.ts +0 -398
  336. package/src/store/datasets-files.ts +0 -35
  337. package/src/store/datasets-images.ts +0 -118
  338. package/src/store/datasets-labelmaps.ts +0 -136
  339. package/src/store/datasets-models.ts +0 -25
  340. package/src/store/datasets.ts +0 -341
  341. package/src/store/messages.ts +0 -144
  342. package/src/store/tools/crop.ts +0 -136
  343. package/src/store/tools/crosshairs.ts +0 -131
  344. package/src/store/tools/index.ts +0 -95
  345. package/src/store/tools/paint.ts +0 -191
  346. package/src/store/tools/rulers.ts +0 -305
  347. package/src/store/tools/types.ts +0 -54
  348. package/src/store/view-configs/camera.ts +0 -51
  349. package/src/store/view-configs/common.ts +0 -61
  350. package/src/store/view-configs/slicing.ts +0 -86
  351. package/src/store/view-configs/types.ts +0 -39
  352. package/src/store/view-configs/volume-coloring.ts +0 -193
  353. package/src/store/view-configs/windowing.ts +0 -69
  354. package/src/store/view-configs.ts +0 -78
  355. package/src/store/views.ts +0 -130
  356. package/src/types/index.ts +0 -16
  357. package/src/types/layout.ts +0 -10
  358. package/src/types/lps.ts +0 -40
  359. package/src/types/views.ts +0 -65
  360. package/src/types/vtk-types.ts +0 -29
  361. package/src/utils/__tests__/lps.spec.ts +0 -102
  362. package/src/utils/color.ts +0 -23
  363. package/src/utils/errors.js +0 -3
  364. package/src/utils/fetch.ts +0 -101
  365. package/src/utils/hacks.ts +0 -14
  366. package/src/utils/index.ts +0 -83
  367. package/src/utils/lps.ts +0 -129
  368. package/src/utils/manipulators.ts +0 -35
  369. package/src/utils/promise-worker.ts +0 -45
  370. package/src/utils/vtk-helpers.ts +0 -215
  371. package/src/utils/workerHandler.js +0 -42
  372. package/src/vtk/ColorMaps.ts +0 -72
  373. package/src/vtk/CrosshairsWidget/behavior.ts +0 -112
  374. package/src/vtk/CrosshairsWidget/index.d.ts +0 -22
  375. package/src/vtk/CrosshairsWidget/index.js +0 -73
  376. package/src/vtk/CrosshairsWidget/state.ts +0 -51
  377. package/src/vtk/IJKSliceRepresentationProxy/index.d.ts +0 -9
  378. package/src/vtk/IJKSliceRepresentationProxy/index.js +0 -59
  379. package/src/vtk/LPSView2DProxy/index.d.ts +0 -18
  380. package/src/vtk/LPSView2DProxy/index.js +0 -89
  381. package/src/vtk/LPSView3DProxy/index.d.ts +0 -16
  382. package/src/vtk/LPSView3DProxy/index.js +0 -78
  383. package/src/vtk/LabelMap/index.d.ts +0 -16
  384. package/src/vtk/LabelMap/index.js +0 -49
  385. package/src/vtk/LabelMapSliceRepProxy/index.d.ts +0 -6
  386. package/src/vtk/LabelMapSliceRepProxy/index.js +0 -104
  387. package/src/vtk/MedicalColorPresets.json +0 -1448
  388. package/src/vtk/PaintBrushContextRepresentation/index.js +0 -191
  389. package/src/vtk/PaintWidget/behavior.ts +0 -101
  390. package/src/vtk/PaintWidget/index.d.ts +0 -28
  391. package/src/vtk/PaintWidget/index.js +0 -56
  392. package/src/vtk/PaintWidget/state.ts +0 -41
  393. package/src/vtk/PiecewiseWidget/index.js +0 -203
  394. package/src/vtk/RulerWidget/behavior.ts +0 -185
  395. package/src/vtk/RulerWidget/index.d.ts +0 -25
  396. package/src/vtk/RulerWidget/index.js +0 -79
  397. package/src/vtk/RulerWidget/state.ts +0 -63
  398. package/src/vtk/TreJsonConverter/index.js +0 -150
  399. package/src/vtk/proxy.js +0 -66
  400. package/src/vtk/proxyUtils.js +0 -16
  401. package/src/vtk/webvr-empty.js +0 -1
  402. package/tests/testUtils.js +0 -12
  403. package/tsconfig.json +0 -46
  404. package/vue.config.js +0 -86
@@ -1,108 +0,0 @@
1
- <script lang="ts">
2
- import {
3
- computed,
4
- defineComponent,
5
- PropType,
6
- onBeforeUnmount,
7
- toRefs,
8
- watch,
9
- } from '@vue/composition-api';
10
- import { useViewStore } from '@/src/store/views';
11
-
12
- export default defineComponent({
13
- name: 'MouseManipulatorTool',
14
- props: {
15
- // only useful for determining the kind of manipulator
16
- name: String,
17
- viewId: {
18
- type: String,
19
- required: true,
20
- },
21
- manipulatorClass: {
22
- type: Object,
23
- required: true,
24
- },
25
- options: {
26
- type: Array as PropType<Array<any>>,
27
- default: () => [],
28
- },
29
- },
30
- setup(props) {
31
- const { viewId: viewID, options } = toRefs(props);
32
-
33
- const viewStore = useViewStore();
34
- const viewProxy = computed(() => viewStore.getViewProxy(viewID.value)!);
35
-
36
- const intStyle = computed(() => {
37
- return viewProxy.value.isA('vtkView2DProxy')
38
- ? viewProxy.value.getInteractorStyle2D()
39
- : viewProxy.value.getInteractorStyle3D();
40
- });
41
-
42
- const manipulators: any[] = [];
43
-
44
- function updateStyle(
45
- style: any,
46
- newManipulators: any[],
47
- oldManipulators: any[]
48
- ) {
49
- if (style !== null) {
50
- oldManipulators.forEach((m) => style.removeMouseManipulator(m));
51
- newManipulators.forEach((m) => style.addMouseManipulator(m));
52
- }
53
- }
54
-
55
- watch(
56
- options,
57
- (newOptions) => {
58
- // Maintain the size of manipulators array equal to options array.
59
- while (manipulators.length > newOptions.length) {
60
- const m = manipulators.pop();
61
- intStyle.value.removeMouseManipulator(m);
62
- m.delete();
63
- }
64
-
65
- const oldManipulators = Array.from(manipulators);
66
-
67
- for (let i = manipulators.length; i < newOptions.length; ++i) {
68
- manipulators.push(props.manipulatorClass.newInstance(newOptions[i]));
69
- }
70
-
71
- newOptions.forEach((opt, idx) => {
72
- if ('button' in opt) {
73
- manipulators[idx].setButton(opt.button);
74
- }
75
- manipulators[idx].setShift(!!opt.shift);
76
- manipulators[idx].setControl(!!opt.control);
77
- });
78
-
79
- updateStyle(intStyle.value, manipulators, oldManipulators);
80
- },
81
- { immediate: true }
82
- );
83
-
84
- watch(
85
- intStyle,
86
- (curIntStyle, oldIntStyle) => {
87
- manipulators.forEach((m) => {
88
- if (oldIntStyle) {
89
- oldIntStyle.removeMouseManipulator(m);
90
- }
91
- if (curIntStyle) {
92
- curIntStyle.addMouseManipulator(m);
93
- }
94
- });
95
- },
96
- { immediate: true }
97
- );
98
-
99
- onBeforeUnmount(() => {
100
- if (!viewProxy.value.isDeleted()) {
101
- manipulators.forEach((m) => intStyle.value.removeMouseManipulator(m));
102
- }
103
- });
104
-
105
- return () => null;
106
- },
107
- });
108
- </script>
@@ -1,54 +0,0 @@
1
- <template>
2
- <div class="overlay-no-events">
3
- <PaintWidget2D
4
- v-if="active"
5
- :slice="slice"
6
- :view-id="viewId"
7
- :view-direction="viewDirection"
8
- :widget-manager="widgetManager"
9
- />
10
- </div>
11
- </template>
12
-
13
- <script lang="ts">
14
- import { computed, defineComponent, PropType } from '@vue/composition-api';
15
- import vtkWidgetManager from '@kitware/vtk.js/Widgets/Core/WidgetManager';
16
- import { usePaintToolStore } from '@/src/store/tools/paint';
17
- import { LPSAxisDir } from '@/src/types/lps';
18
- import PaintWidget2D from './paint/PaintWidget2D.vue';
19
-
20
- export default defineComponent({
21
- name: 'PaintTool',
22
- props: {
23
- viewId: {
24
- type: String,
25
- required: true,
26
- },
27
- slice: {
28
- type: Number,
29
- required: true,
30
- },
31
- viewDirection: {
32
- type: String as PropType<LPSAxisDir>,
33
- required: true,
34
- },
35
- widgetManager: {
36
- type: Object as PropType<vtkWidgetManager>,
37
- required: true,
38
- },
39
- },
40
- components: {
41
- PaintWidget2D,
42
- },
43
- setup() {
44
- const paintStore = usePaintToolStore();
45
- const active = computed(() => paintStore.isActive);
46
-
47
- return {
48
- active,
49
- };
50
- },
51
- });
52
- </script>
53
-
54
- <style scoped src="@/src/components/styles/vtk-view.css"></style>
@@ -1,35 +0,0 @@
1
- <script lang="ts">
2
- import { CreateElement, RenderContext } from 'vue';
3
- import vtkViewProxy from '@kitware/vtk.js/Proxy/Core/ViewProxy';
4
- import vtkMouseCameraTrackballPanManipulator from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballPanManipulator';
5
- import { useToolStore } from '@/src/store/tools';
6
- import { Tools } from '@/src/store/tools/types';
7
- import MouseManipulatorTool from './MouseManipulatorTool.vue';
8
-
9
- interface Props {
10
- viewProxy: vtkViewProxy;
11
- }
12
-
13
- export default {
14
- functional: true,
15
- render(h: CreateElement, ctx: RenderContext<Props>) {
16
- const toolStore = useToolStore();
17
- const toolOptions = [];
18
- toolOptions.push({ button: 2 });
19
- toolOptions.push({ button: 1, shift: true });
20
- if (toolStore.currentTool === Tools.Pan) {
21
- // Additionally enable left-button-only action if Pan tool is active
22
- toolOptions.push({ button: 1 });
23
- }
24
-
25
- return h(MouseManipulatorTool, {
26
- props: {
27
- ...ctx.props,
28
- name: 'PanTool',
29
- manipulatorClass: vtkMouseCameraTrackballPanManipulator,
30
- options: toolOptions,
31
- },
32
- });
33
- },
34
- };
35
- </script>
@@ -1,202 +0,0 @@
1
- <template>
2
- <div class="overlay-no-events">
3
- <svg class="overlay-no-events">
4
- <RulerSVG2D
5
- v-for="ruler in rulers"
6
- :key="ruler.id"
7
- v-show="slice === ruler.slice"
8
- :view-id="viewId"
9
- :point1="ruler.firstPoint"
10
- :point2="ruler.secondPoint"
11
- :color="ruler.color"
12
- :length="ruler.length"
13
- />
14
- </svg>
15
- <div>
16
- <RulerWidget2D
17
- v-for="ruler in rulers"
18
- :key="ruler.id"
19
- :ruler-id="ruler.id"
20
- :slice="slice"
21
- :view-id="viewId"
22
- :view-direction="viewDirection"
23
- :focused="ruler.focused"
24
- :widget-manager="widgetManager"
25
- @contextmenu="openContextMenu(ruler.id, $event)"
26
- />
27
- </div>
28
- <v-menu
29
- v-model="contextMenu.show"
30
- :position-x="contextMenu.x"
31
- :position-y="contextMenu.y"
32
- absolute
33
- offset-y
34
- close-on-click
35
- close-on-content-click
36
- >
37
- <v-list dense>
38
- <v-list-item @click="deleteRulerFromContextMenu">
39
- <v-list-item-title>Delete</v-list-item-title>
40
- </v-list-item>
41
- </v-list>
42
- </v-menu>
43
- </div>
44
- </template>
45
-
46
- <script lang="ts">
47
- import {
48
- computed,
49
- defineComponent,
50
- PropType,
51
- reactive,
52
- toRefs,
53
- watch,
54
- } from '@vue/composition-api';
55
- import { useCurrentImage } from '@/src/composables/useCurrentImage';
56
- import { useToolStore } from '@/src/store/tools';
57
- import { Tools } from '@/src/store/tools/types';
58
- import { useRulerStore } from '@/src/store/tools/rulers';
59
- import { getLPSAxisFromDir } from '@/src/utils/lps';
60
- import RulerWidget2D from '@/src/components/tools/ruler/RulerWidget2D.vue';
61
- import RulerSVG2D from '@/src/components/tools/ruler/RulerSVG2D.vue';
62
- import vtkWidgetManager from '@kitware/vtk.js/Widgets/Core/WidgetManager';
63
- import { EVENT_ABORT, VOID } from '@kitware/vtk.js/macros';
64
- import { shouldIgnoreEvent } from '@/src/vtk/RulerWidget';
65
- import { useViewStore } from '@/src/store/views';
66
- import vtkLPSView2DProxy from '@/src/vtk/LPSView2DProxy';
67
- import { Vector2 } from '@kitware/vtk.js/types';
68
- import { LPSAxisDir } from '@/src/types/lps';
69
- import { useVTKCallback } from '@/src/composables/useVTKCallback';
70
-
71
- export default defineComponent({
72
- name: 'RulerTool',
73
- props: {
74
- viewId: {
75
- type: String,
76
- required: true,
77
- },
78
- slice: {
79
- type: Number,
80
- required: true,
81
- },
82
- viewDirection: {
83
- type: String as PropType<LPSAxisDir>,
84
- required: true,
85
- },
86
- widgetManager: {
87
- type: Object as PropType<vtkWidgetManager>,
88
- required: true,
89
- },
90
- },
91
- components: {
92
- RulerWidget2D,
93
- RulerSVG2D,
94
- },
95
- setup(props) {
96
- const { viewId: viewID, viewDirection } = toRefs(props);
97
- const viewStore = useViewStore();
98
- const toolStore = useToolStore();
99
- const rulerStore = useRulerStore();
100
-
101
- const viewProxy = computed(
102
- () => viewStore.getViewProxy<vtkLPSView2DProxy>(viewID.value)!
103
- );
104
-
105
- const { currentImageID } = useCurrentImage();
106
- const active = computed(() => toolStore.currentTool === Tools.Ruler);
107
- const activeRulerID = computed(() => rulerStore.activeRulerID);
108
- const viewAxis = computed(() => getLPSAxisFromDir(viewDirection.value));
109
-
110
- // --- context menu --- //
111
-
112
- const contextMenu = reactive({
113
- show: false,
114
- x: 0,
115
- y: 0,
116
- forRulerID: '',
117
- });
118
-
119
- const openContextMenu = (rulerID: string, displayXY: Vector2) => {
120
- [contextMenu.x, contextMenu.y] = displayXY;
121
- contextMenu.show = true;
122
- contextMenu.forRulerID = rulerID;
123
- };
124
-
125
- const deleteRulerFromContextMenu = () => {
126
- rulerStore.removeRuler(contextMenu.forRulerID);
127
- };
128
-
129
- // --- ruler lifecycle --- //
130
-
131
- const deleteActiveRuler = () => {
132
- rulerStore.removeActiveRuler();
133
- };
134
-
135
- const startNewRuler = (eventData: any) => {
136
- if (!active.value || contextMenu.show || shouldIgnoreEvent(eventData)) {
137
- return VOID;
138
- }
139
- rulerStore.addNewRulerFromViewEvent(eventData, viewID.value);
140
- return EVENT_ABORT;
141
- };
142
-
143
- // We don't create a ruler until we receive a click, so
144
- // the button press listener must be here rather than in
145
- // the widget itself.
146
- // We may support configuring which mouse button triggers this tool
147
- // in the future.
148
- const onLeftButtonPress = useVTKCallback(
149
- computed(() => viewProxy.value.getInteractor().onLeftButtonPress)
150
- );
151
- onLeftButtonPress(startNewRuler);
152
-
153
- // delete active ruler if slice changes
154
- watch(
155
- () => props.slice,
156
- () => {
157
- deleteActiveRuler();
158
- }
159
- );
160
-
161
- // --- ruler data --- //
162
-
163
- const currentRulers = computed(() => {
164
- const { rulers: rulerByID, lengthByID } = rulerStore;
165
- const curImageID = currentImageID.value;
166
- const isToolActive = active.value;
167
- const curViewAxis = viewAxis.value;
168
- const curActiveRulerID = activeRulerID.value;
169
-
170
- return rulerStore.rulerIDs
171
- .map((id) => ({ id, ruler: rulerByID[id] }))
172
- .filter(({ ruler }) => {
173
- // only show rulers for the current image and the current view
174
- return (
175
- ruler.imageID === curImageID &&
176
- (!ruler.viewAxis || ruler.viewAxis === curViewAxis)
177
- );
178
- })
179
- .map(({ id, ruler }) => {
180
- return {
181
- id,
182
- firstPoint: ruler.firstPoint,
183
- secondPoint: ruler.secondPoint,
184
- color: ruler.color,
185
- slice: ruler.slice,
186
- length: lengthByID[id],
187
- focused: isToolActive && curActiveRulerID === id,
188
- };
189
- });
190
- });
191
-
192
- return {
193
- rulers: currentRulers,
194
- contextMenu,
195
- openContextMenu,
196
- deleteRulerFromContextMenu,
197
- };
198
- },
199
- });
200
- </script>
201
-
202
- <style scoped src="@/src/components/styles/vtk-view.css"></style>
@@ -1,123 +0,0 @@
1
- <script lang="ts">
2
- import {
3
- computed,
4
- defineComponent,
5
- onBeforeUnmount,
6
- ref,
7
- toRefs,
8
- watch,
9
- } from '@vue/composition-api';
10
- import vtkLPSView2DProxy from '@/src/vtk/LPSView2DProxy';
11
- import vtkMouseRangeManipulator from '@kitware/vtk.js/Interaction/Manipulators/MouseRangeManipulator';
12
- import { useCurrentImage } from '@/src/composables/useCurrentImage';
13
- import { useViewConfigStore } from '@/src/store/view-configs';
14
- import { useViewStore } from '@/src/store/views';
15
- import { defaultSliceConfig } from '@/src/store/view-configs/slicing';
16
-
17
- export default defineComponent({
18
- name: 'SliceScrollTool',
19
- props: {
20
- viewId: {
21
- type: String,
22
- required: true,
23
- },
24
- },
25
- setup(props) {
26
- const { viewId: viewID } = toRefs(props);
27
- const viewConfigStore = useViewConfigStore();
28
- const viewStore = useViewStore();
29
- const { currentImageID } = useCurrentImage();
30
-
31
- const viewProxy = computed(
32
- () => viewStore.getViewProxy<vtkLPSView2DProxy>(viewID.value)!
33
- );
34
-
35
- const sliceConfigDefault = defaultSliceConfig();
36
- const sliceConfig = computed(() =>
37
- currentImageID.value !== null
38
- ? viewConfigStore.getSliceConfig(viewID.value, currentImageID.value)!
39
- : null
40
- );
41
- const sliceRange = computed(() => ({
42
- min:
43
- sliceConfig.value !== null
44
- ? sliceConfig.value.min
45
- : sliceConfigDefault.min,
46
- max:
47
- sliceConfig.value !== null
48
- ? sliceConfig.value.max
49
- : sliceConfigDefault.max,
50
- step: 1,
51
- default:
52
- sliceConfig.value !== null
53
- ? sliceConfig.value.slice
54
- : sliceConfigDefault.slice,
55
- }));
56
-
57
- const scrollVal = ref(0);
58
-
59
- const rangeManipulator = vtkMouseRangeManipulator.newInstance({
60
- button: -1, // don't bind to any buttons
61
- scrollEnabled: true,
62
- });
63
-
64
- watch(
65
- viewProxy,
66
- (curViewProxy, oldViewProxy) => {
67
- if (oldViewProxy) {
68
- const istyle = oldViewProxy.getInteractorStyle2D();
69
- istyle.removeMouseManipulator(rangeManipulator);
70
- }
71
-
72
- if (curViewProxy) {
73
- // assumed to be vtkInteractorStyleManipulator
74
- const istyle = viewProxy.value.getInteractorStyle2D();
75
- istyle.addMouseManipulator(rangeManipulator);
76
- }
77
- },
78
- { immediate: true }
79
- );
80
-
81
- onBeforeUnmount(() => {
82
- // for some reason, VtkTwoView.onBeforeUnmount is being
83
- // invoked before this onBeforeUnmount during HMR.
84
- if (!viewProxy.value.isDeleted()) {
85
- const istyle = viewProxy.value.getInteractorStyle2D();
86
- istyle.removeMouseManipulator(rangeManipulator);
87
- }
88
- });
89
-
90
- function updateManipulator() {
91
- rangeManipulator.removeAllListeners();
92
- const range = sliceRange.value;
93
-
94
- rangeManipulator.setScrollListener(
95
- range.min,
96
- range.max,
97
- range.step,
98
- () => scrollVal.value,
99
- (slice) => {
100
- if (currentImageID.value !== null) {
101
- viewConfigStore.updateSliceConfig(
102
- viewID.value,
103
- currentImageID.value,
104
- { slice }
105
- );
106
- }
107
- }
108
- );
109
- }
110
-
111
- watch(
112
- sliceRange,
113
- (range) => {
114
- scrollVal.value = range.default;
115
- updateManipulator();
116
- },
117
- { immediate: true }
118
- );
119
-
120
- return () => null;
121
- },
122
- });
123
- </script>
@@ -1,191 +0,0 @@
1
- <script lang="ts">
2
- import {
3
- computed,
4
- defineComponent,
5
- onBeforeUnmount,
6
- ref,
7
- toRefs,
8
- watch,
9
- } from '@vue/composition-api';
10
- import vtkLPSView2DProxy from '@/src/vtk/LPSView2DProxy';
11
- import { useToolStore } from '@/src/store/tools';
12
- import { Tools } from '@/src/store/tools/types';
13
- import { useViewConfigStore } from '@/src/store/view-configs';
14
- import { useCurrentImage } from '@/src/composables/useCurrentImage';
15
- import vtkMouseRangeManipulator from '@kitware/vtk.js/Interaction/Manipulators/MouseRangeManipulator';
16
- import { CreateElement, RenderContext } from 'vue';
17
- import { useViewStore } from '@/src/store/views';
18
- import { defaultWindowLevelConfig } from '@/src/store/view-configs/windowing';
19
-
20
- function computeStep(min: number, max: number) {
21
- return Math.min(max - min, 1) / 256;
22
- }
23
-
24
- const PROPS = {
25
- viewId: {
26
- type: String,
27
- required: true,
28
- },
29
- } as const;
30
-
31
- const WindowLevelTool = defineComponent({
32
- name: 'WindowLevelTool',
33
- props: PROPS,
34
- setup(props) {
35
- const { viewId: viewID } = toRefs(props);
36
- const viewConfigStore = useViewConfigStore();
37
- const viewStore = useViewStore();
38
- const { currentImageID } = useCurrentImage();
39
-
40
- const viewProxy = computed(
41
- () => viewStore.getViewProxy<vtkLPSView2DProxy>(viewID.value)!
42
- );
43
-
44
- const windowConfigDefaults = defaultWindowLevelConfig();
45
- const wlConfig = computed(() =>
46
- currentImageID.value !== null
47
- ? viewConfigStore.getWindowingConfig(
48
- viewID.value,
49
- currentImageID.value
50
- )!
51
- : null
52
- );
53
-
54
- const wwRange = computed(() => ({
55
- min: 1e-12, // ensure we don't hit zero and jump to white
56
- max:
57
- wlConfig.value !== null
58
- ? wlConfig.value.max - wlConfig.value.min
59
- : windowConfigDefaults.max,
60
- step:
61
- wlConfig.value !== null
62
- ? computeStep(wlConfig.value.min, wlConfig.value.max)
63
- : computeStep(windowConfigDefaults.min, windowConfigDefaults.max),
64
- default:
65
- wlConfig.value !== null
66
- ? wlConfig.value.width
67
- : windowConfigDefaults.width,
68
- }));
69
- const wlRange = computed(() => ({
70
- min:
71
- wlConfig.value !== null ? wlConfig.value.min : windowConfigDefaults.min,
72
- max:
73
- wlConfig.value !== null ? wlConfig.value.max : windowConfigDefaults.max,
74
- step:
75
- wlConfig.value !== null
76
- ? computeStep(wlConfig.value.min, wlConfig.value.max)
77
- : computeStep(windowConfigDefaults.min, windowConfigDefaults.max),
78
- default:
79
- wlConfig.value !== null
80
- ? wlConfig.value.level
81
- : windowConfigDefaults.level,
82
- }));
83
-
84
- const vertVal = ref(0);
85
- const horizVal = ref(0);
86
-
87
- watch(vertVal, (ww) => {
88
- if (currentImageID.value !== null) {
89
- viewConfigStore.updateWindowingConfig(
90
- viewID.value,
91
- currentImageID.value,
92
- {
93
- width: ww,
94
- }
95
- );
96
- }
97
- });
98
- watch(horizVal, (wl) => {
99
- if (currentImageID.value !== null) {
100
- viewConfigStore.updateWindowingConfig(
101
- viewID.value,
102
- currentImageID.value,
103
- {
104
- level: wl,
105
- }
106
- );
107
- }
108
- });
109
-
110
- const rangeManipulator = vtkMouseRangeManipulator.newInstance({
111
- button: 1,
112
- scrollEnabled: false,
113
- });
114
-
115
- watch(
116
- viewProxy,
117
- (curViewProxy, oldViewProxy) => {
118
- if (oldViewProxy) {
119
- const istyle = oldViewProxy.getInteractorStyle2D();
120
- istyle.removeMouseManipulator(rangeManipulator);
121
- }
122
-
123
- if (curViewProxy) {
124
- // assumed to be vtkInteractorStyleManipulator
125
- const istyle = viewProxy.value.getInteractorStyle2D();
126
- istyle.addMouseManipulator(rangeManipulator);
127
- }
128
- },
129
- { immediate: true }
130
- );
131
-
132
- onBeforeUnmount(() => {
133
- // for some reason, VtkTwoView.onBeforeUnmount is being
134
- // invoked before this onBeforeUnmount during HMR.
135
- if (!viewProxy.value.isDeleted()) {
136
- const istyle = viewProxy.value.getInteractorStyle2D();
137
- istyle.removeMouseManipulator(rangeManipulator);
138
- }
139
- });
140
-
141
- function updateManipulator() {
142
- rangeManipulator.removeAllListeners();
143
- const vertRange = wwRange.value;
144
- const horizRange = wlRange.value;
145
-
146
- rangeManipulator.setVerticalListener(
147
- vertRange.min,
148
- vertRange.max,
149
- vertRange.step,
150
- () => vertVal.value,
151
- (v) => {
152
- vertVal.value = v;
153
- }
154
- );
155
-
156
- rangeManipulator.setHorizontalListener(
157
- horizRange.min,
158
- horizRange.max,
159
- horizRange.step,
160
- () => horizVal.value,
161
- (v) => {
162
- horizVal.value = v;
163
- }
164
- );
165
- }
166
-
167
- watch(
168
- () => [wwRange.value, wlRange.value],
169
- ([ww, wl]) => {
170
- vertVal.value = ww.default;
171
- horizVal.value = wl.default;
172
- updateManipulator();
173
- },
174
- { immediate: true }
175
- );
176
-
177
- return () => null;
178
- },
179
- });
180
-
181
- export default {
182
- functional: true,
183
- render(h: CreateElement, ctx: RenderContext<typeof PROPS>) {
184
- const toolStore = useToolStore();
185
- const active = computed(() => toolStore.currentTool === Tools.WindowLevel);
186
- // TODO vue 3 does away with VNodeData, so
187
- // remove the props key
188
- return active.value ? h(WindowLevelTool, { props: ctx.props }) : [];
189
- },
190
- };
191
- </script>