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

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 (341) hide show
  1. package/dist/esm/RenderingEngine/BaseVolumeViewport.d.ts +23 -13
  2. package/dist/esm/RenderingEngine/BaseVolumeViewport.js +52 -50
  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 +8 -10
  7. package/dist/esm/RenderingEngine/RenderingEngine.js +20 -18
  8. package/dist/esm/RenderingEngine/StackViewport.d.ts +28 -19
  9. package/dist/esm/RenderingEngine/StackViewport.js +81 -58
  10. package/dist/esm/RenderingEngine/VideoViewport.d.ts +19 -28
  11. package/dist/esm/RenderingEngine/VideoViewport.js +61 -24
  12. package/dist/esm/RenderingEngine/Viewport.d.ts +25 -14
  13. package/dist/esm/RenderingEngine/Viewport.js +24 -15
  14. package/dist/esm/RenderingEngine/VolumeViewport.d.ts +21 -9
  15. package/dist/esm/RenderingEngine/VolumeViewport.js +95 -10
  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 +3 -3
  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 +4 -7
  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 +13 -37
  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/helpers/volumeNewImageEventDispatcher.js +4 -4
  84. package/dist/esm/RenderingEngine/renderingEngineCache.d.ts +1 -1
  85. package/dist/esm/RenderingEngine/vtkClasses/vtkSlabCamera.d.ts +4 -2
  86. package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLTexture.js +87 -78
  87. package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLViewNodeFactory.js +1 -1
  88. package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLVolumeMapper.js +83 -42
  89. package/dist/esm/Settings.d.ts +1 -1
  90. package/dist/esm/cache/cache.d.ts +15 -19
  91. package/dist/esm/cache/cache.js +112 -57
  92. package/dist/esm/cache/classes/Contour.d.ts +4 -4
  93. package/dist/esm/cache/classes/ContourSet.d.ts +3 -3
  94. package/dist/esm/cache/classes/ImageVolume.d.ts +19 -19
  95. package/dist/esm/cache/classes/ImageVolume.js +49 -254
  96. package/dist/esm/cache/classes/Surface.d.ts +3 -3
  97. package/dist/esm/cache/index.d.ts +1 -2
  98. package/dist/esm/cache/index.js +1 -2
  99. package/dist/esm/constants/cpuColormaps.d.ts +1 -1
  100. package/dist/esm/constants/viewportPresets.d.ts +1 -1
  101. package/dist/esm/enums/GenerateImageType.d.ts +5 -0
  102. package/dist/esm/enums/GenerateImageType.js +6 -0
  103. package/dist/esm/enums/MetadataModules.d.ts +2 -1
  104. package/dist/esm/enums/MetadataModules.js +1 -0
  105. package/dist/esm/enums/ViewportType.d.ts +2 -1
  106. package/dist/esm/enums/ViewportType.js +1 -0
  107. package/dist/esm/enums/index.d.ts +2 -2
  108. package/dist/esm/enums/index.js +2 -2
  109. package/dist/esm/eventTarget.js +2 -3
  110. package/dist/esm/getEnabledElement.d.ts +1 -1
  111. package/dist/esm/global.d.ts +0 -1
  112. package/dist/esm/index.d.ts +9 -5
  113. package/dist/esm/index.js +8 -4
  114. package/dist/esm/init.d.ts +5 -8
  115. package/dist/esm/init.js +22 -83
  116. package/dist/esm/loaders/ProgressiveRetrieveImages.d.ts +5 -5
  117. package/dist/esm/loaders/ProgressiveRetrieveImages.js +7 -3
  118. package/dist/esm/loaders/configuration/interleavedRetrieve.d.ts +1 -1
  119. package/dist/esm/loaders/fillNearbyFrames.d.ts +2 -2
  120. package/dist/esm/loaders/geometryLoader.d.ts +3 -3
  121. package/dist/esm/loaders/geometryLoader.js +1 -1
  122. package/dist/esm/loaders/imageLoader.d.ts +12 -17
  123. package/dist/esm/loaders/imageLoader.js +179 -96
  124. package/dist/esm/loaders/utils/contourSet/createContourSet.d.ts +1 -1
  125. package/dist/esm/loaders/utils/contourSet/validateContourSet.d.ts +1 -1
  126. package/dist/esm/loaders/utils/surface/createSurface.d.ts +1 -1
  127. package/dist/esm/loaders/utils/surface/validateSurface.d.ts +1 -1
  128. package/dist/esm/loaders/volumeLoader.d.ts +15 -22
  129. package/dist/esm/loaders/volumeLoader.js +88 -207
  130. package/dist/esm/metaData.d.ts +2 -4
  131. package/dist/esm/requestPool/requestPoolManager.d.ts +7 -9
  132. package/dist/esm/requestPool/requestPoolManager.js +1 -1
  133. package/dist/esm/types/AABB2.d.ts +2 -2
  134. package/dist/esm/types/AABB3.d.ts +2 -2
  135. package/dist/esm/types/ActorSliceRange.d.ts +5 -5
  136. package/dist/esm/types/BoundsIJK.d.ts +1 -1
  137. package/dist/esm/types/BoundsLPS.d.ts +1 -1
  138. package/dist/esm/types/CPUFallbackColormap.d.ts +3 -3
  139. package/dist/esm/types/CPUFallbackColormapData.d.ts +4 -4
  140. package/dist/esm/types/CPUFallbackColormapsData.d.ts +3 -5
  141. package/dist/esm/types/CPUFallbackEnabledElement.d.ts +2 -37
  142. package/dist/esm/types/CPUFallbackLUT.d.ts +4 -3
  143. package/dist/esm/types/CPUFallbackLookupTable.d.ts +2 -2
  144. package/dist/esm/types/CPUFallbackRenderingTools.d.ts +5 -5
  145. package/dist/esm/types/CPUFallbackTransform.d.ts +3 -3
  146. package/dist/esm/types/CPUFallbackViewport.d.ts +6 -6
  147. package/dist/esm/types/CPUFallbackViewportDisplayedArea.d.ts +3 -3
  148. package/dist/esm/types/CPUIImageData.d.ts +17 -9
  149. package/dist/esm/types/Color.d.ts +1 -1
  150. package/dist/esm/types/Colormap.d.ts +7 -7
  151. package/dist/esm/types/ContourData.d.ts +6 -6
  152. package/dist/esm/types/Cornerstone3DConfig.d.ts +7 -7
  153. package/dist/esm/types/CustomEventType.d.ts +2 -2
  154. package/dist/esm/types/EventTypes.d.ts +55 -55
  155. package/dist/esm/types/FlipDirection.d.ts +3 -3
  156. package/dist/esm/types/IActor.d.ts +3 -3
  157. package/dist/esm/types/ICache.d.ts +4 -4
  158. package/dist/esm/types/ICachedGeometry.d.ts +3 -3
  159. package/dist/esm/types/ICachedImage.d.ts +3 -2
  160. package/dist/esm/types/ICachedVolume.d.ts +3 -2
  161. package/dist/esm/types/ICamera.d.ts +3 -3
  162. package/dist/esm/types/IContour.d.ts +4 -3
  163. package/dist/esm/types/IContourSet.d.ts +5 -2
  164. package/dist/esm/types/IDynamicImageVolume.d.ts +3 -3
  165. package/dist/esm/types/IEnabledElement.d.ts +2 -2
  166. package/dist/esm/types/IGeometry.d.ts +4 -4
  167. package/dist/esm/types/IImage.d.ts +48 -11
  168. package/dist/esm/types/IImageCalibration.d.ts +2 -2
  169. package/dist/esm/types/IImageData.d.ts +11 -4
  170. package/dist/esm/types/IImageFrame.d.ts +42 -0
  171. package/dist/esm/types/IImageFrame.js +1 -0
  172. package/dist/esm/types/IImageVolume.d.ts +17 -14
  173. package/dist/esm/types/ILoadObject.d.ts +3 -3
  174. package/dist/esm/types/IPointsManager.d.ts +23 -0
  175. package/dist/esm/types/IPointsManager.js +1 -0
  176. package/dist/esm/types/IRLEVoxelMap.d.ts +16 -0
  177. package/dist/esm/types/IRLEVoxelMap.js +1 -0
  178. package/dist/esm/types/IRegisterImageLoader.d.ts +2 -2
  179. package/dist/esm/types/IRenderingEngine.d.ts +11 -12
  180. package/dist/esm/types/IRetrieveConfiguration.d.ts +6 -6
  181. package/dist/esm/types/IStackInput.d.ts +1 -1
  182. package/dist/esm/types/IStackViewport.d.ts +69 -2
  183. package/dist/esm/types/IStreamingImageVolume.d.ts +3 -4
  184. package/dist/esm/types/IStreamingVolumeProperties.d.ts +5 -5
  185. package/dist/esm/types/ISurface.d.ts +1 -1
  186. package/dist/esm/types/ITransferFunctionNode.d.ts +9 -0
  187. package/dist/esm/types/ITransferFunctionNode.js +1 -0
  188. package/dist/esm/types/IVideoViewport.d.ts +40 -2
  189. package/dist/esm/types/IViewport.d.ts +62 -41
  190. package/dist/esm/types/IVolume.d.ts +2 -2
  191. package/dist/esm/types/IVolumeInput.d.ts +2 -2
  192. package/dist/esm/types/IVolumeViewport.d.ts +17 -16
  193. package/dist/esm/types/IVoxelManager.d.ts +54 -0
  194. package/dist/esm/types/IVoxelManager.js +1 -0
  195. package/dist/esm/types/IWSIViewport.d.ts +16 -0
  196. package/dist/esm/types/IWSIViewport.js +1 -0
  197. package/dist/esm/types/ImageLoadListener.d.ts +2 -2
  198. package/dist/esm/types/ImageLoaderFn.d.ts +3 -3
  199. package/dist/esm/types/ImagePixelModule.d.ts +1 -1
  200. package/dist/esm/types/ImagePlaneModule.d.ts +2 -2
  201. package/dist/esm/types/ImageSliceData.d.ts +3 -3
  202. package/dist/esm/types/ImageVolumeProps.d.ts +4 -4
  203. package/dist/esm/types/Mat3.d.ts +1 -1
  204. package/dist/esm/types/Metadata.d.ts +6 -6
  205. package/dist/esm/types/MetadataModuleTypes.d.ts +65 -0
  206. package/dist/esm/types/MetadataModuleTypes.js +1 -0
  207. package/dist/esm/types/OrientationVectors.d.ts +4 -4
  208. package/dist/esm/types/Plane.d.ts +1 -1
  209. package/dist/esm/types/Point2.d.ts +1 -1
  210. package/dist/esm/types/Point3.d.ts +3 -3
  211. package/dist/esm/types/Point4.d.ts +1 -1
  212. package/dist/esm/types/RGB.d.ts +1 -1
  213. package/dist/esm/types/ScalingParameters.d.ts +7 -7
  214. package/dist/esm/types/StackViewportProperties.d.ts +3 -3
  215. package/dist/esm/types/SurfaceData.d.ts +5 -5
  216. package/dist/esm/types/TransformMatrix2D.d.ts +1 -1
  217. package/dist/esm/types/VideoViewportProperties.d.ts +3 -3
  218. package/dist/esm/types/VideoViewportTypes.d.ts +7 -7
  219. package/dist/esm/types/ViewportInputOptions.d.ts +7 -7
  220. package/dist/esm/types/ViewportPreset.d.ts +1 -1
  221. package/dist/esm/types/ViewportProperties.d.ts +5 -5
  222. package/dist/esm/types/VolumeLoaderFn.d.ts +4 -3
  223. package/dist/esm/types/VolumeProps.d.ts +10 -5
  224. package/dist/esm/types/VolumeViewportProperties.d.ts +3 -3
  225. package/dist/esm/types/WSIViewportProperties.d.ts +3 -0
  226. package/dist/esm/types/WSIViewportProperties.js +1 -0
  227. package/dist/esm/types/WSIViewportTypes.d.ts +13 -0
  228. package/dist/esm/types/WSIViewportTypes.js +1 -0
  229. package/dist/esm/types/displayArea.d.ts +4 -4
  230. package/dist/esm/types/index.d.ts +16 -8
  231. package/dist/esm/types/voi.d.ts +4 -4
  232. package/dist/esm/utilities/PointsManager.d.ts +8 -10
  233. package/dist/esm/utilities/ProgressiveIterator.d.ts +1 -1
  234. package/dist/esm/utilities/ProgressiveIterator.js +3 -1
  235. package/dist/esm/utilities/RLEVoxelMap.d.ts +3 -8
  236. package/dist/esm/utilities/RLEVoxelMap.js +19 -19
  237. package/dist/esm/utilities/VoxelManager.d.ts +82 -20
  238. package/dist/esm/utilities/VoxelManager.js +466 -60
  239. package/dist/esm/utilities/actorCheck.d.ts +1 -1
  240. package/dist/esm/utilities/applyPreset.d.ts +2 -2
  241. package/dist/esm/utilities/calculateViewportsSpatialRegistration.d.ts +1 -1
  242. package/dist/esm/utilities/calculateViewportsSpatialRegistration.js +5 -5
  243. package/dist/esm/utilities/calibratedPixelSpacingMetadataProvider.d.ts +1 -1
  244. package/dist/esm/utilities/colormap.d.ts +1 -1
  245. package/dist/esm/utilities/convertStackToVolumeViewport.d.ts +2 -2
  246. package/dist/esm/utilities/convertStackToVolumeViewport.js +4 -4
  247. package/dist/esm/utilities/convertVolumeToStackViewport.d.ts +1 -1
  248. package/dist/esm/utilities/convertVolumeToStackViewport.js +3 -2
  249. package/dist/esm/utilities/createLinearRGBTransferFunction.d.ts +1 -1
  250. package/dist/esm/utilities/createLinearRGBTransferFunction.js +1 -3
  251. package/dist/esm/utilities/createSigmoidRGBTransferFunction.d.ts +2 -3
  252. package/dist/esm/utilities/createSigmoidRGBTransferFunction.js +8 -7
  253. package/dist/esm/utilities/decimate.d.ts +1 -1
  254. package/dist/esm/utilities/eventListener/TargetEventListeners.js +5 -3
  255. package/dist/esm/utilities/generateVolumePropsFromImageIds.d.ts +1 -1
  256. package/dist/esm/utilities/generateVolumePropsFromImageIds.js +33 -80
  257. package/dist/esm/utilities/genericMetadataProvider.d.ts +9 -2
  258. package/dist/esm/utilities/genericMetadataProvider.js +7 -1
  259. package/dist/esm/utilities/getBufferConfiguration.d.ts +2 -3
  260. package/dist/esm/utilities/getBufferConfiguration.js +5 -15
  261. package/dist/esm/utilities/getClosestImageId.js +1 -1
  262. package/dist/esm/utilities/getClosestStackImageIndexForPoint.d.ts +1 -1
  263. package/dist/esm/utilities/getClosestStackImageIndexForPoint.js +2 -2
  264. package/dist/esm/utilities/getCurrentVolumeViewportSlice.d.ts +4 -5
  265. package/dist/esm/utilities/getCurrentVolumeViewportSlice.js +8 -58
  266. package/dist/esm/utilities/getImageLegacy.d.ts +1 -1
  267. package/dist/esm/utilities/getImageLegacy.js +1 -1
  268. package/dist/esm/utilities/getImageSliceDataForVolumeViewport.d.ts +1 -1
  269. package/dist/esm/utilities/getMinMax.d.ts +2 -1
  270. package/dist/esm/utilities/getScalingParameters.d.ts +1 -1
  271. package/dist/esm/utilities/getScalingParameters.js +4 -4
  272. package/dist/esm/utilities/getSpacingInNormalDirection.d.ts +2 -2
  273. package/dist/esm/utilities/getTargetVolumeAndSpacingInNormalDir.d.ts +1 -1
  274. package/dist/esm/utilities/getTargetVolumeAndSpacingInNormalDir.js +2 -2
  275. package/dist/esm/utilities/getViewportImageCornersInWorld.d.ts +1 -1
  276. package/dist/esm/utilities/getViewportImageIds.d.ts +1 -1
  277. package/dist/esm/utilities/getViewportImageIds.js +1 -1
  278. package/dist/esm/utilities/getViewportModality.d.ts +7 -3
  279. package/dist/esm/utilities/getViewportModality.js +9 -6
  280. package/dist/esm/utilities/getViewportsWithImageURI.d.ts +2 -2
  281. package/dist/esm/utilities/getViewportsWithVolumeId.d.ts +2 -2
  282. package/dist/esm/utilities/getViewportsWithVolumeId.js +3 -7
  283. package/dist/esm/utilities/getVoiFromSigmoidRGBTransferFunction.d.ts +1 -1
  284. package/dist/esm/utilities/getVolumeActorCorners.d.ts +2 -2
  285. package/dist/esm/utilities/getVolumeId.js +2 -2
  286. package/dist/esm/utilities/getVolumeSliceRangeInfo.d.ts +1 -1
  287. package/dist/esm/utilities/getVolumeViewportScrollInfo.d.ts +1 -1
  288. package/dist/esm/utilities/getVolumeViewportsContainingSameVolumes.d.ts +2 -2
  289. package/dist/esm/utilities/hasFloatScalingParameters.d.ts +1 -1
  290. package/dist/esm/utilities/imageRetrieveMetadataProvider.d.ts +1 -1
  291. package/dist/esm/utilities/imageToWorldCoords.d.ts +1 -1
  292. package/dist/esm/utilities/imageToWorldCoords.js +2 -2
  293. package/dist/esm/utilities/index.d.ts +3 -8
  294. package/dist/esm/utilities/index.js +4 -8
  295. package/dist/esm/utilities/indexWithinDimensions.d.ts +1 -1
  296. package/dist/esm/utilities/invertRgbTransferFunction.d.ts +2 -1
  297. package/dist/esm/utilities/isEqual.js +6 -1
  298. package/dist/esm/utilities/isPTPrescaledWithSUV.d.ts +1 -1
  299. package/dist/esm/utilities/isPTPrescaledWithSUV.js +1 -1
  300. package/dist/esm/utilities/isValidVolume.js +1 -1
  301. package/dist/esm/utilities/loadImageToCanvas.d.ts +6 -6
  302. package/dist/esm/utilities/loadImageToCanvas.js +1 -1
  303. package/dist/esm/utilities/makeVolumeMetadata.d.ts +2 -2
  304. package/dist/esm/utilities/makeVolumeMetadata.js +5 -5
  305. package/dist/esm/utilities/planar.d.ts +2 -2
  306. package/dist/esm/utilities/renderToCanvasCPU.d.ts +1 -1
  307. package/dist/esm/utilities/renderToCanvasGPU.d.ts +2 -2
  308. package/dist/esm/utilities/renderToCanvasGPU.js +1 -1
  309. package/dist/esm/utilities/scaleRgbTransferFunction.d.ts +2 -1
  310. package/dist/esm/utilities/snapFocalPointToSlice.d.ts +1 -1
  311. package/dist/esm/utilities/sortImageIdsAndGetSpacing.d.ts +5 -5
  312. package/dist/esm/utilities/sortImageIdsAndGetSpacing.js +2 -1
  313. package/dist/esm/utilities/transformCanvasToIJK.d.ts +2 -2
  314. package/dist/esm/utilities/transformIJKToCanvas.d.ts +1 -1
  315. package/dist/esm/utilities/triggerEvent.js +1 -1
  316. package/dist/esm/utilities/updateVTKImageDataWithCornerstoneImage.d.ts +2 -2
  317. package/dist/esm/utilities/updateVTKImageDataWithCornerstoneImage.js +1 -1
  318. package/dist/esm/utilities/uuidv4.js +3 -1
  319. package/dist/esm/utilities/worldToImageCoords.d.ts +1 -1
  320. package/dist/esm/utilities/worldToImageCoords.js +2 -2
  321. package/dist/umd/index.js +1 -1
  322. package/dist/umd/index.js.map +1 -1
  323. package/package.json +6 -6
  324. package/dist/esm/cache/utils/restoreImagesFromBuffer.d.ts +0 -2
  325. package/dist/esm/cache/utils/restoreImagesFromBuffer.js +0 -28
  326. package/dist/esm/enums/SharedArrayBufferModes.d.ts +0 -6
  327. package/dist/esm/enums/SharedArrayBufferModes.js +0 -7
  328. package/dist/esm/utilities/cacheUtils.d.ts +0 -2
  329. package/dist/esm/utilities/cacheUtils.js +0 -86
  330. package/dist/esm/utilities/createFloat32SharedArray.d.ts +0 -2
  331. package/dist/esm/utilities/createFloat32SharedArray.js +0 -27
  332. package/dist/esm/utilities/createInt16SharedArray.d.ts +0 -2
  333. package/dist/esm/utilities/createInt16SharedArray.js +0 -11
  334. package/dist/esm/utilities/createUInt16SharedArray.d.ts +0 -2
  335. package/dist/esm/utilities/createUInt16SharedArray.js +0 -11
  336. package/dist/esm/utilities/createUint8SharedArray.d.ts +0 -2
  337. package/dist/esm/utilities/createUint8SharedArray.js +0 -12
  338. package/dist/esm/utilities/getScalarDataType.d.ts +0 -2
  339. package/dist/esm/utilities/getScalarDataType.js +0 -19
  340. package/dist/esm/utilities/isTypedArray.d.ts +0 -1
  341. package/dist/esm/utilities/isTypedArray.js +0 -11
