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
package/src/io/io.ts DELETED
@@ -1,157 +0,0 @@
1
- import { extensionToImageIO } from 'itk-wasm';
2
- import { extractFilesFromZip } from './zip';
3
- import { FileEntry } from './types';
4
-
5
- export const ARCHIVE_FILE_TYPES = new Set(['zip', 'application/zip']);
6
-
7
- export const ITK_IMAGE_EXTENSIONS = Array.from(
8
- new Set(Array.from(extensionToImageIO.keys()).map((ext) => ext.toLowerCase()))
9
- );
10
-
11
- // remove duplicates
12
- export const FILE_TYPES = Array.from(
13
- new Set(['vti', 'vtp', 'stl', 'dcm', 'zip', 'json', ...ITK_IMAGE_EXTENSIONS])
14
- );
15
-
16
- /**
17
- * file magic database
18
- * Used to handle certain cases where files have no extension
19
- */
20
- const FILE_MAGIC_DB = [
21
- {
22
- type: 'dcm',
23
- skip: 128,
24
- header: Array.from('DICM').map((c) => c.charCodeAt(0)),
25
- },
26
- ];
27
-
28
- // How much data to read when extracting file magic.
29
- // This should be generous enough for most files.
30
- const HEAD_CHUNK = 512;
31
-
32
- function prefixEquals(target: Uint8Array, prefix: number[] | Uint8Array) {
33
- if (prefix.length > target.length) {
34
- return false;
35
- }
36
- for (let i = 0; i < prefix.length; i += 1) {
37
- if (prefix[i] !== target[i]) {
38
- return false;
39
- }
40
- }
41
- return true;
42
- }
43
-
44
- async function getFileTypeFromMagic(file: File): Promise<string | null> {
45
- return new Promise((resolve) => {
46
- const head = file.slice(0, HEAD_CHUNK);
47
- const reader = new FileReader();
48
- reader.onload = () => {
49
- const chunk = new Uint8Array(reader.result! as ArrayBuffer);
50
- for (let i = 0; i < FILE_MAGIC_DB.length; i += 1) {
51
- const { type, header, skip = 0 } = FILE_MAGIC_DB[i];
52
- if (prefixEquals(chunk.slice(skip), header)) {
53
- resolve(type);
54
- return;
55
- }
56
- }
57
- resolve(null);
58
- };
59
- reader.readAsArrayBuffer(head);
60
- });
61
- }
62
-
63
- /**
64
- * Retypes a given File.
65
- *
66
- * Handy for when a file object has no type given.
67
- * Type is inferred from extension or magic.
68
- *
69
- * If type is not supported, file.type will be "".
70
- * @param file
71
- */
72
- export async function retypeFile(file: File): Promise<File> {
73
- let type: string | null;
74
-
75
- type =
76
- FILE_TYPES.find((ext) => file.name.toLowerCase().endsWith(`.${ext}`)) ??
77
- null;
78
-
79
- if (!type) {
80
- type = await getFileTypeFromMagic(file);
81
- }
82
-
83
- if (!type) {
84
- type = '';
85
- }
86
-
87
- const retypedFile = new File([file], file.name, { type: type.toLowerCase() });
88
- return retypedFile;
89
- }
90
-
91
- export async function extractArchivesRecursively(
92
- files: File[]
93
- ): Promise<FileEntry[]> {
94
- const results = await Promise.all(
95
- files.map(async (file) => {
96
- if (ARCHIVE_FILE_TYPES.has(file.type)) {
97
- return extractFilesFromZip(file);
98
- }
99
-
100
- return [{ file, path: '' }];
101
- })
102
- );
103
-
104
- const archivedEntries = await Promise.all(
105
- results.flat().map(async (entry) => {
106
- return { file: await retypeFile(entry.file), path: entry.path };
107
- })
108
- );
109
-
110
- const archives = archivedEntries
111
- .filter(({ file }) => ARCHIVE_FILE_TYPES.has(file.type))
112
- .map(({ file }) => file);
113
-
114
- if (archives.length > 0) {
115
- const moreEntries = await extractArchivesRecursively(archives);
116
- return [...archivedEntries, ...moreEntries];
117
- }
118
-
119
- return archivedEntries;
120
- }
121
-
122
- export type ReadAsType = 'ArrayBuffer' | 'Text';
123
-
124
- async function readFileAs<T extends ArrayBuffer | string>(
125
- file: File,
126
- type: ReadAsType
127
- ): Promise<T> {
128
- return new Promise((resolve) => {
129
- const fio = new globalThis.FileReader();
130
- fio.onload = () => resolve(fio.result as T);
131
- if (type === 'ArrayBuffer') {
132
- fio.readAsArrayBuffer(file);
133
- } else if (type === 'Text') {
134
- fio.readAsText(file);
135
- } else {
136
- throw new TypeError(`readAs${type} is not a function`);
137
- }
138
- });
139
- }
140
-
141
- /**
142
- * Reads a file and returns an ArrayBuffer
143
- * @async
144
- * @param {File} file
145
- */
146
- export async function readFileAsArrayBuffer(file: File) {
147
- return readFileAs<ArrayBuffer>(file, 'ArrayBuffer');
148
- }
149
-
150
- /**
151
- * Reads a file and returns UTF-8 text
152
- * @async
153
- * @param {File} file
154
- */
155
- export async function readFileAsUTF8Text(file: File) {
156
- return readFileAs<string>(file, 'Text');
157
- }
@@ -1,8 +0,0 @@
1
- const itkConfig = {
2
- pipelineWorkerUrl: '/itk/web-workers/min-bundles/pipeline.worker.js',
3
- imageIOUrl: '/itk/image-io',
4
- meshIOUrl: '/itk/mesh-io',
5
- pipelinesUrl: '/itk/pipelines',
6
- };
7
-
8
- export default itkConfig;
@@ -1,327 +0,0 @@
1
- #include <cerrno>
2
- #include <cstdio>
3
- #include <dirent.h>
4
- #include <fstream>
5
- #include <iostream>
6
- #include <stdexcept>
7
- #include <string>
8
- #include <sys/stat.h>
9
- #include <sys/types.h>
10
- #include <unordered_map>
11
- #include <utility>
12
- #include <vector>
13
-
14
- #ifdef WEB_BUILD
15
- // Building with the itk.js docker container has a more recent gcc version
16
- #include <filesystem>
17
- namespace fs = std::filesystem;
18
- #else
19
- // Building locally with gcc 7.5.0 means I need -lstdc++fs and
20
- // experimental/filesystem
21
- #include <experimental/filesystem>
22
- namespace fs = std::experimental::filesystem;
23
- #endif
24
-
25
- #ifdef WEB_BUILD
26
- #include <emscripten.h>
27
- #endif
28
-
29
- #include <fstream>
30
- #include <iostream>
31
- #include <nlohmann/json.hpp>
32
-
33
- #include "itkCastImageFilter.h"
34
- #include "itkGDCMImageIO.h"
35
- #include "itkGDCMSeriesFileNames.h"
36
- #include "itkImage.h"
37
- #include "itkImageFileReader.h"
38
- #include "itkImageIOBase.h"
39
- #include "itkImageSeriesReader.h"
40
- #include "itkRescaleIntensityImageFilter.h"
41
- #include "itkVectorImage.h"
42
-
43
- #include "itkOutputImage.h"
44
- #include "itkOutputTextStream.h"
45
- #include "itkPipeline.h"
46
-
47
- #include "gdcmImageHelper.h"
48
- #include "gdcmReader.h"
49
-
50
- using json = nlohmann::json;
51
- using ImageType = itk::Image<float, 3>;
52
- using ReaderType = itk::ImageFileReader<ImageType>;
53
- using SeriesReaderType = itk::ImageSeriesReader<ImageType>;
54
- using FileNamesContainer = std::vector<std::string>;
55
- using DicomIO = itk::GDCMImageIO;
56
- // volumeID -> filenames[]
57
- using VolumeMapType = std::unordered_map<std::string, std::vector<std::string>>;
58
- // VolumeID[]
59
- using VolumeIDList = std::vector<std::string>;
60
-
61
- static const double EPSILON = 10e-5;
62
-
63
- #ifdef WEB_BUILD
64
- extern "C" const char *EMSCRIPTEN_KEEPALIVE unpack_error_what(intptr_t ptr) {
65
- auto error = reinterpret_cast<std::runtime_error *>(ptr);
66
- return error->what();
67
- }
68
- #endif
69
-
70
- void replaceChars(std::string &str, char search, char replaceChar) {
71
- int pos;
72
- std::string replace(1, replaceChar);
73
- while ((pos = str.find(search)) != std::string::npos) {
74
- str.replace(pos, 1, replace);
75
- }
76
- }
77
-
78
- // doesn't actually do any length checks, or overflow checks, or anything
79
- // really.
80
- template <int N>
81
- double dotProduct(const std::vector<double> &vec1,
82
- const std::vector<double> &vec2) {
83
- double result = 0;
84
- for (int i = 0; i < N; i++) {
85
- result += vec1.at(i) * vec2.at(i);
86
- }
87
- return result;
88
- }
89
-
90
- std::vector<double> ReadImageOrientationValue(const std::string &filename) {
91
- gdcm::Reader reader;
92
- reader.SetFileName(filename.c_str());
93
- if (!reader.Read()) {
94
- throw std::runtime_error("gdcm: failed to read file");
95
- }
96
- const gdcm::File &file = reader.GetFile();
97
- // This helper method asserts that the vector has length 6.
98
- return gdcm::ImageHelper::GetDirectionCosinesValue(file);
99
- }
100
-
101
- bool areCosinesAlmostEqual(std::vector<double> cosines1,
102
- std::vector<double> cosines2,
103
- double epsilon = EPSILON) {
104
- for (int i = 0; i <= 1; i++) {
105
- std::vector<double> vec1{cosines1.at(i), cosines1.at(i + 1),
106
- cosines1.at(i + 2)};
107
- std::vector<double> vec2{cosines2.at(i), cosines2.at(i + 1),
108
- cosines2.at(i + 2)};
109
- double dot = dotProduct<3>(vec1, vec2);
110
- if (dot < (1 - EPSILON)) {
111
- return false;
112
- }
113
- }
114
- return true;
115
- }
116
-
117
- VolumeMapType SeparateOnImageOrientation(const VolumeMapType &volumeMap) {
118
- VolumeMapType newVolumeMap;
119
- // Vector< Pair< cosines, volumeID >>
120
- std::vector<std::pair<std::vector<double>, std::string>> cosinesToID;
121
-
122
- // append unique ID part to the volume ID, based on cosines
123
- // The format replaces non-alphanumeric chars to be semi-consistent with DICOM
124
- // UID spec,
125
- // and to make debugging easier when looking at the full volume IDs.
126
- // Format: COSINE || "S" || COSINE || "S" || ...
127
- // COSINE: A decimal number -DD.DDDD gets reformatted into NDDSDDDD
128
- auto encodeCosinesAsIDPart = [](const std::vector<double> &cosines) {
129
- std::string concatenated;
130
- for (auto it = cosines.begin(); it != cosines.end(); ++it) {
131
- concatenated += std::to_string(*it);
132
- if (it != cosines.end() - 1) {
133
- concatenated += 'S';
134
- }
135
- }
136
-
137
- replaceChars(concatenated, '-', 'N');
138
- replaceChars(concatenated, '.', 'D');
139
-
140
- return concatenated;
141
- };
142
-
143
- for (const auto &[volumeID, names] : volumeMap) {
144
- for (const auto &filename : names) {
145
- std::vector<double> curCosines = ReadImageOrientationValue(filename);
146
-
147
- bool inserted = false;
148
- for (const auto &entry : cosinesToID) {
149
- if (areCosinesAlmostEqual(curCosines, entry.first)) {
150
- newVolumeMap[entry.second].push_back(filename);
151
- inserted = true;
152
- break;
153
- }
154
- }
155
-
156
- if (!inserted) {
157
- const auto encodedIDPart = encodeCosinesAsIDPart(curCosines);
158
- auto newID = volumeID + '.' + encodedIDPart;
159
- newVolumeMap[newID].push_back(filename);
160
- cosinesToID.push_back(std::make_pair(curCosines, newID));
161
- }
162
- }
163
- }
164
-
165
- return newVolumeMap;
166
- }
167
-
168
- /**
169
- * categorizeFiles extracts out the volumes contained within a set of DICOM
170
- * files.
171
- *
172
- * Return a mapping of volume ID to the files containing the volume.
173
- */
174
- int categorizeFiles(itk::wasm::Pipeline &pipeline) {
175
-
176
- // inputs
177
- FileNamesContainer files;
178
- pipeline.add_option("-f,--files", files, "File names to categorize")
179
- ->required()
180
- ->check(CLI::ExistingFile)
181
- ->expected(1, -1);
182
-
183
- // outputs
184
- itk::wasm::OutputTextStream volumeMapJSONStream;
185
- pipeline
186
- .add_option("volumeMap", volumeMapJSONStream,
187
- "JSON object encoding volumeID => filenames.")
188
- ->required();
189
-
190
- ITK_WASM_PARSE(pipeline);
191
-
192
- std::string path = "./";
193
-
194
- // parse out series
195
- typedef itk::GDCMSeriesFileNames SeriesFileNames;
196
- SeriesFileNames::Pointer seriesFileNames = SeriesFileNames::New();
197
- // files are all default dumped to cwd
198
- seriesFileNames->SetDirectory(path);
199
- seriesFileNames->SetUseSeriesDetails(true);
200
- seriesFileNames->SetGlobalWarningDisplay(false);
201
- seriesFileNames->AddSeriesRestriction("0008|0021");
202
- seriesFileNames->SetRecursive(false);
203
- // Does this affect series organization?
204
- seriesFileNames->SetLoadPrivateTags(false);
205
-
206
- // Obtain the initial separation of imported files into distinct volumes.
207
- auto &gdcmSeriesUIDs = seriesFileNames->GetSeriesUIDs();
208
-
209
- // The initial series UIDs are used as the basis for our volume IDs.
210
- VolumeMapType volumeMap;
211
- for (auto seriesUID : gdcmSeriesUIDs) {
212
- volumeMap[seriesUID] = seriesFileNames->GetFileNames(seriesUID.c_str());
213
- }
214
-
215
- // further restrict on orientation
216
- volumeMap = SeparateOnImageOrientation(volumeMap);
217
-
218
- // strip off tmp prefix
219
- for (auto &entry : volumeMap) {
220
- auto &fileNames = entry.second;
221
- for (auto &f : fileNames) {
222
- f = f.substr(path.size());
223
- }
224
- }
225
-
226
- // Generate the JSON and add to output stream
227
- auto volumeMapJSON = json(volumeMap);
228
- volumeMapJSONStream.Get() << volumeMapJSON;
229
-
230
- // Clean up files
231
- for (auto &file : files) {
232
- remove(file.c_str());
233
- }
234
-
235
- return EXIT_SUCCESS;
236
- }
237
-
238
- /**
239
- * Reads an image slice and returns the optionally thumbnailed image.
240
- */
241
- int getSliceImage(itk::wasm::Pipeline &pipeline) {
242
-
243
- // inputs
244
- std::string fileName;
245
- pipeline.add_option("-f,--file", fileName, "File name generate image for")
246
- ->required()
247
- ->check(CLI::ExistingFile)
248
- ->expected(1);
249
-
250
- bool asThumbnail = false;
251
- pipeline.add_option("-t,--thumbnail", asThumbnail,
252
- "Generate thumbnail image");
253
-
254
- ITK_WASM_PRE_PARSE(pipeline);
255
-
256
- // Setup reader
257
- typename DicomIO::Pointer dicomIO = DicomIO::New();
258
- dicomIO->LoadPrivateTagsOff();
259
- typename ReaderType::Pointer reader = ReaderType::New();
260
- reader->SetFileName(fileName);
261
-
262
- if (asThumbnail) {
263
- using InputImageType = ImageType;
264
- using OutputPixelType = uint8_t;
265
- using OutputImageType = itk::Image<OutputPixelType, 3>;
266
- using RescaleFilter =
267
- itk::RescaleIntensityImageFilter<InputImageType, InputImageType>;
268
- using CastImageFilter =
269
- itk::CastImageFilter<InputImageType, OutputImageType>;
270
-
271
- // outputs
272
- using WasmOutputImageType = itk::wasm::OutputImage<OutputImageType>;
273
- WasmOutputImageType outputImage;
274
- pipeline.add_option("OutputImage", outputImage, "The slice")->required();
275
-
276
- ITK_WASM_PARSE(pipeline);
277
-
278
- auto rescaleFilter = RescaleFilter::New();
279
- rescaleFilter->SetInput(reader->GetOutput());
280
- rescaleFilter->SetOutputMinimum(0);
281
- rescaleFilter->SetOutputMaximum(itk::NumericTraits<OutputPixelType>::max());
282
-
283
- auto castFilter = CastImageFilter::New();
284
- castFilter->SetInput(rescaleFilter->GetOutput());
285
- castFilter->Update();
286
-
287
- // Set the output image
288
- outputImage.Set(castFilter->GetOutput());
289
- } else {
290
- // outputs
291
- using WasmOutputImageType = itk::wasm::OutputImage<ImageType>;
292
- WasmOutputImageType outputImage;
293
- pipeline.add_option("OutputImage", outputImage, "The slice")->required();
294
-
295
- ITK_WASM_PARSE(pipeline);
296
-
297
- reader->Update();
298
- outputImage.Set(reader->GetOutput());
299
- }
300
-
301
- // Clean up the file
302
- remove(fileName.c_str());
303
-
304
- return EXIT_SUCCESS;
305
- }
306
-
307
- int main(int argc, char *argv[]) {
308
- std::string action;
309
- itk::wasm::Pipeline pipeline("VolView pipeline to access DICOM data", argc,
310
- argv);
311
- pipeline.add_option("-a,--action", action, "The action to run")
312
- ->check(CLI::IsMember({"categorize", "getSliceImage"}));
313
-
314
- // Pre parse so we can get the action
315
- ITK_WASM_PRE_PARSE(pipeline)
316
-
317
- if (action == "categorize") {
318
-
319
- ITK_WASM_CATCH_EXCEPTION(pipeline, categorizeFiles(pipeline));
320
-
321
- } else if (action == "getSliceImage") {
322
-
323
- ITK_WASM_CATCH_EXCEPTION(pipeline, getSliceImage(pipeline));
324
- }
325
-
326
- return EXIT_SUCCESS;
327
- }