@cornerstonejs/core 2.0.0-beta.20 → 2.0.0-beta.21

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 (325) hide show
  1. package/dist/esm/RenderingEngine/BaseVolumeViewport.d.ts +23 -13
  2. package/dist/esm/RenderingEngine/BaseVolumeViewport.js +36 -44
  3. package/dist/esm/RenderingEngine/CanvasActor/CanvasMapper.d.ts +1 -1
  4. package/dist/esm/RenderingEngine/CanvasActor/CanvasProperties.d.ts +1 -1
  5. package/dist/esm/RenderingEngine/CanvasActor/index.js +2 -1
  6. package/dist/esm/RenderingEngine/RenderingEngine.d.ts +7 -8
  7. package/dist/esm/RenderingEngine/RenderingEngine.js +18 -17
  8. package/dist/esm/RenderingEngine/StackViewport.d.ts +29 -18
  9. package/dist/esm/RenderingEngine/StackViewport.js +66 -50
  10. package/dist/esm/RenderingEngine/VideoViewport.d.ts +19 -28
  11. package/dist/esm/RenderingEngine/VideoViewport.js +59 -22
  12. package/dist/esm/RenderingEngine/Viewport.d.ts +25 -14
  13. package/dist/esm/RenderingEngine/Viewport.js +20 -14
  14. package/dist/esm/RenderingEngine/VolumeViewport.d.ts +21 -9
  15. package/dist/esm/RenderingEngine/VolumeViewport.js +88 -8
  16. package/dist/esm/RenderingEngine/VolumeViewport3D.d.ts +3 -3
  17. package/dist/esm/RenderingEngine/VolumeViewport3D.js +10 -3
  18. package/dist/esm/RenderingEngine/WSIViewport.d.ts +58 -0
  19. package/dist/esm/RenderingEngine/WSIViewport.js +414 -0
  20. package/dist/esm/RenderingEngine/helpers/addImageSlicesToViewports.d.ts +1 -1
  21. package/dist/esm/RenderingEngine/helpers/addImageSlicesToViewports.js +3 -3
  22. package/dist/esm/RenderingEngine/helpers/addVolumesToViewports.d.ts +1 -1
  23. package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/colormap.d.ts +1 -1
  24. package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/colormap.js +1 -1
  25. package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/lookupTable.d.ts +2 -2
  26. package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/lookupTable.js +15 -5
  27. package/dist/esm/RenderingEngine/helpers/cpuFallback/drawImageSync.d.ts +1 -1
  28. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/calculateTransform.d.ts +1 -1
  29. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/canvasToPixel.d.ts +1 -1
  30. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/correctShift.d.ts +3 -3
  31. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/createViewport.d.ts +1 -1
  32. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/doesImageNeedToBeRendered.d.ts +1 -1
  33. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/fitToWindow.d.ts +1 -1
  34. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/generateColorLUT.d.ts +1 -1
  35. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/generateColorLUT.js +1 -1
  36. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/generateLut.d.ts +1 -1
  37. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/generateLut.js +2 -2
  38. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/getDefaultViewport.d.ts +1 -1
  39. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/getImageFitScale.d.ts +1 -1
  40. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/getImageSize.d.ts +1 -1
  41. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/getLut.d.ts +1 -1
  42. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/getLut.js +1 -1
  43. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/getTransform.d.ts +1 -1
  44. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/initializeRenderCanvas.d.ts +1 -1
  45. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/lutMatches.d.ts +2 -1
  46. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/lutMatches.js +1 -1
  47. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/pixelToCanvas.d.ts +1 -1
  48. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/renderColorImage.d.ts +1 -1
  49. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/renderColorImage.js +3 -4
  50. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/renderGrayscaleImage.d.ts +1 -1
  51. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/renderGrayscaleImage.js +2 -3
  52. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/renderPseudoColorImage.js +2 -2
  53. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/resetCamera.d.ts +1 -1
  54. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/resize.d.ts +1 -1
  55. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/saveLastRendered.d.ts +1 -1
  56. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/setDefaultViewport.d.ts +1 -1
  57. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/setToPixelCoordinateSystem.d.ts +1 -1
  58. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedColorPixelDataToCanvasImageData.d.ts +1 -1
  59. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedColorPixelDataToCanvasImageData.js +1 -1
  60. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageData.d.ts +1 -1
  61. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageData.js +1 -1
  62. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataColorLUT.js +1 -1
  63. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataPET.d.ts +1 -1
  64. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataPET.js +1 -1
  65. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataPseudocolorLUT.js +1 -1
  66. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataPseudocolorLUTPET.js +1 -1
  67. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataRGBA.d.ts +1 -1
  68. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataRGBA.js +1 -1
  69. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedRGBAPixelDataToCanvasImageData.d.ts +1 -1
  70. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedRGBAPixelDataToCanvasImageData.js +1 -1
  71. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/transform.d.ts +1 -1
  72. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/validator.d.ts +2 -2
  73. package/dist/esm/RenderingEngine/helpers/createVolumeActor.d.ts +3 -3
  74. package/dist/esm/RenderingEngine/helpers/createVolumeActor.js +3 -6
  75. package/dist/esm/RenderingEngine/helpers/createVolumeMapper.d.ts +4 -1
  76. package/dist/esm/RenderingEngine/helpers/getOrCreateCanvas.js +5 -4
  77. package/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.d.ts +2 -2
  78. package/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.js +10 -35
  79. package/dist/esm/RenderingEngine/helpers/setVolumesForViewports.d.ts +1 -1
  80. package/dist/esm/RenderingEngine/helpers/viewportTypeToViewportClass.d.ts +2 -0
  81. package/dist/esm/RenderingEngine/helpers/viewportTypeToViewportClass.js +2 -0
  82. package/dist/esm/RenderingEngine/helpers/volumeNewImageEventDispatcher.d.ts +1 -1
  83. package/dist/esm/RenderingEngine/renderingEngineCache.d.ts +1 -1
  84. package/dist/esm/RenderingEngine/vtkClasses/vtkSlabCamera.d.ts +4 -2
  85. package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLTexture.js +87 -78
  86. package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLViewNodeFactory.js +1 -1
  87. package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLVolumeMapper.js +83 -42
  88. package/dist/esm/Settings.d.ts +1 -1
  89. package/dist/esm/cache/cache.d.ts +15 -19
  90. package/dist/esm/cache/cache.js +110 -56
  91. package/dist/esm/cache/classes/Contour.d.ts +4 -4
  92. package/dist/esm/cache/classes/ContourSet.d.ts +3 -3
  93. package/dist/esm/cache/classes/ImageVolume.d.ts +19 -19
  94. package/dist/esm/cache/classes/ImageVolume.js +48 -254
  95. package/dist/esm/cache/classes/Surface.d.ts +3 -3
  96. package/dist/esm/constants/cpuColormaps.d.ts +1 -1
  97. package/dist/esm/constants/viewportPresets.d.ts +1 -1
  98. package/dist/esm/enums/GenerateImageType.d.ts +5 -0
  99. package/dist/esm/enums/GenerateImageType.js +6 -0
  100. package/dist/esm/enums/MetadataModules.d.ts +2 -1
  101. package/dist/esm/enums/MetadataModules.js +1 -0
  102. package/dist/esm/enums/ViewportType.d.ts +2 -1
  103. package/dist/esm/enums/ViewportType.js +1 -0
  104. package/dist/esm/enums/index.d.ts +2 -2
  105. package/dist/esm/enums/index.js +2 -2
  106. package/dist/esm/eventTarget.js +2 -3
  107. package/dist/esm/getEnabledElement.d.ts +1 -1
  108. package/dist/esm/global.d.ts +0 -1
  109. package/dist/esm/index.d.ts +4 -3
  110. package/dist/esm/index.js +3 -2
  111. package/dist/esm/init.d.ts +5 -8
  112. package/dist/esm/init.js +21 -82
  113. package/dist/esm/loaders/ProgressiveRetrieveImages.d.ts +5 -5
  114. package/dist/esm/loaders/ProgressiveRetrieveImages.js +3 -1
  115. package/dist/esm/loaders/configuration/interleavedRetrieve.d.ts +1 -1
  116. package/dist/esm/loaders/fillNearbyFrames.d.ts +2 -2
  117. package/dist/esm/loaders/geometryLoader.d.ts +3 -3
  118. package/dist/esm/loaders/imageLoader.d.ts +12 -17
  119. package/dist/esm/loaders/imageLoader.js +174 -95
  120. package/dist/esm/loaders/utils/contourSet/createContourSet.d.ts +1 -1
  121. package/dist/esm/loaders/utils/contourSet/validateContourSet.d.ts +1 -1
  122. package/dist/esm/loaders/utils/surface/createSurface.d.ts +1 -1
  123. package/dist/esm/loaders/utils/surface/validateSurface.d.ts +1 -1
  124. package/dist/esm/loaders/volumeLoader.d.ts +14 -22
  125. package/dist/esm/loaders/volumeLoader.js +62 -210
  126. package/dist/esm/metaData.d.ts +2 -4
  127. package/dist/esm/requestPool/requestPoolManager.d.ts +7 -9
  128. package/dist/esm/types/AABB2.d.ts +2 -2
  129. package/dist/esm/types/AABB3.d.ts +2 -2
  130. package/dist/esm/types/ActorSliceRange.d.ts +5 -5
  131. package/dist/esm/types/BoundsIJK.d.ts +1 -1
  132. package/dist/esm/types/BoundsLPS.d.ts +1 -1
  133. package/dist/esm/types/CPUFallbackColormap.d.ts +3 -3
  134. package/dist/esm/types/CPUFallbackColormapData.d.ts +4 -4
  135. package/dist/esm/types/CPUFallbackColormapsData.d.ts +3 -5
  136. package/dist/esm/types/CPUFallbackEnabledElement.d.ts +14 -11
  137. package/dist/esm/types/CPUFallbackLUT.d.ts +4 -3
  138. package/dist/esm/types/CPUFallbackLookupTable.d.ts +2 -2
  139. package/dist/esm/types/CPUFallbackRenderingTools.d.ts +5 -5
  140. package/dist/esm/types/CPUFallbackTransform.d.ts +3 -3
  141. package/dist/esm/types/CPUFallbackViewport.d.ts +6 -6
  142. package/dist/esm/types/CPUFallbackViewportDisplayedArea.d.ts +3 -3
  143. package/dist/esm/types/CPUIImageData.d.ts +17 -9
  144. package/dist/esm/types/Color.d.ts +1 -1
  145. package/dist/esm/types/Colormap.d.ts +7 -7
  146. package/dist/esm/types/ContourData.d.ts +6 -6
  147. package/dist/esm/types/Cornerstone3DConfig.d.ts +7 -7
  148. package/dist/esm/types/CustomEventType.d.ts +2 -2
  149. package/dist/esm/types/EventTypes.d.ts +55 -55
  150. package/dist/esm/types/FlipDirection.d.ts +3 -3
  151. package/dist/esm/types/IActor.d.ts +3 -3
  152. package/dist/esm/types/ICache.d.ts +4 -4
  153. package/dist/esm/types/ICachedGeometry.d.ts +3 -3
  154. package/dist/esm/types/ICachedImage.d.ts +3 -2
  155. package/dist/esm/types/ICachedVolume.d.ts +3 -2
  156. package/dist/esm/types/ICamera.d.ts +3 -3
  157. package/dist/esm/types/IContour.d.ts +4 -3
  158. package/dist/esm/types/IContourSet.d.ts +5 -2
  159. package/dist/esm/types/IDynamicImageVolume.d.ts +3 -3
  160. package/dist/esm/types/IEnabledElement.d.ts +2 -2
  161. package/dist/esm/types/IGeometry.d.ts +4 -4
  162. package/dist/esm/types/IImage.d.ts +12 -10
  163. package/dist/esm/types/IImageCalibration.d.ts +2 -2
  164. package/dist/esm/types/IImageData.d.ts +11 -4
  165. package/dist/esm/types/IImageFrame.d.ts +42 -0
  166. package/dist/esm/types/IImageFrame.js +1 -0
  167. package/dist/esm/types/IImageVolume.d.ts +17 -14
  168. package/dist/esm/types/ILoadObject.d.ts +3 -3
  169. package/dist/esm/types/IPointsManager.d.ts +23 -0
  170. package/dist/esm/types/IPointsManager.js +1 -0
  171. package/dist/esm/types/IRLEVoxelMap.d.ts +16 -0
  172. package/dist/esm/types/IRLEVoxelMap.js +1 -0
  173. package/dist/esm/types/IRegisterImageLoader.d.ts +2 -2
  174. package/dist/esm/types/IRenderingEngine.d.ts +11 -12
  175. package/dist/esm/types/IRetrieveConfiguration.d.ts +6 -6
  176. package/dist/esm/types/IStackInput.d.ts +1 -1
  177. package/dist/esm/types/IStackViewport.d.ts +69 -2
  178. package/dist/esm/types/IStreamingImageVolume.d.ts +3 -4
  179. package/dist/esm/types/IStreamingVolumeProperties.d.ts +5 -5
  180. package/dist/esm/types/ISurface.d.ts +1 -1
  181. package/dist/esm/types/ITransferFunctionNode.d.ts +9 -0
  182. package/dist/esm/types/ITransferFunctionNode.js +1 -0
  183. package/dist/esm/types/IVideoViewport.d.ts +40 -2
  184. package/dist/esm/types/IViewport.d.ts +62 -41
  185. package/dist/esm/types/IVolume.d.ts +2 -2
  186. package/dist/esm/types/IVolumeInput.d.ts +2 -2
  187. package/dist/esm/types/IVolumeViewport.d.ts +17 -16
  188. package/dist/esm/types/IVoxelManager.d.ts +54 -0
  189. package/dist/esm/types/IVoxelManager.js +1 -0
  190. package/dist/esm/types/IWSIViewport.d.ts +16 -0
  191. package/dist/esm/types/IWSIViewport.js +1 -0
  192. package/dist/esm/types/ImageLoadListener.d.ts +2 -2
  193. package/dist/esm/types/ImageLoaderFn.d.ts +3 -3
  194. package/dist/esm/types/ImagePixelModule.d.ts +1 -1
  195. package/dist/esm/types/ImagePlaneModule.d.ts +2 -2
  196. package/dist/esm/types/ImageSliceData.d.ts +3 -3
  197. package/dist/esm/types/ImageVolumeProps.d.ts +4 -4
  198. package/dist/esm/types/Mat3.d.ts +1 -1
  199. package/dist/esm/types/Metadata.d.ts +6 -6
  200. package/dist/esm/types/MetadataModuleTypes.d.ts +65 -0
  201. package/dist/esm/types/MetadataModuleTypes.js +1 -0
  202. package/dist/esm/types/OrientationVectors.d.ts +4 -4
  203. package/dist/esm/types/Plane.d.ts +1 -1
  204. package/dist/esm/types/Point2.d.ts +1 -1
  205. package/dist/esm/types/Point3.d.ts +3 -3
  206. package/dist/esm/types/Point4.d.ts +1 -1
  207. package/dist/esm/types/RGB.d.ts +1 -1
  208. package/dist/esm/types/ScalingParameters.d.ts +7 -7
  209. package/dist/esm/types/StackViewportProperties.d.ts +3 -3
  210. package/dist/esm/types/SurfaceData.d.ts +5 -5
  211. package/dist/esm/types/TransformMatrix2D.d.ts +1 -1
  212. package/dist/esm/types/VideoViewportProperties.d.ts +3 -3
  213. package/dist/esm/types/VideoViewportTypes.d.ts +7 -7
  214. package/dist/esm/types/ViewportInputOptions.d.ts +7 -7
  215. package/dist/esm/types/ViewportPreset.d.ts +1 -1
  216. package/dist/esm/types/ViewportProperties.d.ts +5 -5
  217. package/dist/esm/types/VolumeLoaderFn.d.ts +4 -3
  218. package/dist/esm/types/VolumeProps.d.ts +10 -5
  219. package/dist/esm/types/VolumeViewportProperties.d.ts +3 -3
  220. package/dist/esm/types/WSIViewportProperties.d.ts +3 -0
  221. package/dist/esm/types/WSIViewportProperties.js +1 -0
  222. package/dist/esm/types/WSIViewportTypes.d.ts +13 -0
  223. package/dist/esm/types/WSIViewportTypes.js +1 -0
  224. package/dist/esm/types/displayArea.d.ts +4 -4
  225. package/dist/esm/types/index.d.ts +16 -8
  226. package/dist/esm/types/voi.d.ts +4 -4
  227. package/dist/esm/utilities/PointsManager.d.ts +8 -10
  228. package/dist/esm/utilities/ProgressiveIterator.d.ts +1 -1
  229. package/dist/esm/utilities/ProgressiveIterator.js +3 -1
  230. package/dist/esm/utilities/RLEVoxelMap.d.ts +3 -8
  231. package/dist/esm/utilities/RLEVoxelMap.js +19 -19
  232. package/dist/esm/utilities/VoxelManager.d.ts +82 -20
  233. package/dist/esm/utilities/VoxelManager.js +466 -60
  234. package/dist/esm/utilities/actorCheck.d.ts +1 -1
  235. package/dist/esm/utilities/applyPreset.d.ts +2 -2
  236. package/dist/esm/utilities/calculateViewportsSpatialRegistration.d.ts +1 -1
  237. package/dist/esm/utilities/calculateViewportsSpatialRegistration.js +4 -4
  238. package/dist/esm/utilities/calibratedPixelSpacingMetadataProvider.d.ts +1 -1
  239. package/dist/esm/utilities/colormap.d.ts +1 -1
  240. package/dist/esm/utilities/convertStackToVolumeViewport.d.ts +2 -2
  241. package/dist/esm/utilities/convertStackToVolumeViewport.js +4 -4
  242. package/dist/esm/utilities/convertVolumeToStackViewport.d.ts +1 -1
  243. package/dist/esm/utilities/convertVolumeToStackViewport.js +1 -1
  244. package/dist/esm/utilities/createLinearRGBTransferFunction.d.ts +1 -1
  245. package/dist/esm/utilities/createLinearRGBTransferFunction.js +1 -3
  246. package/dist/esm/utilities/createSigmoidRGBTransferFunction.d.ts +2 -3
  247. package/dist/esm/utilities/createSigmoidRGBTransferFunction.js +8 -7
  248. package/dist/esm/utilities/decimate.d.ts +1 -1
  249. package/dist/esm/utilities/eventListener/TargetEventListeners.js +5 -3
  250. package/dist/esm/utilities/generateVolumePropsFromImageIds.d.ts +1 -1
  251. package/dist/esm/utilities/generateVolumePropsFromImageIds.js +33 -80
  252. package/dist/esm/utilities/genericMetadataProvider.d.ts +9 -2
  253. package/dist/esm/utilities/genericMetadataProvider.js +7 -1
  254. package/dist/esm/utilities/getBufferConfiguration.d.ts +2 -3
  255. package/dist/esm/utilities/getBufferConfiguration.js +5 -15
  256. package/dist/esm/utilities/getClosestImageId.js +1 -1
  257. package/dist/esm/utilities/getClosestStackImageIndexForPoint.d.ts +1 -1
  258. package/dist/esm/utilities/getCurrentVolumeViewportSlice.d.ts +4 -5
  259. package/dist/esm/utilities/getCurrentVolumeViewportSlice.js +8 -58
  260. package/dist/esm/utilities/getImageLegacy.d.ts +1 -1
  261. package/dist/esm/utilities/getImageSliceDataForVolumeViewport.d.ts +1 -1
  262. package/dist/esm/utilities/getMinMax.d.ts +2 -1
  263. package/dist/esm/utilities/getScalingParameters.d.ts +1 -1
  264. package/dist/esm/utilities/getSpacingInNormalDirection.d.ts +2 -2
  265. package/dist/esm/utilities/getTargetVolumeAndSpacingInNormalDir.d.ts +1 -1
  266. package/dist/esm/utilities/getTargetVolumeAndSpacingInNormalDir.js +2 -2
  267. package/dist/esm/utilities/getViewportImageCornersInWorld.d.ts +1 -1
  268. package/dist/esm/utilities/getViewportImageIds.d.ts +1 -1
  269. package/dist/esm/utilities/getViewportModality.d.ts +7 -3
  270. package/dist/esm/utilities/getViewportModality.js +9 -6
  271. package/dist/esm/utilities/getViewportsWithImageURI.d.ts +2 -2
  272. package/dist/esm/utilities/getViewportsWithVolumeId.d.ts +2 -2
  273. package/dist/esm/utilities/getViewportsWithVolumeId.js +3 -7
  274. package/dist/esm/utilities/getVoiFromSigmoidRGBTransferFunction.d.ts +1 -1
  275. package/dist/esm/utilities/getVolumeActorCorners.d.ts +2 -2
  276. package/dist/esm/utilities/getVolumeId.js +2 -2
  277. package/dist/esm/utilities/getVolumeSliceRangeInfo.d.ts +1 -1
  278. package/dist/esm/utilities/getVolumeViewportScrollInfo.d.ts +1 -1
  279. package/dist/esm/utilities/getVolumeViewportsContainingSameVolumes.d.ts +2 -2
  280. package/dist/esm/utilities/hasFloatScalingParameters.d.ts +1 -1
  281. package/dist/esm/utilities/imageRetrieveMetadataProvider.d.ts +1 -1
  282. package/dist/esm/utilities/imageToWorldCoords.d.ts +1 -1
  283. package/dist/esm/utilities/index.d.ts +3 -8
  284. package/dist/esm/utilities/index.js +4 -8
  285. package/dist/esm/utilities/indexWithinDimensions.d.ts +1 -1
  286. package/dist/esm/utilities/invertRgbTransferFunction.d.ts +2 -1
  287. package/dist/esm/utilities/isEqual.js +6 -1
  288. package/dist/esm/utilities/isPTPrescaledWithSUV.d.ts +1 -1
  289. package/dist/esm/utilities/isPTPrescaledWithSUV.js +1 -1
  290. package/dist/esm/utilities/isTypedArray.d.ts +1 -1
  291. package/dist/esm/utilities/loadImageToCanvas.d.ts +6 -6
  292. package/dist/esm/utilities/makeVolumeMetadata.d.ts +2 -2
  293. package/dist/esm/utilities/planar.d.ts +2 -2
  294. package/dist/esm/utilities/renderToCanvasCPU.d.ts +1 -1
  295. package/dist/esm/utilities/renderToCanvasGPU.d.ts +2 -2
  296. package/dist/esm/utilities/renderToCanvasGPU.js +1 -1
  297. package/dist/esm/utilities/scaleRgbTransferFunction.d.ts +2 -1
  298. package/dist/esm/utilities/snapFocalPointToSlice.d.ts +1 -1
  299. package/dist/esm/utilities/sortImageIdsAndGetSpacing.d.ts +5 -5
  300. package/dist/esm/utilities/transformCanvasToIJK.d.ts +2 -2
  301. package/dist/esm/utilities/transformIJKToCanvas.d.ts +1 -1
  302. package/dist/esm/utilities/triggerEvent.js +1 -1
  303. package/dist/esm/utilities/updateVTKImageDataWithCornerstoneImage.d.ts +2 -2
  304. package/dist/esm/utilities/updateVTKImageDataWithCornerstoneImage.js +1 -1
  305. package/dist/esm/utilities/uuidv4.js +3 -1
  306. package/dist/esm/utilities/worldToImageCoords.d.ts +1 -1
  307. package/dist/umd/index.js +1 -1
  308. package/dist/umd/index.js.map +1 -1
  309. package/package.json +5 -6
  310. package/dist/esm/cache/utils/restoreImagesFromBuffer.d.ts +0 -2
  311. package/dist/esm/cache/utils/restoreImagesFromBuffer.js +0 -28
  312. package/dist/esm/enums/SharedArrayBufferModes.d.ts +0 -6
  313. package/dist/esm/enums/SharedArrayBufferModes.js +0 -7
  314. package/dist/esm/utilities/cacheUtils.d.ts +0 -2
  315. package/dist/esm/utilities/cacheUtils.js +0 -86
  316. package/dist/esm/utilities/createFloat32SharedArray.d.ts +0 -2
  317. package/dist/esm/utilities/createFloat32SharedArray.js +0 -27
  318. package/dist/esm/utilities/createInt16SharedArray.d.ts +0 -2
  319. package/dist/esm/utilities/createInt16SharedArray.js +0 -11
  320. package/dist/esm/utilities/createUInt16SharedArray.d.ts +0 -2
  321. package/dist/esm/utilities/createUInt16SharedArray.js +0 -11
  322. package/dist/esm/utilities/createUint8SharedArray.d.ts +0 -2
  323. package/dist/esm/utilities/createUint8SharedArray.js +0 -12
  324. package/dist/esm/utilities/getScalarDataType.d.ts +0 -2
  325. package/dist/esm/utilities/getScalarDataType.js +0 -19
