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/server/helper.py DELETED
@@ -1,147 +0,0 @@
1
- import traceback
2
- import wslink
3
- from serialize import RpcDecoder, RpcEncoder, DEFAULT_DECODERS, DEFAULT_ENCODERS
4
- from wslink.websocket import LinkProtocol
5
-
6
-
7
- RPC_DEFERRED_TYPE = 'rpc.deferred'
8
- RPC_RESULT_TYPE = 'rpc.result'
9
- RPC_ERROR_TYPE = 'rpc.error'
10
- DEFERRED_RESPONSE_TYPE = 'deferred.response'
11
-
12
-
13
- class FutureResult(object):
14
- def __init__(self, id):
15
- self._id = id
16
- self._done = False
17
- self._result = None
18
- self._exception = None
19
- self._callbacks = []
20
-
21
- def id(self):
22
- return self._id
23
-
24
- def done(self):
25
- return self._done
26
-
27
- def result(self):
28
- if not self._done:
29
- raise Exception('Future is not done')
30
- return self._result
31
-
32
- def exception(self):
33
- if not self._done:
34
- raise Exception('Future is not done')
35
- return self._exception
36
-
37
- def has_result(self):
38
- return self._done and bool(self._result)
39
-
40
- def has_exception(self):
41
- return self._done and bool(self._exception)
42
-
43
- def add_done_callback(self, cb):
44
- self._callbacks.append(cb)
45
-
46
- def remove_done_callback(self, cb):
47
- self._callbacks.remove(cb)
48
-
49
- def set_result(self, result):
50
- if not self._done:
51
- self._done = True
52
- self._result = result
53
- self._trigger_callbacks()
54
-
55
- def set_exception(self, exception):
56
- if not self._done:
57
- self._done = True
58
- self._exception = exception
59
- self._trigger_callbacks()
60
-
61
- def _trigger_callbacks(self):
62
- for cb in self._callbacks:
63
- try:
64
- cb(self)
65
- except:
66
- pass
67
-
68
-
69
- def make_deferred_response(future):
70
- return {
71
- 'type': RPC_DEFERRED_TYPE,
72
- 'id': future.id(),
73
- }
74
-
75
-
76
- def make_result_response(result):
77
- return {
78
- 'type': RPC_RESULT_TYPE,
79
- 'result': result,
80
- }
81
-
82
-
83
- def make_error_response(exc):
84
- return {
85
- 'type': RPC_ERROR_TYPE,
86
- 'error': str(exc),
87
- }
88
-
89
-
90
- def deserialize(args, kwargs):
91
- decoder = RpcDecoder(hooks=DEFAULT_DECODERS)
92
- new_args = [decoder.decode(arg) for arg in args]
93
- return new_args, kwargs
94
-
95
-
96
- def rpc(name):
97
- def wrapper(fn):
98
- def handler(self, *args, **kwargs):
99
-
100
- try:
101
- args, kwargs = deserialize(args, kwargs)
102
- result = fn(self, *args, **kwargs)
103
- except Exception as e:
104
- traceback.print_exc()
105
- return make_error_response(e)
106
- else:
107
- if type(result) is FutureResult:
108
- self._futures.append(result)
109
- result.set_done_callback(self._handle_future_result)
110
- return make_deferred_response(result.id())
111
-
112
- return make_result_response(self.serialize(result))
113
-
114
- return wslink.register(name)(handler)
115
- return wrapper
116
-
117
-
118
- class RpcApi(LinkProtocol):
119
- def __init__(self, *args, **kwargs):
120
- super().__init__(*args, **kwargs)
121
- self._futures = []
122
-
123
- def _handle_future_result(self, future):
124
- self._futures.remove(future)
125
- self.publish('deferred.responses',
126
- self._make_deferred_result_response(future))
127
-
128
- def _make_deferred_result_response(self, future):
129
- if future.has_exception():
130
- return {
131
- 'type': DEFERRED_RESPONSE_TYPE,
132
- 'id': future.id(),
133
- 'rpcResponse': make_error_response(future.exception())
134
- }
135
- return {
136
- 'type': DEFERRED_RESPONSE_TYPE,
137
- 'id': future.id(),
138
- 'rpcResponse': make_result_response(self.serialize(future.result()))
139
- }
140
-
141
- def serialize(self, obj):
142
- try:
143
- encoder = RpcEncoder(encoders=DEFAULT_ENCODERS,
144
- extra_args=(self.addAttachment,))
145
- return encoder.encode(obj)
146
- except:
147
- traceback.print_exc()
package/server/host.js DELETED
@@ -1,134 +0,0 @@
1
- /* eslint-disable-next-line max-classes-per-file */
2
- import WebsocketConnection from 'wslink/src/WebsocketConnection';
3
- import { defer } from '../src/utils/common';
4
-
5
- import { deserialize, serialize } from './serialize';
6
-
7
- /**
8
- * Matches a response against valid type names
9
- */
10
- function isValidResponse(response, types) {
11
- const rtype = response?.type;
12
- if (!types.includes(rtype)) {
13
- return false;
14
- }
15
- switch (rtype) {
16
- case 'rpc.result':
17
- return 'result' in response;
18
- case 'rpc.error':
19
- return 'error' in response;
20
- case 'rpc.deferred':
21
- return 'id' in response;
22
- case 'deferred.response':
23
- return 'id' in response && 'rpcResponse' in response;
24
- default:
25
- return false;
26
- }
27
- }
28
-
29
- export class RpcError extends Error {}
30
-
31
- export default class HostConnection {
32
- constructor(wsUrl) {
33
- this.ws = null;
34
- this.wsUrl = wsUrl;
35
- this.connected = false;
36
- this.deferredResponses = new Map();
37
- }
38
-
39
- async connect() {
40
- return new Promise((resolve, reject) => {
41
- if (!this.connected) {
42
- this.ws = WebsocketConnection.newInstance({ urls: this.wsUrl });
43
-
44
- this.ws.onConnectionReady(() => {
45
- this.connected = true;
46
- this.session = this.ws.getSession();
47
-
48
- this.session.subscribe(
49
- 'deferred.responses',
50
- this.handleDeferredResponse
51
- );
52
-
53
- resolve();
54
- });
55
-
56
- this.ws.onConnectionClose(() => {
57
- this.connected = false;
58
- });
59
-
60
- this.ws.onConnectionError(() => {
61
- reject(new Error('Failed to connect to ws endpoint'));
62
- });
63
-
64
- this.ws.connect();
65
- }
66
- });
67
- }
68
-
69
- async disconnect() {
70
- if (this.connected) {
71
- this.ws.destroy();
72
- }
73
- }
74
-
75
- async call(endpoint, ...args) {
76
- if (!this.connected) {
77
- throw new Error('Not connected');
78
- }
79
-
80
- const attach = (obj) => {
81
- if (ArrayBuffer.isView(obj) && !(obj instanceof DataView)) {
82
- return this.session.addAttachment(obj.buffer);
83
- }
84
- return obj;
85
- };
86
-
87
- const preparedArgs = args.map((arg) => serialize(arg, attach));
88
-
89
- const response = await this.session.call(endpoint, preparedArgs);
90
- return this.handleRpcResponse(response);
91
- }
92
-
93
- async handleRpcResponse(response) {
94
- if (
95
- !isValidResponse(response, ['rpc.result', 'rpc.error', 'rpc.deferred'])
96
- ) {
97
- throw new Error('Invalid response from rpc');
98
- }
99
-
100
- if (response.type === 'rpc.deferred') {
101
- const deferred = defer();
102
- this.deferredResponses.set(response.id, deferred);
103
- return deferred.promise;
104
- }
105
-
106
- if (response.type === 'rpc.error') {
107
- throw new RpcError(response.error);
108
- }
109
-
110
- const result = await deserialize(response.result);
111
- return result;
112
- }
113
-
114
- async handleDeferredResponse(response) {
115
- if (!isValidResponse(response, ['deferred.result'])) {
116
- throw new Error('Invalid deferred response');
117
- }
118
-
119
- const { id } = response;
120
- if (!this.deferredResponses.has(id)) {
121
- throw new Error('Received a deferred response for a nonexistent call');
122
- }
123
-
124
- const deferred = this.deferredResponses.get(id);
125
- this.deferredResponses.delete(id);
126
-
127
- try {
128
- const result = await this.handleRpcResponse(response.rpcResponse);
129
- deferred.resolve(result);
130
- } catch (e) {
131
- deferred.reject(e);
132
- }
133
- }
134
- }
@@ -1,111 +0,0 @@
1
- import vtk from '@kitware/vtk.js/vtk';
2
-
3
- export const BREAK = Symbol('Break');
4
-
5
- export function vtkObjectReplacer(vo) {
6
- if (vo?.isA?.('vtkObject')) {
7
- return vo.getState();
8
- }
9
- return vo;
10
- }
11
-
12
- export function vtkDataArrayJSONReplacer(da, attach) {
13
- if (da?.classHierarchy?.includes?.('vtkDataArray')) {
14
- const values = new globalThis[da.dataType](da.values);
15
- return {
16
- ...da,
17
- values: attach(values),
18
- };
19
- }
20
- return da;
21
- }
22
-
23
- /**
24
- * Serializes typed arrays into regular arrays
25
- */
26
- export function typedArrayReplacer(ta) {
27
- if (ArrayBuffer.isView(ta) && !(ta instanceof DataView)) {
28
- return Array.from(ta);
29
- }
30
- return ta;
31
- }
32
-
33
- export async function vtkDataArrayValueReviver(da) {
34
- if (da?.vtkClass === 'vtkDataArray' && da?.values instanceof Blob) {
35
- const ab = await da.values.arrayBuffer();
36
- return {
37
- ...da,
38
- values: new globalThis[da.dataType](ab),
39
- };
40
- }
41
- return da;
42
- }
43
-
44
- export function vtkObjectReviver(obj) {
45
- if ('vtkClass' in obj) {
46
- return vtk(obj);
47
- }
48
- return obj;
49
- }
50
-
51
- const REPLACERS = [
52
- vtkObjectReplacer,
53
- vtkDataArrayJSONReplacer,
54
- typedArrayReplacer,
55
- ];
56
-
57
- const REVIVERS = [
58
- vtkDataArrayValueReviver,
59
- // should be after the vtkDataArrayValueReviver
60
- vtkObjectReviver,
61
- ];
62
-
63
- export function serialize(obj, attach) {
64
- return JSON.parse(
65
- JSON.stringify(obj, (key, value) => {
66
- let transformed = value;
67
- for (let i = 0; i < REPLACERS.length; i += 1) {
68
- const result = REPLACERS[i](transformed, attach);
69
- if (result === BREAK) {
70
- break;
71
- }
72
- transformed = result;
73
- }
74
- return transformed;
75
- })
76
- );
77
- }
78
-
79
- export async function deserialize(obj) {
80
- async function revive(o) {
81
- let transformed = o;
82
- for (let i = 0; i < REVIVERS.length; i += 1) {
83
- // eslint-disable-next-line no-await-in-loop
84
- const result = await REVIVERS[i](transformed);
85
- if (result === BREAK) {
86
- break;
87
- }
88
- transformed = result;
89
- }
90
- return transformed;
91
- }
92
-
93
- async function recurseHelper(o) {
94
- if (Array.isArray(o)) {
95
- const newArray = await Promise.all(o.map((item) => recurseHelper(item)));
96
- return revive(newArray);
97
- }
98
- if (o instanceof Object && o.constructor === Object) {
99
- const newO = {};
100
- await Promise.all(
101
- Object.keys(o).map(async (k) => {
102
- newO[k] = await recurseHelper(o[k]);
103
- })
104
- );
105
- return revive(newO);
106
- }
107
- return o;
108
- }
109
-
110
- return recurseHelper(obj);
111
- }
@@ -1,203 +0,0 @@
1
- import json
2
- import struct
3
- import itk
4
- import numpy as np
5
-
6
- JS_TO_NPY_TYPEMAP = {
7
- 'Int8Array': {
8
- 'struct': (1, 'b'),
9
- 'dtype': 'int8',
10
- },
11
- 'Int16Array': {
12
- 'struct': (2, 'h'),
13
- 'dtype': 'int16',
14
- },
15
- 'Int32Array': {
16
- 'struct': (4, 'i'),
17
- 'dtype': 'int32',
18
- },
19
- 'Uint8Array': {
20
- 'struct': (1, 'B'),
21
- 'dtype': 'uint8',
22
- },
23
- 'Uint16Array': {
24
- 'struct': (2, 'H'),
25
- 'dtype': 'uint16',
26
- },
27
- 'Uint32Array': {
28
- 'struct': (4, 'I'),
29
- 'dtype': 'uint32',
30
- },
31
- 'Float32Array': {
32
- 'struct': (4, 'f'),
33
- 'dtype': 'float32',
34
- },
35
- 'Float64Array': {
36
- 'struct': (8, 'd'),
37
- 'dtype': 'float64',
38
- },
39
- }
40
-
41
- ITK_COMP_TO_JS_TYPEMAP = {
42
- 'SC': 'Int8Array',
43
- 'UC': 'Uint8Array',
44
- 'SS': 'Int16Array',
45
- 'US': 'Uint16Array',
46
- 'SI': 'Int32Array',
47
- 'UI': 'Uint32Array',
48
- 'F': 'Float32Array',
49
- 'D': 'Float64Array',
50
- 'B': 'Uint8Array'
51
- }
52
-
53
-
54
- def bytebuffer_to_numpy(blob, js_type):
55
- typeinfo = JS_TO_NPY_TYPEMAP[js_type]
56
- size, fmt = typeinfo['struct']
57
- dtype = np.dtype(typeinfo['dtype'])
58
-
59
- if len(blob) % size != 0:
60
- raise ValueError('given byte buffer is not aligned to the type')
61
-
62
- full_fmt = '<{0}{1}'.format(len(blob) // size, fmt)
63
- return np.array(struct.unpack(full_fmt, blob), dtype=dtype, copy=False)
64
-
65
-
66
- def itk_image_pixel_type_to_js(itk_image):
67
- component_str = repr(itk_image).split(
68
- 'itkImagePython.')[1].split(';')[0][8:]
69
- # TODO handle mangling as per https://github.com/InsightSoftwareConsortium/itk-jupyter-widgets/blob/master/itkwidgets/trait_types.py#L49
70
- return ITK_COMP_TO_JS_TYPEMAP[component_str[:-1]]
71
-
72
-
73
- class RpcEncoder(object):
74
- def __init__(self, encoders=[], extra_args=[], extra_kwargs={}):
75
- self._encoders = list(encoders)
76
- self._extra_args = extra_args
77
- self._extra_kwargs = extra_kwargs
78
-
79
- def add_encoder(self, encoder):
80
- self._encoders.append(encoder)
81
-
82
- def remove_encoder(self, encoder):
83
- self._encoders.remove(encoder)
84
-
85
- def run_encoders(self, obj):
86
- output = obj
87
- for encoder in self._encoders:
88
- output = encoder(output, *self._extra_args, **self._extra_kwargs)
89
- return output
90
-
91
- def encode(self, obj):
92
- # run on every possible value
93
- if isinstance(obj, list):
94
- return self.run_encoders([self.encode(item) for item in obj])
95
- if isinstance(obj, dict):
96
- return self.run_encoders({k: self.encode(v) for k, v in obj.items()})
97
- else:
98
- return self.run_encoders(obj)
99
-
100
-
101
- class RpcDecoder(object):
102
- def __init__(self, hooks=[], extra_args=[], extra_kwargs={}):
103
- self._hooks = list(hooks)
104
- self._extra_args = extra_args
105
- self._extra_kwargs = extra_kwargs
106
-
107
- def add_hook(self, hook):
108
- self._hooks.append(hook)
109
-
110
- def remove_hook(self, hook):
111
- self._hooks.remove(hook)
112
-
113
- def run_hooks(self, val):
114
- output = val
115
- for hook in self._hooks:
116
- output = hook(output, *self._extra_args, **self._extra_kwargs)
117
- return output
118
-
119
- def decode(self, obj):
120
- # only run hooks on dictionaries
121
- if isinstance(obj, list):
122
- return [self.decode(item) for item in obj]
123
- if isinstance(obj, dict):
124
- return self.run_hooks({k: self.decode(v) for k, v in obj.items()})
125
- else:
126
- return obj
127
-
128
-
129
- def itk_image_encoder(obj, attach):
130
- if type(obj).__name__.startswith('itkImage'):
131
- img = obj
132
- size = list(img.GetLargestPossibleRegion().GetSize())
133
- values = itk.GetArrayFromImage(img).flatten(order='C')
134
- return {
135
- 'vtkClass': 'vtkImageData',
136
- 'dataDescription': 8,
137
- 'direction': list(
138
- itk.GetArrayFromVnlMatrix(
139
- img.GetDirection().GetVnlMatrix().as_matrix()
140
- ).flatten()
141
- ),
142
- 'extent': [
143
- 0, size[0] - 1,
144
- 0, size[1] - 1,
145
- 0, size[2] - 1,
146
- ],
147
- 'spacing': list(img.GetSpacing()),
148
- 'origin': list(img.GetOrigin()),
149
- 'pointData': {
150
- 'vtkClass': 'vtkDataSetAttributes',
151
- 'activeScalars': 0, # the index of the only array
152
- 'arrays': [
153
- {
154
- 'data': {
155
- 'vtkClass': 'vtkDataArray',
156
- 'size': len(values),
157
- 'values': attach(values.tobytes()),
158
- 'dataType': itk_image_pixel_type_to_js(img),
159
- 'numberOfComponents': img.GetNumberOfComponentsPerPixel(),
160
- 'name': 'Scalars',
161
- }
162
- }
163
- ]
164
- }
165
- }
166
- return obj
167
-
168
-
169
- def itk_image_decode_hook(obj):
170
- if isinstance(obj, dict) and obj.get('vtkClass', None) == 'vtkImageData':
171
- data_array = obj['pointData']['arrays'][0]['data']
172
- pixel_data = bytebuffer_to_numpy(
173
- data_array['values'], data_array['dataType'])
174
-
175
- extent = obj['extent']
176
- # numpy indexes in ZYX order, where X varies the fastest
177
- dims = [
178
- extent[5] - extent[4] + 1,
179
- extent[3] - extent[2] + 1,
180
- extent[1] - extent[0] + 1,
181
- ]
182
- direction = np.zeros((3, 3))
183
- for x in range(3):
184
- for y in range(3):
185
- direction[x][y] = obj['direction'][x*3+y]
186
-
187
- itk_image = itk.GetImageFromArray(np.reshape(pixel_data, dims))
188
- # https://discourse.itk.org/t/set-image-direction-from-numpy-array/844/10
189
- vnlmat = itk.GetVnlMatrixFromArray(direction)
190
- itk_image.GetDirection().GetVnlMatrix().copy_in(vnlmat.data_block())
191
- itk_image.SetOrigin(obj['origin'])
192
- itk_image.SetSpacing(obj['spacing'])
193
- return itk_image
194
- return obj
195
-
196
-
197
- DEFAULT_DECODERS = [
198
- itk_image_decode_hook,
199
- ]
200
-
201
- DEFAULT_ENCODERS = [
202
- itk_image_encoder,
203
- ]
package/server/server.py DELETED
@@ -1,84 +0,0 @@
1
- import sys
2
- import os
3
- import webbrowser
4
- import socket
5
- import argparse
6
- import importlib
7
-
8
- from wslink.websocket import ServerProtocol
9
- from wslink import server
10
- from twisted.internet import reactor
11
-
12
-
13
- def get_port():
14
- # Don't care about race condition here for getting a free port
15
- # if someone binds the port between get_port() and actually binding,
16
- # then the server won't start
17
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
18
- sock.bind(('localhost', 0))
19
- _, port = sock.getsockname()
20
- sock.close()
21
- return port
22
-
23
-
24
- def create_protocol(ApiClass):
25
- class ApiProtocol(ServerProtocol):
26
- authKey = 'wslink-secret'
27
-
28
- @staticmethod
29
- def configure(options):
30
- ApiProtocol.authKey = options.authKey
31
-
32
- def initialize(self):
33
- self.registerLinkProtocol(ApiClass())
34
- self.updateSecret(ApiProtocol.authKey)
35
-
36
- return ApiProtocol
37
-
38
-
39
- if __name__ == '__main__':
40
- # https://stackoverflow.com/questions/7674790/bundling-data-files-with-pyinstaller-onefile
41
- try:
42
- basepath = sys._MEIPASS
43
- except:
44
- basepath = os.path.dirname(os.path.dirname(sys.argv[0]))
45
-
46
- parser = argparse.ArgumentParser()
47
- parser.add_argument('-H', '--host', default='localhost',
48
- help='Hostname for server to listen on')
49
- parser.add_argument('-P', '--port', default=get_port(),
50
- help='Port for server to listen on')
51
- parser.add_argument('-b', '--no-browser', action='store_true',
52
- help='Do not auto-open the browser')
53
- parser.add_argument('api_script',
54
- help='Python file that exposes ServerApi')
55
- args = parser.parse_args()
56
-
57
- static_dir = os.path.join(basepath, 'www')
58
- host = args.host
59
- port = args.port
60
- server_args = [
61
- '--content', static_dir,
62
- '--host', host,
63
- '--port', str(port)
64
- ]
65
-
66
- wsurl = 'ws://{host}:{port}/ws'.format(host=host, port=port)
67
- full_url = 'http://{host}:{port}/?wsServer={wsurl}'.format(
68
- host=host, port=port, wsurl=wsurl)
69
-
70
- def open_webapp():
71
- webbrowser.open(full_url)
72
-
73
- # if not args.no_browser:
74
- # print('If the browser doesn\'t open, navigate to:', full_url)
75
- # reactor.callLater(0.1, open_webapp)
76
-
77
- sys.path.append(os.path.dirname(os.path.realpath(__file__)))
78
-
79
- spec = importlib.util.spec_from_file_location('Api', args.api_script)
80
- api_module = importlib.util.module_from_spec(spec)
81
- spec.loader.exec_module(api_module)
82
-
83
- server.start(server_args, create_protocol(api_module.Api))
84
- server.stop_webserver()
package/server/test.py DELETED
@@ -1,17 +0,0 @@
1
- import itk
2
- import json
3
- from helper import RpcApi, rpc
4
-
5
-
6
- class Api(RpcApi):
7
-
8
- @rpc('run')
9
- def test(self, arg1, arg2):
10
- print(type(arg1), type(arg2), arg2)
11
- with open('spleen_10.json', 'r') as fp:
12
- mm = json.load(fp)
13
- return {
14
- 'segmentation': itk.imread('spleen_10-label.nrrd'),
15
- # 'segmentation': itk.imread('/home/forrestli/data/Branch-label.nrrd'),
16
- 'measurements': mm,
17
- }
Binary file