@@ -1,19 +1,20 @@
1
1
  import { loadAndCacheImage } from '../../loaders/imageLoader';
2
2
  import * as metaData from '../../metaData';
3
- import { getMinMax, windowLevel } from '../../utilities';
3
+ import getMinMax from '../../utilities/getMinMax';
4
+ import * as windowLevel from '../../utilities/windowLevel';
4
5
  import { RequestType } from '../../enums';
5
- import cache from '../../cache';
6
+ import cache from '../../cache/cache';
6
7
  const PRIORITY = 0;
7
8
  const REQUEST_TYPE = RequestType.Prefetch;
8
- async function setDefaultVolumeVOI(volumeActor, imageVolume, useNativeDataType) {
9
+ async function setDefaultVolumeVOI(volumeActor, imageVolume) {
9
10
  let voi = getVOIFromMetadata(imageVolume);
10
- if (!voi && imageVolume?.imageIds?.length) {
11
- voi = await getVOIFromMinMax(imageVolume, useNativeDataType);
11
+ if (!voi && imageVolume.imageIds.length) {
12
+ voi = await getVOIFromMiddleSliceMinMax(imageVolume);
12
13
  voi = handlePreScaledVolume(imageVolume, voi);
13
14
  }
14
- if ((voi?.lower === 0 && voi?.upper === 0) ||
15
- voi?.lower === undefined ||
16
- voi?.upper === undefined) {
15
+ if ((voi.lower === 0 && voi.upper === 0) ||
16
+ voi.lower === undefined ||
17
+ voi.upper === undefined) {
17
18
  return;
18
19
  }
19
20
  volumeActor
@@ -41,7 +42,7 @@ function getVOIFromMetadata(imageVolume) {
41
42
  const imageIdIndex = Math.floor(imageIds.length / 2);
42
43
  const imageId = imageIds[imageIdIndex];
43
44
  const voiLutModule = metaData.get('voiLutModule', imageId);
44
- if (voiLutModule && voiLutModule.windowWidth && voiLutModule.windowCenter) {
45
+ if (voiLutModule?.windowWidth && voiLutModule.windowCenter) {
45
46
  const { windowWidth, windowCenter } = voiLutModule;
46
47
  voi = {
47
48
  windowWidth: Array.isArray(windowWidth) ? windowWidth[0] : windowWidth,
@@ -52,7 +53,7 @@ function getVOIFromMetadata(imageVolume) {
52
53
  }
53
54
  }
54
55
  else {
55
- voi = metadata?.voiLut?.[0];
56
+ voi = metadata.voiLut[0];
56
57
  }
57
58
  if (voi) {
58
59
  const { lower, upper } = windowLevel.toLowHighRange(Number(voi.windowWidth), Number(voi.windowCenter));
@@ -62,18 +63,13 @@ function getVOIFromMetadata(imageVolume) {
62
63
  };
63
64
  }
64
65
  }
65
- async function getVOIFromMinMax(imageVolume, useNativeDataType) {
66
+ async function getVOIFromMiddleSliceMinMax(imageVolume) {
66
67
  const { imageIds } = imageVolume;
67
- const scalarData = imageVolume.getScalarData();
68
68
  const imageIdIndex = Math.floor(imageIds.length / 2);
69
69
  const imageId = imageVolume.imageIds[imageIdIndex];
70
70
  const generalSeriesModule = metaData.get('generalSeriesModule', imageId) || {};
71
71
  const { modality } = generalSeriesModule;
72
72
  const modalityLutModule = metaData.get('modalityLutModule', imageId) || {};
73
- const numImages = imageIds.length;
74
- const bytesPerImage = scalarData.byteLength / numImages;
75
- const voxelsPerImage = scalarData.length / numImages;
76
- const bytePerPixel = scalarData.BYTES_PER_ELEMENT;
77
73
  const scalingParameters = {
78
74
  rescaleSlope: modalityLutModule.rescaleSlope,
79
75
  rescaleIntercept: modalityLutModule.rescaleIntercept,
@@ -89,16 +85,10 @@ async function getVOIFromMinMax(imageVolume, useNativeDataType) {
89
85
  };
90
86
  }
91
87
  }
92
- const byteOffset = imageIdIndex * bytesPerImage;
93
88
  const options = {
94
- targetBuffer: {
95
- type: useNativeDataType ? undefined : 'Float32Array',
96
- },
97
89
  priority: PRIORITY,
98
90
  requestType: REQUEST_TYPE,
99
- useNativeDataType,
100
91
  preScale: {
101
- enabled: true,
102
92
  scalingParameters: scalingParametersToUse,
103
93
  },
104
94
  };
@@ -106,27 +96,13 @@ async function getVOIFromMinMax(imageVolume, useNativeDataType) {
106
96
  if (!imageVolume.referencedImageIds?.length) {
107
97
  image = await loadAndCacheImage(imageId, { ...options, ignoreCache: true });
108
98
  }
109
- const imageScalarData = image
110
- ? image.getPixelData()
111
- : _getImageScalarDataFromImageVolume(imageVolume, byteOffset, bytePerPixel, voxelsPerImage);
99
+ const imageScalarData = image.getPixelData();
112
100
  const { min, max } = getMinMax(imageScalarData);
113
101
  return {
114
102
  lower: min,
115
103
  upper: max,
116
104
  };
117
105
  }
118
- function _getImageScalarDataFromImageVolume(imageVolume, byteOffset, bytePerPixel, voxelsPerImage) {
119
- const { scalarData } = imageVolume;
120
- const { buffer } = scalarData;
121
- if (scalarData.BYTES_PER_ELEMENT !== bytePerPixel) {
122
- byteOffset *= scalarData.BYTES_PER_ELEMENT / bytePerPixel;
123
- }
124
- const TypedArray = scalarData.constructor;
125
- const imageScalarData = new TypedArray(voxelsPerImage);
126
- const volumeBufferView = new TypedArray(buffer, byteOffset, voxelsPerImage);
127
- imageScalarData.set(volumeBufferView);
128
- return imageScalarData;
129
- }
130
106
  function _isCurrentImagePTPrescaled(modality, imageVolume) {
131
107
  if (modality !== 'PT' || !imageVolume.isPreScaled) {
132
108
  return false;
@@ -1,3 +1,3 @@
1
1
  import type { IVolumeInput, IRenderingEngine } from '../../types';
2
- declare function setVolumesForViewports(renderingEngine: IRenderingEngine, volumeInputs: Array<IVolumeInput>, viewportIds: Array<string>, immediateRender?: boolean, suppressEvents?: boolean): Promise<void>;
2
+ declare function setVolumesForViewports(renderingEngine: IRenderingEngine, volumeInputs: IVolumeInput[], viewportIds: string[], immediateRender?: boolean, suppressEvents?: boolean): Promise<void>;
3
3
  export default setVolumesForViewports;
@@ -2,11 +2,13 @@ import StackViewport from '../StackViewport';
2
2
  import VolumeViewport from '../VolumeViewport';
3
3
  import VolumeViewport3D from '../VolumeViewport3D';
4
4
  import VideoViewport from '../VideoViewport';
5
+ import WSIViewport from '../WSIViewport';
5
6
  declare const viewportTypeToViewportClass: {
6
7
  orthographic: typeof VolumeViewport;
7
8
  perspective: typeof VolumeViewport;
8
9
  stack: typeof StackViewport;
9
10
  volume3d: typeof VolumeViewport3D;
10
11
  video: typeof VideoViewport;
12
+ wholeSlide: typeof WSIViewport;
11
13
  };
12
14
  export default viewportTypeToViewportClass;
@@ -3,11 +3,13 @@ import VolumeViewport from '../VolumeViewport';
3
3
  import ViewportType from '../../enums/ViewportType';
4
4
  import VolumeViewport3D from '../VolumeViewport3D';
5
5
  import VideoViewport from '../VideoViewport';
6
+ import WSIViewport from '../WSIViewport';
6
7
  const viewportTypeToViewportClass = {
7
8
  [ViewportType.ORTHOGRAPHIC]: VolumeViewport,
8
9
  [ViewportType.PERSPECTIVE]: VolumeViewport,
9
10
  [ViewportType.STACK]: StackViewport,
10
11
  [ViewportType.VOLUME_3D]: VolumeViewport3D,
11
12
  [ViewportType.VIDEO]: VideoViewport,
13
+ [ViewportType.WholeSlide]: WSIViewport,
12
14
  };
13
15
  export default viewportTypeToViewportClass;
@@ -1,4 +1,4 @@
1
- import { EventTypes } from '../../types';
1
+ import type { EventTypes } from '../../types';
2
2
  export declare function resetVolumeNewImageState(viewportId: string): void;
3
3
  declare function volumeNewImageEventDispatcher(cameraEvent: EventTypes.CameraModifiedEvent): void;
4
4
  export default volumeNewImageEventDispatcher;
@@ -1,7 +1,7 @@
1
- import { getImageSliceDataForVolumeViewport, triggerEvent, } from '../../utilities';
1
+ import getImageSliceDataForVolumeViewport from '../../utilities/getImageSliceDataForVolumeViewport';
2
+ import triggerEvent from '../../utilities/triggerEvent';
2
3
  import { Events } from '../../enums';
3
4
  import { getRenderingEngine } from '../getRenderingEngine';
4
- import BaseVolumeViewport from '../BaseVolumeViewport';
5
5
  const state = {};
6
6
  export function resetVolumeNewImageState(viewportId) {
7
7
  if (state[viewportId] !== undefined) {
@@ -12,8 +12,8 @@ function volumeNewImageEventDispatcher(cameraEvent) {
12
12
  const { renderingEngineId, viewportId } = cameraEvent.detail;
13
13
  const renderingEngine = getRenderingEngine(renderingEngineId);
14
14
  const viewport = renderingEngine.getViewport(viewportId);
15
- if (!(viewport instanceof BaseVolumeViewport)) {
16
- throw new Error(`volumeNewImageEventDispatcher: viewport is not a BaseVolumeViewport`);
15
+ if (!('setVolumes' in viewport)) {
16
+ throw new Error(`volumeNewImageEventDispatcher: viewport does not have setVolumes method`);
17
17
  }
18
18
  if (state[viewport.id] === undefined) {
19
19
  state[viewport.id] = 0;
@@ -3,6 +3,6 @@ declare const renderingEngineCache: {
3
3
  get: (id: string) => IRenderingEngine;
4
4
  set: (re: IRenderingEngine) => void;
5
5
  delete: (id: string) => boolean;
6
- getAll: () => Array<IRenderingEngine>;
6
+ getAll: () => IRenderingEngine[];
7
7
  };
8
8
  export default renderingEngineCache;
@@ -1,5 +1,6 @@
1
1
  import { mat4 } from 'gl-matrix';
2
2
  import type { vtkObject } from '@kitware/vtk.js/interfaces';
3
+ import type { Range } from '@kitware/vtk.js/types';
3
4
  interface ICameraInitialValues {
4
5
  position?: number[];
5
6
  focalPoint?: number[];
@@ -25,7 +26,7 @@ interface ICameraInitialValues {
25
26
  export interface vtkSlabCamera extends vtkObject {
26
27
  applyTransform(transformMat4: mat4): void;
27
28
  azimuth(angle: number): void;
28
- computeClippingRange(bounds: number[]): number[];
29
+ computeClippingRange(bounds: number[]): Range;
29
30
  computeDistance(): void;
30
31
  computeViewParametersFromPhysicalMatrix(mat: mat4): void;
31
32
  computeViewParametersFromViewMatrix(vmat: mat4): void;
@@ -80,7 +81,7 @@ export interface vtkSlabCamera extends vtkObject {
80
81
  getWorldToPhysicalMatrix(result: mat4): void;
81
82
  getIsPerformingCoordinateTransformation(status: boolean): void;
82
83
  orthogonalizeViewUp(): void;
83
- physicalOrientationToWorldDirection(ori: number[]): any;
84
+ physicalOrientationToWorldDirection(ori: number[]): number[];
84
85
  pitch(angle: number): void;
85
86
  roll(angle: number): void;
86
87
  setClippingRange(near: number, far: number): boolean;
@@ -129,6 +130,7 @@ export interface vtkSlabCamera extends vtkObject {
129
130
  yaw(angle: number): void;
130
131
  zoom(factor: number): void;
131
132
  setIsPerformingCoordinateTransformation(status: boolean): void;
133
+ computeCameraLightTransform(): void;
132
134
  }
133
135
  declare function extend(publicAPI: any, model: any, initialValues?: ICameraInitialValues): void;
134
136
  declare const newInstance: (initialValues?: ICameraInitialValues) => vtkSlabCamera;
@@ -1,108 +1,117 @@
1
1
  import macro from '@kitware/vtk.js/macros';
2
2
  import vtkOpenGLTexture from '@kitware/vtk.js/Rendering/OpenGL/Texture';
3
- import HalfFloat from '@kitware/vtk.js/Common/Core/HalfFloat';
4
- import { getConfiguration } from '../../init';
3
+ import cache from '../../cache/cache';
5
4
  function vtkStreamingOpenGLTexture(publicAPI, model) {
6
5
  model.classHierarchy.push('vtkStreamingOpenGLTexture');
6
+ model.updatedFrames = [];
7
+ model.volumeId = null;
7
8
  const superCreate3DFilterableFromRaw = publicAPI.create3DFilterableFromRaw;
8
- publicAPI.create3DFilterableFromRaw = (width, height, depth, numComps, dataType, data, preferSizeOverAccuracy) => {
9
+ publicAPI.create3DFilterableFromRaw = (width, height, depth, numberOfComponents, dataType, data, preferSizeOverAccuracy) => {
9
10
  model.inputDataType = dataType;
10
- model.inputNumComps = numComps;
11
- superCreate3DFilterableFromRaw(width, height, depth, numComps, dataType, data, preferSizeOverAccuracy);
11
+ model.inputNumComps = numberOfComponents;
12
+ superCreate3DFilterableFromRaw(width, height, depth, numberOfComponents, dataType, data, preferSizeOverAccuracy);
12
13
  };
13
- publicAPI.update3DFromRaw = (data) => {
14
- const { updatedFrames } = model;
15
- if (!updatedFrames.length) {
14
+ publicAPI.update3DFromRaw = () => {
15
+ const { volumeId } = model;
16
+ if (!volumeId) {
16
17
  return;
17
18
  }
19
+ const volume = cache.getVolume(volumeId);
18
20
  model._openGLRenderWindow.activateTexture(publicAPI);
19
21
  publicAPI.createTexture();
20
22
  publicAPI.bind();
21
- let bytesPerVoxel;
22
- let TypedArrayConstructor;
23
- if (data instanceof Uint8Array) {
24
- bytesPerVoxel = 1;
25
- TypedArrayConstructor = Uint8Array;
26
- }
27
- else if (data instanceof Int16Array) {
28
- bytesPerVoxel = 2;
29
- TypedArrayConstructor = Int16Array;
30
- }
31
- else if (data instanceof Uint16Array) {
32
- bytesPerVoxel = 2;
33
- TypedArrayConstructor = Uint16Array;
23
+ if (volume.isDynamicVolume()) {
24
+ updateDynamicVolumeTexture();
25
+ return;
34
26
  }
35
- else if (data instanceof Float32Array) {
36
- bytesPerVoxel = 4;
37
- TypedArrayConstructor = Float32Array;
27
+ return (publicAPI.hasUpdatedFrames() && updateTextureImagesUsingVoxelManager());
28
+ };
29
+ const superModified = publicAPI.modified;
30
+ publicAPI.setUpdatedFrame = (frameIndex) => {
31
+ model.updatedFrames[frameIndex] = true;
32
+ superModified();
33
+ };
34
+ publicAPI.modified = () => {
35
+ superModified();
36
+ const volume = cache.getVolume(model.volumeId);
37
+ if (!volume) {
38
+ return;
38
39
  }
39
- else {
40
- throw new Error(`No support for given TypedArray.`);
40
+ const imageIds = volume.imageIds;
41
+ for (let i = 0; i < imageIds.length; i++) {
42
+ model.updatedFrames[i] = true;
41
43
  }
42
- for (let i = 0; i < updatedFrames.length; i++) {
43
- if (updatedFrames[i]) {
44
- model.fillSubImage3D(data, i, bytesPerVoxel, TypedArrayConstructor);
44
+ };
45
+ function updateTextureImagesUsingVoxelManager() {
46
+ const volume = cache.getVolume(model.volumeId);
47
+ const imageIds = volume.imageIds;
48
+ for (let i = 0; i < model.updatedFrames.length; i++) {
49
+ if (model.updatedFrames[i]) {
50
+ const image = cache.getImage(imageIds[i]);
51
+ if (!image) {
52
+ continue;
53
+ }
54
+ const data = image.voxelManager.getScalarData();
55
+ const gl = model.context;
56
+ const dataType = data.constructor.name;
57
+ const [pixData] = publicAPI.updateArrayDataTypeForGL(dataType, [data]);
58
+ publicAPI.bind();
59
+ const zOffset = i;
60
+ gl.texSubImage3D(model.target, 0, 0, 0, zOffset, model.width, model.height, 1, model.format, model.openGLDataType, pixData);
61
+ publicAPI.deactivate();
62
+ model.updatedFrames[i] = null;
45
63
  }
46
64
  }
47
- model.updatedFrames = [];
48
65
  if (model.generateMipmap) {
49
66
  model.context.generateMipmap(model.target);
50
67
  }
51
68
  publicAPI.deactivate();
52
69
  return true;
53
- };
54
- model.fillSubImage3D = (data, frameIndex, bytesPerVoxel, TypedArrayConstructor) => {
55
- const buffer = data.buffer;
56
- const frameLength = model.width * model.height;
57
- const frameLengthInBytes = frameLength * model.components * bytesPerVoxel;
58
- const zOffset = frameIndex * frameLengthInBytes;
59
- const rowLength = model.width * model.components;
60
- const gl = model.context;
61
- const MAX_TEXTURE_SIZE = gl.getParameter(gl.MAX_TEXTURE_SIZE);
62
- let blockHeight = Math.floor((bytesPerVoxel * MAX_TEXTURE_SIZE) / model.width);
63
- blockHeight = Math.min(blockHeight, model.height);
64
- const { useNorm16Texture, preferSizeOverAccuracy } = getConfiguration().rendering;
65
- if (useNorm16Texture && !preferSizeOverAccuracy) {
66
- blockHeight = 1;
67
- }
68
- const multiRowBlockLength = rowLength * blockHeight;
69
- const multiRowBlockLengthInBytes = multiRowBlockLength * bytesPerVoxel;
70
- const normalBlocks = Math.floor(model.height / blockHeight);
71
- const lastBlockHeight = model.height % blockHeight;
72
- const multiRowLastBlockLength = rowLength * lastBlockHeight;
73
- for (let block = 0; block < normalBlocks; block++) {
74
- const yOffset = block * blockHeight;
75
- let dataView = new TypedArrayConstructor(buffer, zOffset + block * multiRowBlockLengthInBytes, multiRowBlockLength);
76
- if (model.useHalfFloat &&
77
- (TypedArrayConstructor === Uint16Array ||
78
- TypedArrayConstructor === Int16Array)) {
79
- for (let idx = 0; idx < dataView.length; idx++) {
80
- dataView[idx] = HalfFloat.toHalf(dataView[idx]);
81
- }
82
- if (TypedArrayConstructor === Int16Array) {
83
- dataView = new Uint16Array(dataView);
84
- }
70
+ }
71
+ function updateDynamicVolumeTexture() {
72
+ const volume = cache.getVolume(model.volumeId);
73
+ const imageIds = volume.getCurrentTimePointImageIds();
74
+ for (let i = 0; i < imageIds.length; i++) {
75
+ const imageId = imageIds[i];
76
+ const image = cache.getImage(imageId);
77
+ if (!image) {
78
+ continue;
85
79
  }
86
- gl.texSubImage3D(model.target, 0, 0, yOffset, frameIndex, model.width, blockHeight, 1, model.format, model.openGLDataType, dataView);
80
+ const data = image.voxelManager.getScalarData();
81
+ const gl = model.context;
82
+ const dataType = data.constructor.name;
83
+ const [pixData] = publicAPI.updateArrayDataTypeForGL(dataType, [data]);
84
+ publicAPI.bind();
85
+ let zOffset = i;
86
+ gl.texSubImage3D(model.target, 0, 0, 0, zOffset, model.width, model.height, 1, model.format, model.openGLDataType, pixData);
87
+ publicAPI.deactivate();
87
88
  }
88
- if (lastBlockHeight !== 0) {
89
- const yOffset = normalBlocks * blockHeight;
90
- const dataView = new TypedArrayConstructor(buffer, zOffset + normalBlocks * multiRowBlockLengthInBytes, multiRowLastBlockLength);
91
- gl.texSubImage3D(model.target, 0, 0, yOffset, frameIndex, model.width, lastBlockHeight, 1, model.format, model.openGLDataType, dataView);
89
+ if (model.generateMipmap) {
90
+ model.context.generateMipmap(model.target);
92
91
  }
92
+ publicAPI.deactivate();
93
+ return true;
94
+ }
95
+ publicAPI.hasUpdatedFrames = () => !model.updatedFrames.length || model.updatedFrames.some((frame) => frame);
96
+ publicAPI.getUpdatedFrames = () => model.updatedFrames;
97
+ publicAPI.setVolumeId = (volumeId) => {
98
+ model.volumeId = volumeId;
93
99
  };
94
- publicAPI.getTextureParameters = () => {
95
- return {
96
- width: model.width,
97
- height: model.height,
98
- depth: model.depth,
99
- numComps: model.inputNumComps,
100
- dataType: model.inputDataType,
101
- };
102
- };
103
- publicAPI.setUpdatedFrame = (frameIndex) => {
104
- model.updatedFrames[frameIndex] = true;
100
+ publicAPI.getVolumeId = () => model.volumeId;
101
+ publicAPI.setTextureParameters = ({ width, height, depth, numberOfComponents, dataType, }) => {
102
+ model.width ??= width;
103
+ model.height ??= height;
104
+ model.depth ??= depth;
105
+ model.inputNumComps ??= numberOfComponents;
106
+ model.inputDataType ??= dataType;
105
107
  };
108
+ publicAPI.getTextureParameters = () => ({
109
+ width: model.width,
110
+ height: model.height,
111
+ depth: model.depth,
112
+ numberOfComponents: model.inputNumComps,
113
+ dataType: model.inputDataType,
114
+ });
106
115
  }
107
116
  const DEFAULT_VALUES = {
108
117
  updatedFrames: [],
@@ -31,7 +31,7 @@ function vtkStreamingOpenGLViewNodeFactory(publicAPI, model) {
31
31
  let isObject = false;
32
32
  const keys = Object.keys(model.overrides);
33
33
  while (className && !isObject) {
34
- if (keys.indexOf(className) !== -1) {
34
+ if (keys.includes(className)) {
35
35
  isObject = true;
36
36
  }
37
37
  else {
@@ -2,8 +2,10 @@ import macro from '@kitware/vtk.js/macros';
2
2
  import vtkOpenGLVolumeMapper from '@kitware/vtk.js/Rendering/OpenGL/VolumeMapper';
3
3
  import { Filter } from '@kitware/vtk.js/Rendering/OpenGL/Texture/Constants';
4
4
  import { VtkDataTypes } from '@kitware/vtk.js/Common/Core/DataArray/Constants';
5
+ import { getTransferFunctionHash } from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow/resourceSharingHelper';
5
6
  import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray';
6
7
  import { Representation } from '@kitware/vtk.js/Rendering/Core/Property/Constants';
8
+ import vtkOpenGLTexture from '@kitware/vtk.js/Rendering/OpenGL/Texture';
7
9
  function vtkStreamingOpenGLVolumeMapper(publicAPI, model) {
8
10
  model.classHierarchy.push('vtkStreamingOpenGLVolumeMapper');
9
11
  publicAPI.buildBufferObjects = (ren, actor) => {
@@ -11,10 +13,6 @@ function vtkStreamingOpenGLVolumeMapper(publicAPI, model) {
11
13
  if (!image) {
12
14
  return;
13
15
  }
14
- const scalars = image.getPointData() && image.getPointData().getScalars();
15
- if (!scalars) {
16
- return;
17
- }
18
16
  const vprop = actor.getProperty();
19
17
  if (!model.jitterTexture.getHandle()) {
20
18
  const oTable = new Uint8Array(32 * 32);
@@ -25,18 +23,22 @@ function vtkStreamingOpenGLVolumeMapper(publicAPI, model) {
25
23
  model.jitterTexture.setMagnificationFilter(Filter.LINEAR);
26
24
  model.jitterTexture.create2DFromRaw(32, 32, 1, VtkDataTypes.UNSIGNED_CHAR, oTable);
27
25
  }
28
- const numComp = scalars.getNumberOfComponents();
29
- const iComps = vprop.getIndependentComponents();
30
- const numIComps = iComps ? numComp : 1;
31
- let toString = `${vprop.getMTime()}`;
32
- if (model.opacityTextureString !== toString) {
26
+ const { numberOfComponents: numIComps } = image.get('numberOfComponents');
27
+ const useIndependentComps = publicAPI.useIndependentComponents(vprop);
28
+ const scalarOpacityFunc = vprop.getScalarOpacity();
29
+ const opTex = model._openGLRenderWindow.getGraphicsResourceForObject(scalarOpacityFunc);
30
+ let toString = getTransferFunctionHash(scalarOpacityFunc, useIndependentComps, numIComps);
31
+ const reBuildOp = !opTex?.oglObject || opTex.hash !== toString;
32
+ if (reBuildOp) {
33
+ model.opacityTexture = vtkOpenGLTexture.newInstance();
34
+ model.opacityTexture.setOpenGLRenderWindow(model._openGLRenderWindow);
33
35
  const oWidth = 1024;
34
36
  const oSize = oWidth * 2 * numIComps;
35
37
  const ofTable = new Float32Array(oSize);
36
38
  const tmpTable = new Float32Array(oWidth);
37
39
  for (let c = 0; c < numIComps; ++c) {
38
40
  const ofun = vprop.getScalarOpacity(c);
39
- const opacityFactor = model.renderable.getSampleDistance() /
41
+ const opacityFactor = publicAPI.getCurrentSampleDistance(ren) /
40
42
  vprop.getScalarOpacityUnitDistance(c);
41
43
  const oRange = ofun.getRange();
42
44
  ofun.getTable(oRange[0], oRange[1], oWidth, tmpTable, 1);
@@ -46,7 +48,7 @@ function vtkStreamingOpenGLVolumeMapper(publicAPI, model) {
46
48
  ofTable[c * oWidth * 2 + i + oWidth] = ofTable[c * oWidth * 2 + i];
47
49
  }
48
50
  }
49
- model.opacityTexture.releaseGraphicsResources(model._openGLRenderWindow);
51
+ model.opacityTexture.resetFormatAndType();
50
52
  model.opacityTexture.setMinificationFilter(Filter.LINEAR);
51
53
  model.opacityTexture.setMagnificationFilter(Filter.LINEAR);
52
54
  if (model._openGLRenderWindow.getWebgl2() ||
@@ -55,19 +57,34 @@ function vtkStreamingOpenGLVolumeMapper(publicAPI, model) {
55
57
  model.opacityTexture.create2DFromRaw(oWidth, 2 * numIComps, 1, VtkDataTypes.FLOAT, ofTable);
56
58
  }
57
59
  else {
58
- const oTable = new Uint8Array(oSize);
60
+ const oTable = new Uint8ClampedArray(oSize);
59
61
  for (let i = 0; i < oSize; ++i) {
60
62
  oTable[i] = 255.0 * ofTable[i];
61
63
  }
62
64
  model.opacityTexture.create2DFromRaw(oWidth, 2 * numIComps, 1, VtkDataTypes.UNSIGNED_CHAR, oTable);
63
65
  }
64
- model.opacityTextureString = toString;
66
+ if (scalarOpacityFunc) {
67
+ model._openGLRenderWindow.setGraphicsResourceForObject(scalarOpacityFunc, model.opacityTexture, toString);
68
+ if (scalarOpacityFunc !== model._scalarOpacityFunc) {
69
+ model._openGLRenderWindow.registerGraphicsResourceUser(scalarOpacityFunc, publicAPI);
70
+ model._openGLRenderWindow.unregisterGraphicsResourceUser(model._scalarOpacityFunc, publicAPI);
71
+ }
72
+ model._scalarOpacityFunc = scalarOpacityFunc;
73
+ }
74
+ }
75
+ else {
76
+ model.opacityTexture = opTex.oglObject;
65
77
  }
66
- toString = `${vprop.getMTime()}`;
67
- if (model.colorTextureString !== toString) {
78
+ const colorTransferFunc = vprop.getRGBTransferFunction();
79
+ toString = getTransferFunctionHash(colorTransferFunc, useIndependentComps, numIComps);
80
+ const cTex = model._openGLRenderWindow.getGraphicsResourceForObject(colorTransferFunc);
81
+ const reBuildC = !cTex?.oglObject?.getHandle() || cTex?.hash !== toString;
82
+ if (reBuildC) {
83
+ model.colorTexture = vtkOpenGLTexture.newInstance();
84
+ model.colorTexture.setOpenGLRenderWindow(model._openGLRenderWindow);
68
85
  const cWidth = 1024;
69
86
  const cSize = cWidth * 2 * numIComps * 3;
70
- const cTable = new Uint8Array(cSize);
87
+ const cTable = new Uint8ClampedArray(cSize);
71
88
  const tmpTable = new Float32Array(cWidth * 3);
72
89
  for (let c = 0; c < numIComps; ++c) {
73
90
  const cfun = vprop.getRGBTransferFunction(c);
@@ -78,39 +95,57 @@ function vtkStreamingOpenGLVolumeMapper(publicAPI, model) {
78
95
  cTable[c * cWidth * 6 + i + cWidth * 3] = 255.0 * tmpTable[i];
79
96
  }
80
97
  }
81
- model.colorTexture.releaseGraphicsResources(model._openGLRenderWindow);
98
+ model.colorTexture.resetFormatAndType();
82
99
  model.colorTexture.setMinificationFilter(Filter.LINEAR);
83
100
  model.colorTexture.setMagnificationFilter(Filter.LINEAR);
84
101
  model.colorTexture.create2DFromRaw(cWidth, 2 * numIComps, 3, VtkDataTypes.UNSIGNED_CHAR, cTable);
85
- model.colorTextureString = toString;
102
+ if (colorTransferFunc) {
103
+ model._openGLRenderWindow.setGraphicsResourceForObject(colorTransferFunc, model.colorTexture, toString);
104
+ if (colorTransferFunc !== model._colorTransferFunc) {
105
+ model._openGLRenderWindow.registerGraphicsResourceUser(colorTransferFunc, publicAPI);
106
+ model._openGLRenderWindow.unregisterGraphicsResourceUser(model._colorTransferFunc, publicAPI);
107
+ }
108
+ model._colorTransferFunc = colorTransferFunc;
109
+ }
110
+ }
111
+ else {
112
+ model.colorTexture = cTex.oglObject;
86
113
  }
87
114
  publicAPI.updateLabelOutlineThicknessTexture(actor);
88
- toString = `${image.getMTime()}`;
115
+ toString = `${image.getMTime()}-${model.scalarTexture.getMTime()}`;
89
116
  if (model.scalarTextureString !== toString) {
90
117
  const dims = image.getDimensions();
118
+ model.scalarTexture.setOpenGLRenderWindow(model._openGLRenderWindow);
119
+ model.scalarTexture.enableUseHalfFloat(false);
91
120
  const previousTextureParameters = model.scalarTexture.getTextureParameters();
92
- const dataType = image.getPointData().getScalars().getDataType();
93
- const data = image.getPointData().getScalars().getData();
121
+ const dataType = image.get('dataType').dataType;
94
122
  let shouldReset = true;
95
- if (previousTextureParameters.dataType &&
96
- previousTextureParameters.dataType === dataType) {
97
- const previousTextureSize = previousTextureParameters.width *
98
- previousTextureParameters.height *
99
- previousTextureParameters.depth *
100
- previousTextureParameters.numComps;
101
- if (data.length === previousTextureSize) {
102
- shouldReset = false;
123
+ if (previousTextureParameters?.dataType === dataType) {
124
+ if (previousTextureParameters?.width === dims[0]) {
125
+ if (previousTextureParameters?.height === dims[1]) {
126
+ if (previousTextureParameters?.depth === dims[2]) {
127
+ shouldReset = false;
128
+ }
129
+ }
103
130
  }
104
131
  }
105
132
  if (shouldReset) {
106
- model.scalarTexture.setOglNorm16Ext(model.context.getExtension('EXT_texture_norm16'));
107
- model.scalarTexture.releaseGraphicsResources(model._openGLRenderWindow);
133
+ const norm16Ext = model.context.getExtension('EXT_texture_norm16');
134
+ model.scalarTexture.setOglNorm16Ext(norm16Ext);
108
135
  model.scalarTexture.resetFormatAndType();
109
- model.scalarTexture.create3DFilterableFromRaw(dims[0], dims[1], dims[2], numComp, scalars.getDataType(), scalars.getData(), model.renderable.getPreferSizeOverAccuracy());
136
+ model.scalarTexture.setTextureParameters({
137
+ width: dims[0],
138
+ height: dims[1],
139
+ depth: dims[2],
140
+ numberOfComponents: numIComps,
141
+ dataType,
142
+ });
143
+ model.scalarTexture.create3DFromRaw(dims[0], dims[1], dims[2], numIComps, dataType, null);
144
+ model.scalarTexture.update3DFromRaw();
110
145
  }
111
146
  else {
112
147
  model.scalarTexture.deactivate();
113
- model.scalarTexture.update3DFromRaw(data);
148
+ model.scalarTexture.update3DFromRaw();
114
149
  }
115
150
  model.scalarTextureString = toString;
116
151
  }
@@ -146,16 +181,22 @@ function vtkStreamingOpenGLVolumeMapper(publicAPI, model) {
146
181
  }
147
182
  model.VBOBuildTime.modified();
148
183
  };
149
- publicAPI.getRenderTargetSize = () => {
150
- if (model._useSmallViewport) {
151
- return [model._smallViewportWidth, model._smallViewportHeight];
184
+ publicAPI.getNeedToRebuildBufferObjects = (ren, actor) => {
185
+ if (model.VBOBuildTime.getMTime() < publicAPI.getMTime() ||
186
+ model.VBOBuildTime.getMTime() < actor.getMTime() ||
187
+ model.VBOBuildTime.getMTime() < model.renderable.getMTime() ||
188
+ model.VBOBuildTime.getMTime() < actor.getProperty().getMTime() ||
189
+ model.VBOBuildTime.getMTime() < model.currentInput.getMTime() ||
190
+ model.VBOBuildTime.getMTime() < model.scalarTexture?.getMTime() ||
191
+ model.VBOBuildTime.getMTime() < model.colorTexture?.getMTime() ||
192
+ model.VBOBuildTime.getMTime() <
193
+ model.labelOutlineThicknessTexture?.getMTime() ||
194
+ !model.scalarTexture?.getHandle() ||
195
+ !model.colorTexture?.getHandle() ||
196
+ !model.labelOutlineThicknessTexture?.getHandle()) {
197
+ return true;
152
198
  }
153
- const { usize, vsize } = model._openGLRenderer.getTiledSizeAndOrigin();
154
- return [usize, vsize];
155
- };
156
- publicAPI.getRenderTargetOffset = () => {
157
- const { lowerLeftU, lowerLeftV } = model._openGLRenderer.getTiledSizeAndOrigin();
158
- return [lowerLeftU, lowerLeftV];
199
+ return false;
159
200
  };
160
201
  }
161
202
  const DEFAULT_VALUES = {};
@@ -8,7 +8,7 @@ export default class Settings {
8
8
  import(root: Record<string, unknown>): void;
9
9
  dump(): Record<string, unknown>;
10
10
  static assert(subject: Settings): Settings;
11
- static getDefaultSettings(subfield?: any): Settings | any;
11
+ static getDefaultSettings(subfield?: any): Settings | unknown;
12
12
  static getRuntimeSettings(): Settings;
13
13
  static getObjectSettings(subject: unknown, from?: unknown): Settings;
14
14
  static extendRuntimeSettings(): Settings;