@@ -1,3 +1,5 @@
1
+ import { vec3 } from 'gl-matrix';
2
+ import cache from '../cache';
1
3
  import RLEVoxelMap from './RLEVoxelMap';
2
4
  import isEqual from './isEqual';
3
5
  const DEFAULT_RLE_SIZE = 5 * 1024;
@@ -9,20 +11,24 @@ export default class VoxelManager {
9
11
  [Infinity, -Infinity],
10
12
  [Infinity, -Infinity],
11
13
  ];
12
- this.numComps = 1;
14
+ this.numberOfComponents = 1;
15
+ this.scalarData = null;
16
+ this._sliceDataCache = null;
13
17
  this.getAtIJK = (i, j, k) => {
14
- const index = i + j * this.width + k * this.frameSize;
18
+ const index = this.toIndex([i, j, k]);
15
19
  return this._get(index);
16
20
  };
17
21
  this.setAtIJK = (i, j, k, v) => {
18
- const index = i + j * this.width + k * this.frameSize;
22
+ const index = this.toIndex([i, j, k]);
19
23
  if (this._set(index, v) !== false) {
20
24
  this.modifiedSlices.add(k);
21
25
  VoxelManager.addBounds(this.boundsIJK, [i, j, k]);
22
26
  }
23
27
  };
24
28
  this.getAtIJKPoint = ([i, j, k]) => this.getAtIJK(i, j, k);
25
- this.setAtIJKPoint = ([i, j, k], v) => this.setAtIJK(i, j, k, v);
29
+ this.setAtIJKPoint = ([i, j, k], v) => {
30
+ this.setAtIJK(i, j, k, v);
31
+ };
26
32
  this.getAtIndex = (index) => this._get(index);
27
33
  this.setAtIndex = (index, v) => {
28
34
  if (this._set(index, v) !== false) {
@@ -31,60 +37,167 @@ export default class VoxelManager {
31
37
  VoxelManager.addBounds(this.boundsIJK, pointIJK);
32
38
  }
33
39
  };
40
+ this.getMiddleSliceData = () => {
41
+ const middleSliceIndex = Math.floor(this.dimensions[2] / 2);
42
+ return this.getSliceData({
43
+ sliceIndex: middleSliceIndex,
44
+ slicePlane: 2,
45
+ });
46
+ };
34
47
  this.forEach = (callback, options) => {
35
- const boundsIJK = options?.boundsIJK || this.getBoundsIJK();
36
- const { isWithinObject } = options || {};
48
+ const boundsIJK = options.boundsIJK || this.getBoundsIJK();
49
+ const isInObject = options.isInObject || this.isInObject || (() => true);
50
+ const returnPoints = options.returnPoints || false;
51
+ const useLPSTransform = options.imageData;
52
+ const iMin = boundsIJK[0][0];
53
+ const iMax = boundsIJK[0][1];
54
+ const jMin = boundsIJK[1][0];
55
+ const jMax = boundsIJK[1][1];
56
+ const kMin = boundsIJK[2][0];
57
+ const kMax = boundsIJK[2][1];
58
+ const pointsInShape = [];
59
+ if (useLPSTransform) {
60
+ const { imageData } = options;
61
+ const direction = imageData.getDirection();
62
+ const rowCosines = direction.slice(0, 3);
63
+ const columnCosines = direction.slice(3, 6);
64
+ const scanAxisNormal = direction.slice(6, 9);
65
+ const spacing = imageData.getSpacing();
66
+ const [rowSpacing, columnSpacing, scanAxisSpacing] = spacing;
67
+ const start = vec3.fromValues(iMin, jMin, kMin);
68
+ const worldPosStart = imageData.indexToWorld(start);
69
+ const rowStep = vec3.fromValues(rowCosines[0] * rowSpacing, rowCosines[1] * rowSpacing, rowCosines[2] * rowSpacing);
70
+ const columnStep = vec3.fromValues(columnCosines[0] * columnSpacing, columnCosines[1] * columnSpacing, columnCosines[2] * columnSpacing);
71
+ const scanAxisStep = vec3.fromValues(scanAxisNormal[0] * scanAxisSpacing, scanAxisNormal[1] * scanAxisSpacing, scanAxisNormal[2] * scanAxisSpacing);
72
+ const currentPos = vec3.clone(worldPosStart);
73
+ for (let k = kMin; k <= kMax; k++) {
74
+ const startPosJ = vec3.clone(currentPos);
75
+ for (let j = jMin; j <= jMax; j++) {
76
+ const startPosI = vec3.clone(currentPos);
77
+ for (let i = iMin; i <= iMax; i++) {
78
+ const pointIJK = [i, j, k];
79
+ if (isInObject(currentPos, pointIJK)) {
80
+ const index = this.toIndex(pointIJK);
81
+ const value = this._get(index);
82
+ if (returnPoints) {
83
+ pointsInShape.push({
84
+ value,
85
+ index,
86
+ pointIJK,
87
+ pointLPS: currentPos.slice(),
88
+ });
89
+ }
90
+ if (callback) {
91
+ callback({ value, index, pointIJK, pointLPS: currentPos });
92
+ }
93
+ }
94
+ vec3.add(currentPos, currentPos, rowStep);
95
+ }
96
+ vec3.copy(currentPos, startPosI);
97
+ vec3.add(currentPos, currentPos, columnStep);
98
+ }
99
+ vec3.copy(currentPos, startPosJ);
100
+ vec3.add(currentPos, currentPos, scanAxisStep);
101
+ }
102
+ return pointsInShape;
103
+ }
37
104
  if (this.map) {
38
105
  for (const index of this.map.keys()) {
39
106
  const pointIJK = this.toIJK(index);
40
- const value = this._get(index);
41
- const callbackArguments = { value, index, pointIJK };
42
- if (isWithinObject?.(callbackArguments) === false) {
107
+ if (!isInObject(null, pointIJK)) {
43
108
  continue;
44
109
  }
45
- callback(callbackArguments);
110
+ const value = this._get(index);
111
+ if (returnPoints) {
112
+ pointsInShape.push({
113
+ value,
114
+ index,
115
+ pointIJK,
116
+ pointLPS: null,
117
+ });
118
+ }
119
+ callback({ value, index, pointIJK, pointLPS: null });
46
120
  }
121
+ return pointsInShape;
47
122
  }
48
123
  else {
49
- for (let k = boundsIJK[2][0]; k <= boundsIJK[2][1]; k++) {
124
+ for (let k = kMin; k <= kMax; k++) {
50
125
  const kIndex = k * this.frameSize;
51
- for (let j = boundsIJK[1][0]; j <= boundsIJK[1][1]; j++) {
126
+ for (let j = jMin; j <= jMax; j++) {
52
127
  const jIndex = kIndex + j * this.width;
53
- for (let i = boundsIJK[0][0], index = jIndex + i; i <= boundsIJK[0][1]; i++, index++) {
128
+ for (let i = iMin, index = jIndex + i; i <= iMax; i++, index++) {
54
129
  const value = this.getAtIndex(index);
55
- const callbackArguments = { value, index, pointIJK: [i, j, k] };
56
- if (isWithinObject?.(callbackArguments) === false) {
130
+ const pointIJK = [i, j, k];
131
+ if (!isInObject(null, pointIJK)) {
57
132
  continue;
58
133
  }
59
- callback(callbackArguments);
134
+ if (returnPoints) {
135
+ pointsInShape.push({
136
+ value,
137
+ index,
138
+ pointIJK,
139
+ pointLPS: null,
140
+ });
141
+ }
142
+ callback({ value, index, pointIJK: [i, j, k], pointLPS: null });
60
143
  }
61
144
  }
62
145
  }
146
+ return pointsInShape;
63
147
  }
64
148
  };
149
+ this.getSliceData = ({ sliceIndex, slicePlane, }) => {
150
+ const [width, height, depth] = this.dimensions;
151
+ const frameSize = width * height;
152
+ const startIndex = sliceIndex * frameSize;
153
+ let sliceSize;
154
+ const SliceDataConstructor = this.getConstructor();
155
+ function isValidConstructor(ctor) {
156
+ return typeof ctor === 'function';
157
+ }
158
+ if (!isValidConstructor(SliceDataConstructor)) {
159
+ return new Uint8Array(0);
160
+ }
161
+ let sliceData;
162
+ switch (slicePlane) {
163
+ case 0:
164
+ sliceSize = height * depth;
165
+ sliceData = new SliceDataConstructor(sliceSize);
166
+ for (let i = 0; i < height; i++) {
167
+ for (let j = 0; j < depth; j++) {
168
+ const index = sliceIndex + i * width + j * frameSize;
169
+ this.setSliceDataValue(sliceData, i * depth + j, this._get(index));
170
+ }
171
+ }
172
+ break;
173
+ case 1:
174
+ sliceSize = width * depth;
175
+ sliceData = new SliceDataConstructor(sliceSize);
176
+ for (let i = 0; i < width; i++) {
177
+ for (let j = 0; j < depth; j++) {
178
+ const index = i + sliceIndex * width + j * frameSize;
179
+ this.setSliceDataValue(sliceData, i + j * width, this._get(index));
180
+ }
181
+ }
182
+ break;
183
+ case 2:
184
+ sliceSize = width * height;
185
+ sliceData = new SliceDataConstructor(sliceSize);
186
+ for (let i = 0; i < sliceSize; i++) {
187
+ this.setSliceDataValue(sliceData, i, this._get(startIndex + i));
188
+ }
189
+ break;
190
+ default:
191
+ throw new Error('Oblique plane - todo - implement as ortho normal vector');
192
+ }
193
+ return sliceData;
194
+ };
65
195
  this.dimensions = dimensions;
66
196
  this.width = dimensions[0];
67
197
  this.frameSize = this.width * dimensions[1];
68
198
  this._get = _get;
69
199
  this._set = _set;
70
200
  }
71
- addPoint(point) {
72
- const index = Array.isArray(point)
73
- ? point[0] + this.width * point[1] + this.frameSize * point[2]
74
- : point;
75
- if (!this.points) {
76
- this.points = new Set();
77
- }
78
- this.points.add(index);
79
- }
80
- getPoints() {
81
- return this.points
82
- ? [...this.points].map((index) => this.toIJK(index))
83
- : [];
84
- }
85
- getPointIndices() {
86
- return this.points ? [...this.points] : [];
87
- }
88
201
  toIJK(index) {
89
202
  return [
90
203
  index % this.width,
@@ -101,6 +214,34 @@ export default class VoxelManager {
101
214
  }
102
215
  return this.dimensions.map((dimension) => [0, dimension - 1]);
103
216
  }
217
+ getScalarData() {
218
+ if (this.scalarData) {
219
+ return this.scalarData;
220
+ }
221
+ if (this._getScalarData) {
222
+ return this._getScalarData();
223
+ }
224
+ throw new Error('No scalar data available');
225
+ }
226
+ getScalarDataLength() {
227
+ if (this.scalarData) {
228
+ return this.scalarData.length;
229
+ }
230
+ if (this._getScalarDataLength) {
231
+ return this._getScalarDataLength();
232
+ }
233
+ throw new Error('No scalar data available');
234
+ }
235
+ get sizeInBytes() {
236
+ return this.getScalarDataLength() * this.bytePerVoxel;
237
+ }
238
+ get bytePerVoxel() {
239
+ if (this.scalarData) {
240
+ return this.scalarData.BYTES_PER_ELEMENT;
241
+ }
242
+ const value = this._get(0);
243
+ return value.BYTES_PER_ELEMENT;
244
+ }
104
245
  clear() {
105
246
  if (this.map) {
106
247
  this.map.clear();
@@ -112,6 +253,16 @@ export default class VoxelManager {
112
253
  this.modifiedSlices.clear();
113
254
  this.points?.clear();
114
255
  }
256
+ getConstructor() {
257
+ if (this.scalarData) {
258
+ return this.scalarData.constructor;
259
+ }
260
+ if (this._getConstructor) {
261
+ return this._getConstructor();
262
+ }
263
+ console.warn('No scalar data available or can be used to get the constructor');
264
+ return Float32Array;
265
+ }
115
266
  getArrayOfSlices() {
116
267
  return Array.from(this.modifiedSlices);
117
268
  }
@@ -130,9 +281,42 @@ export default class VoxelManager {
130
281
  bounds[2][0] = Math.min(point[2], bounds[2][0]);
131
282
  bounds[2][1] = Math.max(point[2], bounds[2][1]);
132
283
  }
133
- static createRGBVolumeVoxelManager(dimensions, scalarData, numComponents) {
284
+ addPoint(point) {
285
+ const index = Array.isArray(point)
286
+ ? point[0] + this.width * point[1] + this.frameSize * point[2]
287
+ : point;
288
+ if (!this.points) {
289
+ this.points = new Set();
290
+ }
291
+ this.points.add(index);
292
+ }
293
+ getPoints() {
294
+ return this.points
295
+ ? [...this.points].map((index) => this.toIJK(index))
296
+ : [];
297
+ }
298
+ setSliceDataValue(sliceData, index, value) {
299
+ if (Array.isArray(value)) {
300
+ for (let i = 0; i < value.length; i++) {
301
+ sliceData[index * value.length + i] = this.toNumber(value[i]);
302
+ }
303
+ }
304
+ else {
305
+ sliceData[index] = this.toNumber(value);
306
+ }
307
+ }
308
+ toNumber(value) {
309
+ if (typeof value === 'number') {
310
+ return value;
311
+ }
312
+ if (Array.isArray(value)) {
313
+ return value[0] || 0;
314
+ }
315
+ return 0;
316
+ }
317
+ static _createRGBScalarVolumeVoxelManager({ dimensions, scalarData, numberOfComponents = 3, }) {
134
318
  const voxels = new VoxelManager(dimensions, (index) => {
135
- index *= numComponents;
319
+ index *= numberOfComponents;
136
320
  return [scalarData[index++], scalarData[index++], scalarData[index++]];
137
321
  }, (index, v) => {
138
322
  index *= 3;
@@ -142,42 +326,261 @@ export default class VoxelManager {
142
326
  scalarData[index++] = v[2];
143
327
  return isChanged;
144
328
  });
145
- voxels.numComps = numComponents;
329
+ voxels.numberOfComponents = numberOfComponents;
146
330
  voxels.scalarData = scalarData;
147
331
  return voxels;
148
332
  }
149
- static createVolumeVoxelManager(dimensions, scalarData, numComponents = 0) {
333
+ static createImageVolumeVoxelManager({ dimensions, imageIds, numberOfComponents = 1, }) {
334
+ const pixelsPerSlice = dimensions[0] * dimensions[1];
335
+ function getPixelInfo(index) {
336
+ const sliceIndex = Math.floor(index / pixelsPerSlice);
337
+ const imageId = imageIds[sliceIndex];
338
+ const image = cache.getImage(imageId);
339
+ if (!image) {
340
+ console.warn(`Image not found for imageId: ${imageId}`);
341
+ return { pixelData: null, pixelIndex: null };
342
+ }
343
+ const pixelData = image.voxelManager.getScalarData();
344
+ const pixelIndex = (index % pixelsPerSlice) * numberOfComponents;
345
+ return { pixelData, pixelIndex };
346
+ }
347
+ function getVoxelValue(index) {
348
+ const { pixelData, pixelIndex } = getPixelInfo(index);
349
+ if (!pixelData || pixelIndex === null) {
350
+ return null;
351
+ }
352
+ if (numberOfComponents === 1) {
353
+ return pixelData[pixelIndex];
354
+ }
355
+ else {
356
+ return [
357
+ pixelData[pixelIndex],
358
+ pixelData[pixelIndex + 1],
359
+ pixelData[pixelIndex + 2],
360
+ ];
361
+ }
362
+ }
363
+ function setVoxelValue(index, v) {
364
+ const { pixelData, pixelIndex } = getPixelInfo(index);
365
+ if (!pixelData || pixelIndex === null) {
366
+ return false;
367
+ }
368
+ let isChanged = false;
369
+ if (numberOfComponents === 1) {
370
+ if (pixelData[pixelIndex] !== v) {
371
+ pixelData[pixelIndex] = v;
372
+ isChanged = true;
373
+ }
374
+ }
375
+ else {
376
+ const rgbValue = v;
377
+ for (let i = 0; i < numberOfComponents; i++) {
378
+ if (pixelData[pixelIndex + i] !== rgbValue[i]) {
379
+ pixelData[pixelIndex + i] = rgbValue[i];
380
+ isChanged = true;
381
+ }
382
+ }
383
+ }
384
+ return isChanged;
385
+ }
386
+ const voxelManager = new VoxelManager(dimensions, (index) => getVoxelValue(index), (index, v) => setVoxelValue(index, v));
387
+ voxelManager.numberOfComponents = numberOfComponents;
388
+ voxelManager._getConstructor = () => {
389
+ const { pixelData } = getPixelInfo(0);
390
+ return pixelData.constructor;
391
+ };
392
+ voxelManager.getMiddleSliceData = () => {
393
+ const middleSliceIndex = Math.floor(dimensions[2] / 2);
394
+ return voxelManager.getSliceData({
395
+ sliceIndex: middleSliceIndex,
396
+ slicePlane: 2,
397
+ });
398
+ };
399
+ voxelManager.getRange = () => {
400
+ let minValue, maxValue;
401
+ for (const imageId of imageIds) {
402
+ const image = cache.getImage(imageId);
403
+ if (image.minPixelValue < minValue) {
404
+ minValue = image.minPixelValue;
405
+ }
406
+ if (image.maxPixelValue > maxValue) {
407
+ maxValue = image.maxPixelValue;
408
+ }
409
+ }
410
+ return [minValue, maxValue];
411
+ };
412
+ voxelManager._getScalarDataLength = () => {
413
+ const { pixelData } = getPixelInfo(0);
414
+ return pixelData.length * dimensions[2];
415
+ };
416
+ voxelManager.getCompleteScalarDataArray = () => {
417
+ const ScalarDataConstructor = voxelManager._getConstructor();
418
+ const dataLength = voxelManager.getScalarDataLength();
419
+ const scalarData = new ScalarDataConstructor(dataLength);
420
+ const sliceSize = dimensions[0] * dimensions[1] * numberOfComponents;
421
+ for (let sliceIndex = 0; sliceIndex < dimensions[2]; sliceIndex++) {
422
+ const { pixelData } = getPixelInfo((sliceIndex * sliceSize) / numberOfComponents);
423
+ if (pixelData) {
424
+ const sliceStart = sliceIndex * sliceSize;
425
+ if (numberOfComponents === 1) {
426
+ scalarData.set(pixelData, sliceStart);
427
+ }
428
+ else {
429
+ for (let i = 0; i < pixelData.length; i += numberOfComponents) {
430
+ for (let j = 0; j < numberOfComponents; j++) {
431
+ scalarData[sliceStart + i + j] = pixelData[i + j];
432
+ }
433
+ }
434
+ }
435
+ }
436
+ }
437
+ return scalarData;
438
+ };
439
+ voxelManager.setCompleteScalarDataArray = (scalarData) => {
440
+ const sliceSize = dimensions[0] * dimensions[1] * numberOfComponents;
441
+ const SliceDataConstructor = voxelManager._getConstructor();
442
+ for (let sliceIndex = 0; sliceIndex < dimensions[2]; sliceIndex++) {
443
+ const { pixelData } = getPixelInfo((sliceIndex * sliceSize) / numberOfComponents);
444
+ if (pixelData && SliceDataConstructor) {
445
+ const sliceStart = sliceIndex * sliceSize;
446
+ const sliceEnd = sliceStart + sliceSize;
447
+ const sliceData = new SliceDataConstructor(sliceSize);
448
+ sliceData.set(scalarData.subarray(sliceStart, sliceEnd));
449
+ pixelData.set(sliceData);
450
+ }
451
+ }
452
+ for (let k = 0; k < dimensions[2]; k++) {
453
+ voxelManager.modifiedSlices.add(k);
454
+ }
455
+ voxelManager.boundsIJK = [
456
+ [0, dimensions[0] - 1],
457
+ [0, dimensions[1] - 1],
458
+ [0, dimensions[2] - 1],
459
+ ];
460
+ };
461
+ return voxelManager;
462
+ }
463
+ static createScalarVolumeVoxelManager({ dimensions, scalarData, numberOfComponents = 1, }) {
150
464
  if (dimensions.length !== 3) {
151
465
  throw new Error('Dimensions must be provided as [number, number, number] for [width, height, depth]');
152
466
  }
153
- if (!numComponents) {
154
- numComponents =
467
+ if (!numberOfComponents) {
468
+ numberOfComponents =
155
469
  scalarData.length / dimensions[0] / dimensions[1] / dimensions[2];
156
- if (numComponents > 4 || numComponents < 1 || numComponents === 2) {
157
- throw new Error(`Number of components ${numComponents} must be 1, 3 or 4`);
470
+ if (numberOfComponents > 4 ||
471
+ numberOfComponents < 1 ||
472
+ numberOfComponents === 2) {
473
+ throw new Error(`Number of components ${numberOfComponents} must be 1, 3 or 4`);
474
+ }
475
+ }
476
+ if (numberOfComponents > 1) {
477
+ return VoxelManager._createRGBScalarVolumeVoxelManager({
478
+ dimensions,
479
+ scalarData,
480
+ numberOfComponents,
481
+ });
482
+ }
483
+ return VoxelManager._createNumberVolumeVoxelManager({
484
+ dimensions,
485
+ scalarData,
486
+ });
487
+ }
488
+ static createScalarDynamicVolumeVoxelManager({ imageIdGroups, dimensions, timePoint = 0, numberOfComponents = 1, }) {
489
+ if (!numberOfComponents) {
490
+ const firstImage = cache.getImage(imageIdGroups[0][0]);
491
+ if (!firstImage) {
492
+ throw new Error('Unable to determine number of components: No image found');
493
+ }
494
+ numberOfComponents =
495
+ firstImage.getPixelData().length / (dimensions[0] * dimensions[1]);
496
+ if (numberOfComponents > 4 ||
497
+ numberOfComponents < 1 ||
498
+ numberOfComponents === 2) {
499
+ throw new Error(`Number of components ${numberOfComponents} must be 1, 3 or 4`);
500
+ }
501
+ }
502
+ const voxelGroups = imageIdGroups.map((imageIds) => {
503
+ return VoxelManager.createImageVolumeVoxelManager({
504
+ dimensions,
505
+ imageIds,
506
+ numberOfComponents,
507
+ });
508
+ });
509
+ const voxelManager = new VoxelManager(dimensions, (index) => voxelGroups[timePoint]._get(index), (index, v) => voxelGroups[timePoint]._set(index, v));
510
+ voxelManager.numberOfComponents = numberOfComponents;
511
+ voxelManager.getScalarDataLength = () => {
512
+ return voxelGroups[timePoint].getScalarDataLength();
513
+ };
514
+ voxelManager.getConstructor = () => {
515
+ return voxelGroups[timePoint].getConstructor();
516
+ };
517
+ voxelManager.getRange = () => {
518
+ return voxelGroups[timePoint].getRange();
519
+ };
520
+ voxelManager.getMiddleSliceData = () => {
521
+ return voxelGroups[timePoint].getMiddleSliceData();
522
+ };
523
+ voxelManager.setTimePoint = (newTimePoint) => {
524
+ timePoint = newTimePoint;
525
+ voxelManager._get = (index) => voxelGroups[timePoint]._get(index);
526
+ voxelManager._set = (index, v) => voxelGroups[timePoint]._set(index, v);
527
+ };
528
+ voxelManager.getAtIndexAndTimePoint = (index, tp) => {
529
+ return voxelGroups[tp]._get(index);
530
+ };
531
+ voxelManager.getTimePointScalarData = (tp) => {
532
+ return voxelGroups[tp].getCompleteScalarDataArray();
533
+ };
534
+ voxelManager.getCurrentTimePointScalarData = () => {
535
+ return voxelGroups[timePoint].getCompleteScalarDataArray();
536
+ };
537
+ return voxelManager;
538
+ }
539
+ static createImageVoxelManager({ width, height, scalarData, numberOfComponents = 1, }) {
540
+ const dimensions = [width, height, 1];
541
+ if (!numberOfComponents) {
542
+ numberOfComponents = scalarData.length / width / height;
543
+ if (numberOfComponents > 4 ||
544
+ numberOfComponents < 1 ||
545
+ numberOfComponents === 2) {
546
+ throw new Error(`Number of components ${numberOfComponents} must be 1, 3 or 4`);
158
547
  }
159
548
  }
160
- if (numComponents > 1) {
161
- return VoxelManager.createRGBVolumeVoxelManager(dimensions, scalarData, numComponents);
549
+ if (numberOfComponents > 1) {
550
+ return VoxelManager._createRGBScalarVolumeVoxelManager({
551
+ dimensions,
552
+ scalarData,
553
+ numberOfComponents,
554
+ });
162
555
  }
163
- return VoxelManager.createNumberVolumeVoxelManager(dimensions, scalarData);
556
+ return VoxelManager._createNumberVolumeVoxelManager({
557
+ dimensions,
558
+ scalarData,
559
+ });
164
560
  }
165
- static createNumberVolumeVoxelManager(dimensions, scalarData) {
561
+ static _createNumberVolumeVoxelManager({ dimensions, scalarData, }) {
166
562
  const voxels = new VoxelManager(dimensions, (index) => scalarData[index], (index, v) => {
167
563
  const isChanged = scalarData[index] !== v;
168
564
  scalarData[index] = v;
169
565
  return isChanged;
170
566
  });
171
567
  voxels.scalarData = scalarData;
568
+ voxels.getMiddleSliceData = () => {
569
+ const middleSliceIndex = Math.floor(dimensions[2] / 2);
570
+ return voxels.getSliceData({
571
+ sliceIndex: middleSliceIndex,
572
+ slicePlane: 2,
573
+ });
574
+ };
172
575
  return voxels;
173
576
  }
174
- static createMapVoxelManager(dimension) {
577
+ static createMapVoxelManager({ dimension, }) {
175
578
  const map = new Map();
176
579
  const voxelManager = new VoxelManager(dimension, map.get.bind(map), (index, v) => map.set(index, v) && true);
177
580
  voxelManager.map = map;
178
581
  return voxelManager;
179
582
  }
180
- static createHistoryVoxelManager(sourceVoxelManager) {
583
+ static createHistoryVoxelManager({ sourceVoxelManager, }) {
181
584
  const map = new Map();
182
585
  const { dimensions } = sourceVoxelManager;
183
586
  const voxelManager = new VoxelManager(dimensions, (index) => map.get(index), function (index, v) {
@@ -198,11 +601,11 @@ export default class VoxelManager {
198
601
  voxelManager.sourceVoxelManager = sourceVoxelManager;
199
602
  return voxelManager;
200
603
  }
201
- static createLazyVoxelManager(dimensions, planeFactory) {
604
+ static createLazyVoxelManager({ dimensions, planeFactory, }) {
202
605
  const map = new Map();
203
- const [width, height, depth] = dimensions;
606
+ const [width, height] = dimensions;
204
607
  const planeSize = width * height;
205
- const voxelManager = new VoxelManager(dimensions, (index) => map.get(Math.floor(index / planeSize))?.[index % planeSize], (index, v) => {
608
+ const voxelManager = new VoxelManager(dimensions, (index) => map.get(Math.floor(index / planeSize))[index % planeSize], (index, v) => {
206
609
  const k = Math.floor(index / planeSize);
207
610
  let layer = map.get(k);
208
611
  if (!layer) {
@@ -214,26 +617,29 @@ export default class VoxelManager {
214
617
  voxelManager.map = map;
215
618
  return voxelManager;
216
619
  }
217
- static createRLEVoxelManager(dimensions) {
620
+ static createRLEVoxelManager({ dimensions, }) {
218
621
  const [width, height, depth] = dimensions;
219
622
  const map = new RLEVoxelMap(width, height, depth);
220
- const voxelManager = new VoxelManager(dimensions, (index) => map.get(index), (index, v) => map.set(index, v));
623
+ const voxelManager = new VoxelManager(dimensions, (index) => map.get(index), (index, v) => {
624
+ map.set(index, v);
625
+ });
221
626
  voxelManager.map = map;
222
627
  voxelManager.getPixelData = map.getPixelData.bind(map);
223
628
  return voxelManager;
224
629
  }
225
630
  static addInstanceToImage(image) {
226
631
  const { width, height } = image;
227
- const scalarData = image.getPixelData();
228
- if (scalarData?.length >= width * height) {
229
- image.voxelManager = VoxelManager.createVolumeVoxelManager([width, height, 1], scalarData);
632
+ const scalarData = image.voxelManager.getScalarData();
633
+ if (scalarData.length >= width * height) {
634
+ image.voxelManager = VoxelManager.createScalarVolumeVoxelManager({
635
+ dimensions: [width, height, 1],
636
+ scalarData,
637
+ });
230
638
  return;
231
639
  }
232
- image.voxelManager = VoxelManager.createRLEVoxelManager([
233
- width,
234
- height,
235
- 1,
236
- ]);
640
+ image.voxelManager = VoxelManager.createRLEVoxelManager({
641
+ dimensions: [width, height, 1],
642
+ });
237
643
  image.getPixelData = image.voxelManager.getPixelData;
238
644
  image.sizeInBytes = DEFAULT_RLE_SIZE;
239
645
  }
@@ -1,4 +1,4 @@
1
- import { Types } from '..';
1
+ import type { Types } from '..';
2
2
  type actorTypes = 'vtkActor' | 'vtkVolume' | 'vtkImageSlice';
3
3
  export declare function isImageActor(actorEntry: Types.ActorEntry): boolean;
4
4
  export declare function actorIsA(actorEntry: Types.ActorEntry | Types.Actor, actorType: actorTypes): boolean;
@@ -1,3 +1,3 @@
1
- import { ViewportPreset } from '../types';
2
- import { VolumeActor } from '../types/IActor';
1
+ import type { ViewportPreset } from '../types';
2
+ import type { VolumeActor } from '../types/IActor';
3
3
  export default function applyPreset(actor: VolumeActor, preset: ViewportPreset): void;
@@ -1,3 +1,3 @@
1
- import { IStackViewport, IVolumeViewport } from '../types';
1
+ import type { IStackViewport, IVolumeViewport } from '../types';
2
2
  declare function calculateViewportsSpatialRegistration(viewport1: IStackViewport | IVolumeViewport, viewport2: IStackViewport | IVolumeViewport): void;
3
3
  export default calculateViewportsSpatialRegistration;