@cornerstonejs/core 5.0.0-beta.1 → 5.0.0

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 (423) hide show
  1. package/dist/esm/RenderingEngine/BaseRenderingEngine.d.ts +4 -5
  2. package/dist/esm/RenderingEngine/BaseRenderingEngine.js +57 -69
  3. package/dist/esm/RenderingEngine/BaseVolumeViewport.d.ts +6 -4
  4. package/dist/esm/RenderingEngine/BaseVolumeViewport.js +39 -30
  5. package/dist/esm/RenderingEngine/CanvasActor/CanvasMapper.d.ts +1 -0
  6. package/dist/esm/RenderingEngine/CanvasActor/CanvasMapper.js +3 -0
  7. package/dist/esm/RenderingEngine/CanvasActor/CanvasProperties.d.ts +10 -2
  8. package/dist/esm/RenderingEngine/CanvasActor/CanvasProperties.js +64 -6
  9. package/dist/esm/RenderingEngine/CanvasActor/index.d.ts +4 -0
  10. package/dist/esm/RenderingEngine/CanvasActor/index.js +59 -48
  11. package/dist/esm/RenderingEngine/ContextPoolRenderingEngine.d.ts +3 -4
  12. package/dist/esm/RenderingEngine/ContextPoolRenderingEngine.js +55 -37
  13. package/dist/esm/RenderingEngine/ECGViewport.d.ts +1 -1
  14. package/dist/esm/RenderingEngine/ECGViewport.js +34 -160
  15. package/dist/esm/RenderingEngine/GenericViewport/DefaultRenderPathResolver.d.ts +10 -0
  16. package/dist/esm/RenderingEngine/GenericViewport/DefaultRenderPathResolver.js +25 -0
  17. package/dist/esm/RenderingEngine/GenericViewport/ECG/CanvasECGRenderPath.d.ts +17 -0
  18. package/dist/esm/RenderingEngine/GenericViewport/ECG/CanvasECGRenderPath.js +144 -0
  19. package/dist/esm/RenderingEngine/GenericViewport/ECG/DefaultECGDataProvider.d.ts +5 -0
  20. package/dist/esm/RenderingEngine/GenericViewport/ECG/DefaultECGDataProvider.js +13 -0
  21. package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGProjectionTypes.d.ts +42 -0
  22. package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGProjectionTypes.js +2 -0
  23. package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGRenderPathResolver.d.ts +4 -0
  24. package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGRenderPathResolver.js +8 -0
  25. package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGResolvedView.d.ts +27 -0
  26. package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGResolvedView.js +121 -0
  27. package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGViewport.d.ts +55 -0
  28. package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGViewport.js +289 -0
  29. package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGViewportLegacyAdapter.d.ts +13 -0
  30. package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGViewportLegacyAdapter.js +70 -0
  31. package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGViewportTypes.d.ts +69 -0
  32. package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGViewportTypes.js +0 -0
  33. package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgProjectionAdapter.d.ts +8 -0
  34. package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgProjectionAdapter.js +12 -0
  35. package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgProjectionPresentation.d.ts +7 -0
  36. package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgProjectionPresentation.js +52 -0
  37. package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgProjectionSnapshot.d.ts +2 -0
  38. package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgProjectionSnapshot.js +94 -0
  39. package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgViewportCamera.d.ts +27 -0
  40. package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgViewportCamera.js +82 -0
  41. package/dist/esm/RenderingEngine/GenericViewport/ECG/index.d.ts +10 -0
  42. package/dist/esm/RenderingEngine/GenericViewport/ECG/index.js +8 -0
  43. package/dist/esm/RenderingEngine/GenericViewport/GenericViewport.d.ts +82 -0
  44. package/dist/esm/RenderingEngine/GenericViewport/GenericViewport.js +369 -0
  45. package/dist/esm/RenderingEngine/GenericViewport/Planar/CpuImageSliceRenderPath.d.ts +24 -0
  46. package/dist/esm/RenderingEngine/GenericViewport/Planar/CpuImageSliceRenderPath.js +456 -0
  47. package/dist/esm/RenderingEngine/GenericViewport/Planar/CpuVolumeSliceRenderPath.d.ts +25 -0
  48. package/dist/esm/RenderingEngine/GenericViewport/Planar/CpuVolumeSliceRenderPath.js +514 -0
  49. package/dist/esm/RenderingEngine/GenericViewport/Planar/DefaultPlanarDataProvider.d.ts +6 -0
  50. package/dist/esm/RenderingEngine/GenericViewport/Planar/DefaultPlanarDataProvider.js +80 -0
  51. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarCPUScalarViewportSampler.d.ts +47 -0
  52. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarCPUScalarViewportSampler.js +439 -0
  53. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarCPUVolumeSampler.d.ts +98 -0
  54. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarCPUVolumeSampler.js +686 -0
  55. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarLegacyCompatibilityController.d.ts +81 -0
  56. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarLegacyCompatibilityController.js +526 -0
  57. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarMountedData.d.ts +34 -0
  58. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarMountedData.js +111 -0
  59. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarProjectionTypes.d.ts +58 -0
  60. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarProjectionTypes.js +2 -0
  61. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarRenderPathDecisionService.d.ts +28 -0
  62. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarRenderPathDecisionService.js +145 -0
  63. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarRenderPathResolver.d.ts +4 -0
  64. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarRenderPathResolver.js +16 -0
  65. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarResolvedView.d.ts +91 -0
  66. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarResolvedView.js +305 -0
  67. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewReferenceController.d.ts +72 -0
  68. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewReferenceController.js +406 -0
  69. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewport.d.ts +187 -0
  70. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewport.js +1175 -0
  71. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewportLegacyAdapter.d.ts +44 -0
  72. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewportLegacyAdapter.js +279 -0
  73. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewportTypes.d.ts +151 -0
  74. package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewportTypes.js +0 -0
  75. package/dist/esm/RenderingEngine/GenericViewport/Planar/VtkImageMapperRenderPath.d.ts +21 -0
  76. package/dist/esm/RenderingEngine/GenericViewport/Planar/VtkImageMapperRenderPath.js +259 -0
  77. package/dist/esm/RenderingEngine/GenericViewport/Planar/VtkVolumeSliceRenderPath.d.ts +23 -0
  78. package/dist/esm/RenderingEngine/GenericViewport/Planar/VtkVolumeSliceRenderPath.js +289 -0
  79. package/dist/esm/RenderingEngine/GenericViewport/Planar/buildPlanarActorEntry.d.ts +10 -0
  80. package/dist/esm/RenderingEngine/GenericViewport/Planar/buildPlanarActorEntry.js +54 -0
  81. package/dist/esm/RenderingEngine/GenericViewport/Planar/index.d.ts +23 -0
  82. package/dist/esm/RenderingEngine/GenericViewport/Planar/index.js +20 -0
  83. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarActorCompatibility.d.ts +4 -0
  84. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarActorCompatibility.js +42 -0
  85. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarAdapterCoordinateTransforms.d.ts +44 -0
  86. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarAdapterCoordinateTransforms.js +129 -0
  87. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCPUVolumeSamplingUtils.d.ts +11 -0
  88. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCPUVolumeSamplingUtils.js +54 -0
  89. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCameraScale.d.ts +10 -0
  90. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCameraScale.js +35 -0
  91. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCpuImageTransforms.d.ts +3 -0
  92. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCpuImageTransforms.js +35 -0
  93. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCpuViewportMath.d.ts +10 -0
  94. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCpuViewportMath.js +35 -0
  95. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarImageEvents.d.ts +22 -0
  96. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarImageEvents.js +28 -0
  97. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarLegacyCompatibility.d.ts +13 -0
  98. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarLegacyCompatibility.js +136 -0
  99. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarMath.d.ts +3 -0
  100. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarMath.js +15 -0
  101. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarOrientationVectors.d.ts +12 -0
  102. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarOrientationVectors.js +37 -0
  103. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionAdapter.d.ts +7 -0
  104. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionAdapter.js +28 -0
  105. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionFallback.d.ts +4 -0
  106. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionFallback.js +25 -0
  107. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionPresentation.d.ts +5 -0
  108. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionPresentation.js +95 -0
  109. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionSnapshot.d.ts +6 -0
  110. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionSnapshot.js +126 -0
  111. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRenderCamera.d.ts +46 -0
  112. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRenderCamera.js +332 -0
  113. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRenderPathProjection.d.ts +51 -0
  114. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRenderPathProjection.js +96 -0
  115. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRenderPathSelector.d.ts +4 -0
  116. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRenderPathSelector.js +12 -0
  117. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRuntimeTypes.d.ts +86 -0
  118. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRuntimeTypes.js +0 -0
  119. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarSliceBasis.d.ts +51 -0
  120. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarSliceBasis.js +330 -0
  121. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarViewPresentation.d.ts +16 -0
  122. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarViewPresentation.js +25 -0
  123. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarViewReference.d.ts +46 -0
  124. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarViewReference.js +243 -0
  125. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarViewState.d.ts +5 -0
  126. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarViewState.js +59 -0
  127. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarVolumePresentation.d.ts +10 -0
  128. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarVolumePresentation.js +223 -0
  129. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarVolumeSliceBlendMode.d.ts +5 -0
  130. package/dist/esm/RenderingEngine/GenericViewport/Planar/planarVolumeSliceBlendMode.js +36 -0
  131. package/dist/esm/RenderingEngine/GenericViewport/ResolvedViewportView.d.ts +12 -0
  132. package/dist/esm/RenderingEngine/GenericViewport/ResolvedViewportView.js +10 -0
  133. package/dist/esm/RenderingEngine/GenericViewport/Video/DefaultVideoDataProvider.d.ts +5 -0
  134. package/dist/esm/RenderingEngine/GenericViewport/Video/DefaultVideoDataProvider.js +18 -0
  135. package/dist/esm/RenderingEngine/GenericViewport/Video/HtmlVideoRenderPath.d.ts +19 -0
  136. package/dist/esm/RenderingEngine/GenericViewport/Video/HtmlVideoRenderPath.js +141 -0
  137. package/dist/esm/RenderingEngine/GenericViewport/Video/VideoProjectionTypes.d.ts +45 -0
  138. package/dist/esm/RenderingEngine/GenericViewport/Video/VideoProjectionTypes.js +2 -0
  139. package/dist/esm/RenderingEngine/GenericViewport/Video/VideoRenderPathResolver.d.ts +4 -0
  140. package/dist/esm/RenderingEngine/GenericViewport/Video/VideoRenderPathResolver.js +8 -0
  141. package/dist/esm/RenderingEngine/GenericViewport/Video/VideoResolvedView.d.ts +29 -0
  142. package/dist/esm/RenderingEngine/GenericViewport/Video/VideoResolvedView.js +108 -0
  143. package/dist/esm/RenderingEngine/GenericViewport/Video/VideoViewport.d.ts +59 -0
  144. package/dist/esm/RenderingEngine/GenericViewport/Video/VideoViewport.js +458 -0
  145. package/dist/esm/RenderingEngine/GenericViewport/Video/VideoViewportLegacyAdapter.d.ts +15 -0
  146. package/dist/esm/RenderingEngine/GenericViewport/Video/VideoViewportLegacyAdapter.js +114 -0
  147. package/dist/esm/RenderingEngine/GenericViewport/Video/VideoViewportTypes.d.ts +45 -0
  148. package/dist/esm/RenderingEngine/GenericViewport/Video/VideoViewportTypes.js +0 -0
  149. package/dist/esm/RenderingEngine/GenericViewport/Video/index.d.ts +10 -0
  150. package/dist/esm/RenderingEngine/GenericViewport/Video/index.js +8 -0
  151. package/dist/esm/RenderingEngine/GenericViewport/Video/videoProjectionAdapter.d.ts +8 -0
  152. package/dist/esm/RenderingEngine/GenericViewport/Video/videoProjectionAdapter.js +12 -0
  153. package/dist/esm/RenderingEngine/GenericViewport/Video/videoProjectionPresentation.d.ts +7 -0
  154. package/dist/esm/RenderingEngine/GenericViewport/Video/videoProjectionPresentation.js +66 -0
  155. package/dist/esm/RenderingEngine/GenericViewport/Video/videoProjectionSnapshot.d.ts +2 -0
  156. package/dist/esm/RenderingEngine/GenericViewport/Video/videoProjectionSnapshot.js +86 -0
  157. package/dist/esm/RenderingEngine/GenericViewport/Video/videoViewportCamera.d.ts +30 -0
  158. package/dist/esm/RenderingEngine/GenericViewport/Video/videoViewportCamera.js +105 -0
  159. package/dist/esm/RenderingEngine/GenericViewport/ViewportArchitectureTypes.d.ts +126 -0
  160. package/dist/esm/RenderingEngine/GenericViewport/ViewportArchitectureTypes.js +20 -0
  161. package/dist/esm/RenderingEngine/GenericViewport/ViewportCameraTypes.d.ts +12 -0
  162. package/dist/esm/RenderingEngine/GenericViewport/ViewportCameraTypes.js +0 -0
  163. package/dist/esm/RenderingEngine/GenericViewport/ViewportProjectionTypes.d.ts +101 -0
  164. package/dist/esm/RenderingEngine/GenericViewport/ViewportProjectionTypes.js +0 -0
  165. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/DefaultVolume3DDataProvider.d.ts +8 -0
  166. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/DefaultVolume3DDataProvider.js +58 -0
  167. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/Volume3DProjectionTypes.d.ts +35 -0
  168. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/Volume3DProjectionTypes.js +2 -0
  169. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/Volume3DRenderPathResolver.d.ts +4 -0
  170. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/Volume3DRenderPathResolver.js +9 -0
  171. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/Volume3DResolvedView.d.ts +18 -0
  172. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/Volume3DResolvedView.js +42 -0
  173. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/VolumeViewport3DLegacyAdapter.d.ts +39 -0
  174. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/VolumeViewport3DLegacyAdapter.js +296 -0
  175. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/VtkGeometry3DRenderPath.d.ts +22 -0
  176. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/VtkGeometry3DRenderPath.js +156 -0
  177. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/VtkVolume3DRenderPath.d.ts +23 -0
  178. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/VtkVolume3DRenderPath.js +205 -0
  179. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/applyVolume3DCamera.d.ts +4 -0
  180. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/applyVolume3DCamera.js +33 -0
  181. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/index.d.ts +10 -0
  182. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/index.js +8 -0
  183. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/viewport3D.d.ts +60 -0
  184. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/viewport3D.js +399 -0
  185. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/viewport3DTypes.d.ts +88 -0
  186. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/viewport3DTypes.js +0 -0
  187. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionAdapter.d.ts +7 -0
  188. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionAdapter.js +27 -0
  189. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionCamera.d.ts +12 -0
  190. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionCamera.js +35 -0
  191. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionPresentation.d.ts +4 -0
  192. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionPresentation.js +22 -0
  193. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionSnapshot.d.ts +2 -0
  194. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionSnapshot.js +52 -0
  195. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/vtkVolume3DInitialCamera.d.ts +3 -0
  196. package/dist/esm/RenderingEngine/GenericViewport/Volume3D/vtkVolume3DInitialCamera.js +110 -0
  197. package/dist/esm/RenderingEngine/GenericViewport/WSI/DefaultWSIDataProvider.d.ts +6 -0
  198. package/dist/esm/RenderingEngine/GenericViewport/WSI/DefaultWSIDataProvider.js +35 -0
  199. package/dist/esm/RenderingEngine/GenericViewport/WSI/DicomMicroscopyRenderPath.d.ts +16 -0
  200. package/dist/esm/RenderingEngine/GenericViewport/WSI/DicomMicroscopyRenderPath.js +125 -0
  201. package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIProjectionTypes.d.ts +40 -0
  202. package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIProjectionTypes.js +2 -0
  203. package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIRenderPathResolver.d.ts +4 -0
  204. package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIRenderPathResolver.js +8 -0
  205. package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIResolvedView.d.ts +26 -0
  206. package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIResolvedView.js +104 -0
  207. package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIViewport.d.ts +69 -0
  208. package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIViewport.js +392 -0
  209. package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIViewportLegacyAdapter.d.ts +22 -0
  210. package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIViewportLegacyAdapter.js +144 -0
  211. package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIViewportTypes.d.ts +58 -0
  212. package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIViewportTypes.js +0 -0
  213. package/dist/esm/RenderingEngine/GenericViewport/WSI/index.d.ts +10 -0
  214. package/dist/esm/RenderingEngine/GenericViewport/WSI/index.js +8 -0
  215. package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiProjectionAdapter.d.ts +8 -0
  216. package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiProjectionAdapter.js +12 -0
  217. package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiProjectionPresentation.d.ts +7 -0
  218. package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiProjectionPresentation.js +47 -0
  219. package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiProjectionSnapshot.d.ts +2 -0
  220. package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiProjectionSnapshot.js +90 -0
  221. package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiTransformUtils.d.ts +29 -0
  222. package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiTransformUtils.js +128 -0
  223. package/dist/esm/RenderingEngine/GenericViewport/genericViewportDataSetAccess.d.ts +35 -0
  224. package/dist/esm/RenderingEngine/GenericViewport/genericViewportDataSetAccess.js +87 -0
  225. package/dist/esm/RenderingEngine/GenericViewport/genericViewportReferenceCompatibility.d.ts +18 -0
  226. package/dist/esm/RenderingEngine/GenericViewport/genericViewportReferenceCompatibility.js +238 -0
  227. package/dist/esm/RenderingEngine/GenericViewport/index.d.ts +23 -0
  228. package/dist/esm/RenderingEngine/GenericViewport/index.js +14 -0
  229. package/dist/esm/RenderingEngine/GenericViewport/setVtkCameraClippingRange.d.ts +2 -0
  230. package/dist/esm/RenderingEngine/GenericViewport/setVtkCameraClippingRange.js +8 -0
  231. package/dist/esm/RenderingEngine/GenericViewport/viewportProjection.d.ts +98 -0
  232. package/dist/esm/RenderingEngine/GenericViewport/viewportProjection.js +81 -0
  233. package/dist/esm/RenderingEngine/RenderingEngine.d.ts +3 -5
  234. package/dist/esm/RenderingEngine/RenderingEngine.js +3 -9
  235. package/dist/esm/RenderingEngine/StackViewport.d.ts +4 -1
  236. package/dist/esm/RenderingEngine/StackViewport.js +103 -53
  237. package/dist/esm/RenderingEngine/TiledRenderingEngine.d.ts +1 -0
  238. package/dist/esm/RenderingEngine/TiledRenderingEngine.js +23 -20
  239. package/dist/esm/RenderingEngine/VideoViewport.d.ts +5 -13
  240. package/dist/esm/RenderingEngine/VideoViewport.js +33 -68
  241. package/dist/esm/RenderingEngine/Viewport.d.ts +20 -5
  242. package/dist/esm/RenderingEngine/Viewport.js +149 -29
  243. package/dist/esm/RenderingEngine/VolumeViewport.js +26 -17
  244. package/dist/esm/RenderingEngine/VolumeViewport3D.js +2 -8
  245. package/dist/esm/RenderingEngine/WSIViewport.d.ts +12 -12
  246. package/dist/esm/RenderingEngine/WSIViewport.js +28 -101
  247. package/dist/esm/RenderingEngine/helpers/addVolumesToViewports.js +6 -8
  248. package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/colormap.d.ts +4 -1
  249. package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/colormap.js +157 -0
  250. package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/index.d.ts +2 -3
  251. package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/index.js +2 -3
  252. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/calculateTransform.js +19 -4
  253. package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/renderPseudoColorImage.js +13 -3
  254. package/dist/esm/RenderingEngine/helpers/createVolumeSliceActor.d.ts +14 -0
  255. package/dist/esm/RenderingEngine/helpers/createVolumeSliceActor.js +69 -0
  256. package/dist/esm/RenderingEngine/helpers/getCameraVectors.d.ts +2 -1
  257. package/dist/esm/RenderingEngine/helpers/getCameraVectors.js +1 -1
  258. package/dist/esm/RenderingEngine/helpers/getProjectionScaleMatrix.d.ts +2 -0
  259. package/dist/esm/RenderingEngine/helpers/getProjectionScaleMatrix.js +10 -0
  260. package/dist/esm/RenderingEngine/helpers/index.d.ts +2 -1
  261. package/dist/esm/RenderingEngine/helpers/index.js +2 -1
  262. package/dist/esm/RenderingEngine/helpers/planarImageRendering.d.ts +51 -0
  263. package/dist/esm/RenderingEngine/helpers/planarImageRendering.js +116 -0
  264. package/dist/esm/RenderingEngine/helpers/planarVolumeRendering.d.ts +22 -0
  265. package/dist/esm/RenderingEngine/helpers/planarVolumeRendering.js +28 -0
  266. package/dist/esm/RenderingEngine/helpers/resolveViewportVolumeId.d.ts +1 -0
  267. package/dist/esm/RenderingEngine/helpers/resolveViewportVolumeId.js +19 -0
  268. package/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.d.ts +3 -2
  269. package/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.js +46 -15
  270. package/dist/esm/RenderingEngine/helpers/setVolumesForViewports.js +6 -9
  271. package/dist/esm/RenderingEngine/helpers/stats/RenderModesPanel.d.ts +19 -0
  272. package/dist/esm/RenderingEngine/helpers/stats/RenderModesPanel.js +228 -0
  273. package/dist/esm/RenderingEngine/helpers/stats/StatsOverlay.d.ts +22 -3
  274. package/dist/esm/RenderingEngine/helpers/stats/StatsOverlay.js +192 -18
  275. package/dist/esm/RenderingEngine/helpers/stats/constants.d.ts +13 -1
  276. package/dist/esm/RenderingEngine/helpers/stats/constants.js +14 -1
  277. package/dist/esm/RenderingEngine/helpers/stats/enums.d.ts +2 -1
  278. package/dist/esm/RenderingEngine/helpers/stats/enums.js +1 -0
  279. package/dist/esm/RenderingEngine/helpers/stats/types.d.ts +1 -1
  280. package/dist/esm/RenderingEngine/helpers/supportsVolumeCompatibilityApi.d.ts +4 -0
  281. package/dist/esm/RenderingEngine/helpers/supportsVolumeCompatibilityApi.js +7 -0
  282. package/dist/esm/RenderingEngine/helpers/viewportTypeToViewportClass.d.ts +27 -4
  283. package/dist/esm/RenderingEngine/helpers/viewportTypeToViewportClass.js +126 -11
  284. package/dist/esm/RenderingEngine/helpers/viewportTypeUsesCustomRenderingPipeline.d.ts +3 -1
  285. package/dist/esm/RenderingEngine/helpers/viewportTypeUsesCustomRenderingPipeline.js +9 -2
  286. package/dist/esm/RenderingEngine/helpers/vtkCanvasCoordinateTransforms.d.ts +12 -0
  287. package/dist/esm/RenderingEngine/helpers/vtkCanvasCoordinateTransforms.js +57 -0
  288. package/dist/esm/RenderingEngine/index.d.ts +69 -1
  289. package/dist/esm/RenderingEngine/index.js +40 -1
  290. package/dist/esm/RenderingEngine/vtkClasses/extendedVtkCamera.d.ts +38 -0
  291. package/dist/esm/RenderingEngine/vtkClasses/extendedVtkCamera.js +35 -0
  292. package/dist/esm/RenderingEngine/vtkClasses/index.d.ts +3 -1
  293. package/dist/esm/RenderingEngine/vtkClasses/index.js +3 -1
  294. package/dist/esm/RenderingEngine/vtkClasses/vtkSharedImageResliceMapper.d.ts +7 -0
  295. package/dist/esm/RenderingEngine/vtkClasses/vtkSharedImageResliceMapper.js +21 -0
  296. package/dist/esm/RenderingEngine/vtkClasses/vtkSlabCamera.d.ts +2 -0
  297. package/dist/esm/RenderingEngine/vtkClasses/vtkSlabCamera.js +9 -2
  298. package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLImageResliceMapper.d.ts +7 -0
  299. package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLImageResliceMapper.js +420 -0
  300. package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLViewNodeFactory.js +7 -0
  301. package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLVolumeMapper.js +9 -3
  302. package/dist/esm/cache/cache.d.ts +1 -1
  303. package/dist/esm/cache/cache.js +4 -1
  304. package/dist/esm/cache/classes/BaseStreamingImageVolume.js +6 -6
  305. package/dist/esm/cache/classes/ImageVolume.js +5 -0
  306. package/dist/esm/enums/CalibrationTypes.d.ts +4 -12
  307. package/dist/esm/enums/CalibrationTypes.js +3 -13
  308. package/dist/esm/enums/MetadataModules.d.ts +3 -38
  309. package/dist/esm/enums/MetadataModules.js +2 -39
  310. package/dist/esm/enums/ViewportStatus.d.ts +1 -0
  311. package/dist/esm/enums/ViewportStatus.js +1 -0
  312. package/dist/esm/enums/ViewportType.d.ts +6 -1
  313. package/dist/esm/enums/ViewportType.js +5 -0
  314. package/dist/esm/enums/ViewportTypes.d.ts +5 -0
  315. package/dist/esm/enums/ViewportTypes.js +23 -0
  316. package/dist/esm/enums/index.d.ts +2 -1
  317. package/dist/esm/enums/index.js +2 -1
  318. package/dist/esm/getEnabledElement.js +4 -1
  319. package/dist/esm/index.d.ts +74 -3
  320. package/dist/esm/index.js +43 -3
  321. package/dist/esm/init.d.ts +2 -1
  322. package/dist/esm/init.js +14 -1
  323. package/dist/esm/loaders/ProgressiveRetrieveImages.js +11 -11
  324. package/dist/esm/loaders/cornerstoneMeshLoader.js +1 -1
  325. package/dist/esm/loaders/imageLoader.d.ts +2 -1
  326. package/dist/esm/loaders/imageLoader.js +25 -10
  327. package/dist/esm/loaders/volumeLoader.js +8 -4
  328. package/dist/esm/metaData.d.ts +2 -8
  329. package/dist/esm/metaData.js +2 -75
  330. package/dist/esm/types/CPUFallbackViewport.d.ts +2 -0
  331. package/dist/esm/types/Cornerstone3DConfig.d.ts +11 -0
  332. package/dist/esm/types/EventTypes.d.ts +3 -3
  333. package/dist/esm/types/IActor.d.ts +33 -0
  334. package/dist/esm/types/IActor.js +8 -0
  335. package/dist/esm/types/ICamera.d.ts +11 -3
  336. package/dist/esm/types/IEnabledElement.d.ts +1 -1
  337. package/dist/esm/types/IImage.d.ts +1 -0
  338. package/dist/esm/types/IImageCalibration.d.ts +2 -11
  339. package/dist/esm/types/IViewport.d.ts +11 -1
  340. package/dist/esm/types/IWSIViewport.d.ts +3 -2
  341. package/dist/esm/types/ImagePlaneModule.d.ts +3 -1
  342. package/dist/esm/types/MetadataModuleTypes.d.ts +1 -70
  343. package/dist/esm/types/ViewportInputOptions.d.ts +2 -0
  344. package/dist/esm/types/ViewportTypeRegistry.d.ts +33 -0
  345. package/dist/esm/types/ViewportTypeRegistry.js +0 -0
  346. package/dist/esm/types/index.d.ts +8 -3
  347. package/dist/esm/types/index.js +2 -0
  348. package/dist/esm/utilities/ECGUtilities.d.ts +83 -0
  349. package/dist/esm/utilities/ECGUtilities.js +228 -0
  350. package/dist/esm/utilities/FrameRange.js +3 -2
  351. package/dist/esm/utilities/RLEVoxelMap.js +9 -7
  352. package/dist/esm/utilities/VideoUtilities.d.ts +34 -0
  353. package/dist/esm/utilities/VideoUtilities.js +102 -0
  354. package/dist/esm/utilities/VoxelManager.d.ts +20 -1
  355. package/dist/esm/utilities/VoxelManager.js +162 -27
  356. package/dist/esm/utilities/WSIUtilities.d.ts +119 -0
  357. package/dist/esm/utilities/WSIUtilities.js +110 -0
  358. package/dist/esm/utilities/buildMetadata.js +23 -23
  359. package/dist/esm/utilities/calculateSpacingBetweenImageIds.js +6 -5
  360. package/dist/esm/utilities/calibratedPixelSpacingMetadataProvider.d.ts +5 -5
  361. package/dist/esm/utilities/calibratedPixelSpacingMetadataProvider.js +2 -15
  362. package/dist/esm/utilities/clonePoint3.d.ts +3 -0
  363. package/dist/esm/utilities/clonePoint3.js +3 -0
  364. package/dist/esm/utilities/colormap.d.ts +2 -1
  365. package/dist/esm/utilities/colormap.js +43 -4
  366. package/dist/esm/utilities/convertColorArrayToRgbString.d.ts +1 -0
  367. package/dist/esm/utilities/convertColorArrayToRgbString.js +5 -0
  368. package/dist/esm/utilities/deepClone.d.ts +1 -1
  369. package/dist/esm/utilities/deepClone.js +46 -17
  370. package/dist/esm/utilities/genericMetadataProvider.js +2 -1
  371. package/dist/esm/utilities/genericViewportDataSetMetadataProvider.d.ts +8 -0
  372. package/dist/esm/utilities/genericViewportDataSetMetadataProvider.js +23 -0
  373. package/dist/esm/utilities/getAcquisitionPlaneOrientation.d.ts +2 -0
  374. package/dist/esm/utilities/getAcquisitionPlaneOrientation.js +7 -0
  375. package/dist/esm/utilities/getClosestImageId.js +2 -1
  376. package/dist/esm/utilities/getClosestStackImageIndexForPoint.js +2 -1
  377. package/dist/esm/utilities/getNormalizedAspectRatio.d.ts +2 -0
  378. package/dist/esm/utilities/getNormalizedAspectRatio.js +12 -0
  379. package/dist/esm/utilities/getPixelSpacingInformation.d.ts +5 -13
  380. package/dist/esm/utilities/getPixelSpacingInformation.js +4 -93
  381. package/dist/esm/utilities/getScalingParameters.js +4 -3
  382. package/dist/esm/utilities/getVOIRangeFromWindowLevel.d.ts +3 -0
  383. package/dist/esm/utilities/getVOIRangeFromWindowLevel.js +18 -0
  384. package/dist/esm/utilities/getViewportImageIds.js +1 -1
  385. package/dist/esm/utilities/getViewportsWithImageURI.d.ts +2 -4
  386. package/dist/esm/utilities/getViewportsWithImageURI.js +4 -1
  387. package/dist/esm/utilities/getViewportsWithVolumeId.d.ts +2 -2
  388. package/dist/esm/utilities/getViewportsWithVolumeId.js +4 -1
  389. package/dist/esm/utilities/getViewportsWithVolumeURI.d.ts +2 -2
  390. package/dist/esm/utilities/getViewportsWithVolumeURI.js +4 -1
  391. package/dist/esm/utilities/getVolumeViewReferenceId.d.ts +6 -0
  392. package/dist/esm/utilities/getVolumeViewReferenceId.js +6 -0
  393. package/dist/esm/utilities/getVolumeViewportScrollInfo.d.ts +1 -1
  394. package/dist/esm/utilities/getVolumeViewportsContainingSameVolumes.d.ts +2 -2
  395. package/dist/esm/utilities/getVolumeViewportsContainingSameVolumes.js +4 -1
  396. package/dist/esm/utilities/hasOwn.d.ts +1 -0
  397. package/dist/esm/utilities/hasOwn.js +3 -0
  398. package/dist/esm/utilities/imageIdToURI.d.ts +3 -1
  399. package/dist/esm/utilities/imageIdToURI.js +2 -4
  400. package/dist/esm/utilities/index.d.ts +13 -1
  401. package/dist/esm/utilities/index.js +13 -1
  402. package/dist/esm/utilities/isEqual.d.ts +3 -5
  403. package/dist/esm/utilities/isEqual.js +3 -48
  404. package/dist/esm/utilities/isValidVolume.js +19 -4
  405. package/dist/esm/utilities/isVideoTransferSyntax.d.ts +3 -1
  406. package/dist/esm/utilities/isVideoTransferSyntax.js +3 -25
  407. package/dist/esm/utilities/loadImageToCanvas.js +2 -2
  408. package/dist/esm/utilities/logger.d.ts +3 -14
  409. package/dist/esm/utilities/logger.js +2 -23
  410. package/dist/esm/utilities/rotateToViewCoordinates.js +7 -7
  411. package/dist/esm/utilities/scroll.d.ts +1 -1
  412. package/dist/esm/utilities/scroll.js +2 -1
  413. package/dist/esm/utilities/sortImageIdsAndGetSpacing.js +4 -3
  414. package/dist/esm/utilities/splitImageIdsBy4DTags.d.ts +2 -10
  415. package/dist/esm/utilities/splitImageIdsBy4DTags.js +2 -312
  416. package/dist/esm/utilities/toNumber.d.ts +3 -1
  417. package/dist/esm/utilities/toNumber.js +3 -3
  418. package/dist/esm/utilities/viewportCapabilities.d.ts +19 -0
  419. package/dist/esm/utilities/viewportCapabilities.js +32 -0
  420. package/dist/esm/version.d.ts +1 -1
  421. package/dist/esm/version.js +1 -1
  422. package/dist/esm/webWorkerManager/webWorkerManager.js +3 -1
  423. package/package.json +16 -8
@@ -0,0 +1,1175 @@
1
+ import { Events, OrientationAxis, ViewportStatus, ViewportType, VOILUTFunctionType, } from '../../../enums';
2
+ import { ActorRenderMode } from '../../../types';
3
+ import cache from '../../../cache/cache';
4
+ import { deepClone } from '../../../utilities/deepClone';
5
+ import imageIdToURI from '../../../utilities/imageIdToURI';
6
+ import { getImageDataMetadata } from '../../../utilities/getImageDataMetadata';
7
+ import genericViewportDataSetMetadataProvider from '../../../utilities/genericViewportDataSetMetadataProvider';
8
+ import triggerEvent from '../../../utilities/triggerEvent';
9
+ import getMinMax from '../../../utilities/getMinMax';
10
+ import renderingEngineCache from '../../renderingEngineCache';
11
+ import { getCameraVectors } from '../../helpers/getCameraVectors';
12
+ import GenericViewport from '../GenericViewport';
13
+ import { getGenericViewportImageDataSet, isGenericViewportImageDataSet, } from '../genericViewportDataSetAccess';
14
+ import { DefaultPlanarDataProvider } from './DefaultPlanarDataProvider';
15
+ import { createPlanarRenderPathResolver } from './PlanarRenderPathResolver';
16
+ import { normalizePlanarOrientation, selectPlanarRenderPath, } from './planarRenderPathSelector';
17
+ import { clonePlanarOrientation } from './planarLegacyCompatibility';
18
+ import { normalizePlanarRotation } from './planarViewPresentation';
19
+ import { cloneDisplayArea, createDefaultPlanarViewState, normalizePlanarViewState, } from './planarViewState';
20
+ import { normalizePlanarScale, } from './planarCameraScale';
21
+ import { getPlanarProjectionPan, getPlanarProjectionScale, getPlanarProjectionSnapshot, getPlanarProjectionZoom, } from './planarProjectionAdapter';
22
+ import { getPlanarViewStateCanvasDimensions, resolvePlanarViewportView, } from './PlanarResolvedView';
23
+ import { createPlanarCpuVolumeSliceBasis, createPlanarVolumeSliceBasis, } from './planarSliceBasis';
24
+ import PlanarMountedData from './PlanarMountedData';
25
+ import PlanarViewReferenceController from './PlanarViewReferenceController';
26
+ class PlanarViewport extends GenericViewport {
27
+ static get useCustomRenderingPipeline() {
28
+ return false;
29
+ }
30
+ constructor(args) {
31
+ super(args);
32
+ this.type = ViewportType.PLANAR_NEXT;
33
+ this.suppressEvents = false;
34
+ this.resolvedViewCacheRevision = 0;
35
+ this.setDataRequestId = 0;
36
+ this.renderingEngineId = args.renderingEngineId;
37
+ this.canvas = args.canvas;
38
+ this.sWidth = args.sWidth;
39
+ this.sHeight = args.sHeight;
40
+ this.defaultOptions = cloneViewportOptions(args.defaultOptions || {});
41
+ this.options = cloneViewportOptions(this.defaultOptions);
42
+ this.canvasToWorld = this.canvasToWorld.bind(this);
43
+ this.worldToCanvas = this.worldToCanvas.bind(this);
44
+ this.dataProvider = args.dataProvider || new DefaultPlanarDataProvider();
45
+ this.renderPathResolver =
46
+ args.renderPathResolver || createPlanarRenderPathResolver();
47
+ this.mountedData = new PlanarMountedData({
48
+ getBinding: (dataId) => this.getBinding(dataId),
49
+ getFirstBinding: () => this.getFirstBinding(),
50
+ getBindings: () => this.bindings.entries(),
51
+ removeData: (dataId) => this.removeData(dataId),
52
+ });
53
+ this.viewReferences = new PlanarViewReferenceController({
54
+ viewportId: this.id,
55
+ viewportType: this.type,
56
+ getActiveDataId: () => this.mountedData.getActiveDataId(),
57
+ getBinding: (dataId) => this.getBinding(dataId),
58
+ getBindings: () => this.bindings.entries(),
59
+ getCurrentBinding: () => this.getCurrentBinding(),
60
+ getRenderContext: () => this.renderContext,
61
+ getResolvedView: (viewArgs) => this.getResolvedView(viewArgs),
62
+ getViewState: () => this.viewState,
63
+ getVolumeSliceWorldPointForImageIdIndex: (imageIdIndex) => this.getVolumeSliceWorldPointForImageIdIndex(imageIdIndex),
64
+ promoteSourceDataId: (dataId) => {
65
+ this.clearResolvedViewCache();
66
+ this.mountedData.promoteSourceDataId(dataId);
67
+ },
68
+ render: () => this.render(),
69
+ setImageIdIndex: (imageIdIndex) => this.setImageIdIndex(imageIdIndex),
70
+ setViewState: (viewStatePatch) => this.setViewState(viewStatePatch),
71
+ updateBindingsCameraState: () => this.updateBindingsCameraState(),
72
+ });
73
+ const renderingEngine = renderingEngineCache.get(this.renderingEngineId);
74
+ const renderer = renderingEngine?.getRenderer(this.id);
75
+ if (!renderer) {
76
+ throw new Error('[PlanarViewport] No renderer available. Ensure WebGL is supported and the rendering engine has been properly initialized.');
77
+ }
78
+ this.element.style.position = this.element.style.position || 'relative';
79
+ this.element.style.overflow = 'hidden';
80
+ this.element.style.background = this.element.style.background || '#000';
81
+ const vtkCanvas = args.canvas;
82
+ const viewportElement = this.element.querySelector('.viewport-element');
83
+ const cpuCanvas = document.createElement('canvas');
84
+ cpuCanvas.style.display = 'none';
85
+ cpuCanvas.style.height = '100%';
86
+ cpuCanvas.style.inset = '0';
87
+ cpuCanvas.style.pointerEvents = 'none';
88
+ cpuCanvas.style.position = 'absolute';
89
+ cpuCanvas.style.width = '100%';
90
+ cpuCanvas.style.zIndex = '0';
91
+ this.element.appendChild(cpuCanvas);
92
+ this.cpuCanvas = cpuCanvas;
93
+ if (viewportElement) {
94
+ viewportElement.style.position =
95
+ viewportElement.style.position || 'relative';
96
+ viewportElement.style.zIndex = '1';
97
+ }
98
+ const cpuCanvasContext = cpuCanvas.getContext('2d');
99
+ if (!cpuCanvasContext) {
100
+ throw new Error('[PlanarViewport] Failed to initialize CPU canvas');
101
+ }
102
+ renderer.getActiveCamera().setParallelProjection(true);
103
+ this.renderContext = {
104
+ viewportId: this.id,
105
+ renderingEngineId: this.renderingEngineId,
106
+ type: 'planar',
107
+ viewport: {
108
+ element: this.element,
109
+ getActiveDataId: () => this.mountedData.getActiveDataId(),
110
+ invalidateResolvedView: () => this.clearResolvedViewCache(),
111
+ getViewState: () => this.getViewState(),
112
+ isCurrentDataId: (dataId) => this.getCurrentBinding()?.data.id === dataId,
113
+ getOverlayActors: () => this.mountedData.getProjectedActorEntries('overlay'),
114
+ },
115
+ renderPath: {
116
+ renderMode: ActorRenderMode.VTK_IMAGE,
117
+ },
118
+ view: {},
119
+ display: {
120
+ requestRender: () => {
121
+ this.requestRenderingEngineRender();
122
+ },
123
+ renderNow: () => {
124
+ this.render();
125
+ },
126
+ setNeedsRender: () => {
127
+ this.setNeedsRender();
128
+ },
129
+ markRendered: () => {
130
+ this.setRendered();
131
+ },
132
+ activateRenderMode: (renderMode) => {
133
+ this.renderContext.renderPath.renderMode = renderMode;
134
+ this.setRenderModeVisibility(renderMode, cpuCanvas, vtkCanvas);
135
+ },
136
+ },
137
+ cpu: {
138
+ canvas: cpuCanvas,
139
+ composition: {
140
+ clearedRenderPassId: -1,
141
+ renderPassId: 0,
142
+ },
143
+ context: cpuCanvasContext,
144
+ },
145
+ vtk: {
146
+ renderer,
147
+ canvas: vtkCanvas,
148
+ },
149
+ };
150
+ this.viewState = normalizePlanarViewState({
151
+ ...createDefaultPlanarViewState(),
152
+ orientation: this.resolveRequestedOrientation(),
153
+ });
154
+ this.setRenderModeVisibility(ActorRenderMode.VTK_IMAGE, cpuCanvas, vtkCanvas);
155
+ this.element.setAttribute('data-viewport-uid', this.id);
156
+ this.element.setAttribute('data-rendering-engine-uid', this.renderingEngineId);
157
+ this.resize();
158
+ }
159
+ async setDisplaySets(...entries) {
160
+ const requestId = ++this.setDataRequestId;
161
+ const isStale = () => requestId !== this.setDataRequestId;
162
+ this.clearResolvedViewCache();
163
+ this.removeAllData();
164
+ for (const [index, { displaySetId, options = {} }] of entries.entries()) {
165
+ if (isStale()) {
166
+ return;
167
+ }
168
+ const role = options.role ?? (index === 0 ? 'source' : 'overlay');
169
+ await this.addDisplaySetInternal(displaySetId, {
170
+ ...options,
171
+ role,
172
+ }, isStale);
173
+ }
174
+ }
175
+ async addDisplaySet(displaySetId, options = {}) {
176
+ await this.addDisplaySetInternal(displaySetId, options);
177
+ this.clearResolvedViewCache();
178
+ }
179
+ async addDisplaySetInternal(dataId, options = {}, shouldIgnore) {
180
+ const role = this.mountedData.resolveBindingRole(options);
181
+ const resolvedOptions = {
182
+ ...options,
183
+ role,
184
+ };
185
+ const { data, resolvedOrientation, selectedPath } = await this.loadPlanarData(dataId, resolvedOptions);
186
+ if (shouldIgnore?.()) {
187
+ return;
188
+ }
189
+ if (role === 'source') {
190
+ this.mountedData.promoteSourceDataId(dataId);
191
+ this.applyLoadedPlanarViewState(resolvedOrientation, data, selectedPath);
192
+ }
193
+ const added = await this.addLoadedData(dataId, data, {
194
+ renderMode: selectedPath.renderMode,
195
+ role,
196
+ }, shouldIgnore);
197
+ if (!added) {
198
+ return;
199
+ }
200
+ this.clearResolvedViewCache();
201
+ this.setDefaultDataPresentation(dataId, {
202
+ visible: true,
203
+ });
204
+ }
205
+ removeData(dataId) {
206
+ this.clearResolvedViewCache();
207
+ super.removeData(dataId);
208
+ this.mountedData.handleRemovedData(dataId);
209
+ if (!this.isDestroyed && this.getCurrentBinding()) {
210
+ this.updateBindingsCameraState();
211
+ }
212
+ }
213
+ getActors() {
214
+ return this.mountedData.getActors();
215
+ }
216
+ getDefaultActor() {
217
+ return this.mountedData.getDefaultActor();
218
+ }
219
+ renderImageObject(image) {
220
+ const dataId = `image-object:${this.id}:${imageIdToURI(image.imageId)}`;
221
+ if (this.renderImageObjectDataId &&
222
+ this.renderImageObjectDataId !== dataId) {
223
+ genericViewportDataSetMetadataProvider.remove(this.renderImageObjectDataId);
224
+ }
225
+ this.renderImageObjectDataId = dataId;
226
+ genericViewportDataSetMetadataProvider.add(dataId, {
227
+ image,
228
+ imageIds: [image.imageId],
229
+ initialImageIdIndex: 0,
230
+ kind: 'planar',
231
+ });
232
+ return this.setDisplaySets({
233
+ displaySetId: dataId,
234
+ options: {
235
+ orientation: this.resolveRequestedOrientation(),
236
+ },
237
+ });
238
+ }
239
+ getCanvas() {
240
+ const rendering = this.getCurrentPlanarRendering();
241
+ if (rendering?.renderMode === ActorRenderMode.CPU_IMAGE ||
242
+ rendering?.renderMode === ActorRenderMode.CPU_VOLUME) {
243
+ return this.renderContext.cpu.canvas;
244
+ }
245
+ return this.renderContext.vtk.canvas;
246
+ }
247
+ async addImages(stackInputs) {
248
+ const rendering = this.getCurrentPlanarRendering();
249
+ if (rendering?.renderMode !== ActorRenderMode.VTK_IMAGE &&
250
+ rendering?.renderMode !== ActorRenderMode.VTK_VOLUME_SLICE &&
251
+ rendering?.renderMode !== ActorRenderMode.CPU_IMAGE) {
252
+ return;
253
+ }
254
+ for (const stackInput of stackInputs) {
255
+ const image = this.resolveStackInputImage(stackInput);
256
+ if (!image) {
257
+ continue;
258
+ }
259
+ const reference = this.resolveOverlayReference(stackInput, image);
260
+ const dataId = this.resolveOverlayDataId(stackInput, image, reference);
261
+ genericViewportDataSetMetadataProvider.add(dataId, {
262
+ image,
263
+ imageData: stackInput.imageData,
264
+ imageIds: [stackInput.imageId],
265
+ initialImageIdIndex: 0,
266
+ kind: 'planar',
267
+ reference,
268
+ useWorldCoordinateImageData: stackInput.useWorldCoordinateImageData === true,
269
+ });
270
+ await this.addDisplaySet(dataId, {
271
+ role: 'overlay',
272
+ });
273
+ const actorEntry = this.mountedData.getActorForDataId(dataId);
274
+ if (stackInput.callback && actorEntry) {
275
+ stackInput.callback({
276
+ imageActor: actorEntry.actor,
277
+ imageId: stackInput.imageId,
278
+ });
279
+ }
280
+ }
281
+ this.render();
282
+ }
283
+ getImageDataMetadata(image) {
284
+ return getImageDataMetadata(image);
285
+ }
286
+ getImageIds() {
287
+ const planarData = this.getPlanarData();
288
+ if (!planarData) {
289
+ return [];
290
+ }
291
+ return planarData.imageVolume?.imageIds || planarData.imageIds;
292
+ }
293
+ getVolumeId(viewRefSpecifier = {}) {
294
+ return (this.viewReferences.getVolumeId(viewRefSpecifier) ??
295
+ this.getPlanarData()?.volumeId);
296
+ }
297
+ getSourceDataId() {
298
+ return this.mountedData.getActiveDataId();
299
+ }
300
+ getDefaultVOIRange(dataId) {
301
+ return this.mountedData.getDefaultVOIRange(dataId);
302
+ }
303
+ getCurrentImageIdIndex() {
304
+ return this.getActiveImageIdIndex();
305
+ }
306
+ getCurrentImageId(viewRefSpecifier = {}) {
307
+ return this.viewReferences.getCurrentImageId(viewRefSpecifier);
308
+ }
309
+ getSliceIndex() {
310
+ return this.getCurrentImageIdIndex();
311
+ }
312
+ normalizeViewState(viewState) {
313
+ return normalizePlanarViewState(viewState);
314
+ }
315
+ setViewState(viewStatePatch) {
316
+ if (this.isDestroyed) {
317
+ return;
318
+ }
319
+ const previousCamera = this.getResolvedCameraForEvent();
320
+ if (Object.prototype.hasOwnProperty.call(viewStatePatch, 'displayArea')) {
321
+ this.options = {
322
+ ...this.options,
323
+ displayArea: cloneDisplayArea(viewStatePatch.displayArea),
324
+ };
325
+ }
326
+ const next = {
327
+ ...this.viewState,
328
+ ...viewStatePatch,
329
+ };
330
+ this.clearResolvedViewCache();
331
+ this.viewState = this.normalizeViewState(next);
332
+ this.modified(previousCamera);
333
+ }
334
+ setDisplaySetPresentation(displaySetIdOrProps, maybeProps) {
335
+ this.clearResolvedViewCache();
336
+ if (typeof displaySetIdOrProps === 'string') {
337
+ super.setDisplaySetPresentation(displaySetIdOrProps, maybeProps ?? {});
338
+ return;
339
+ }
340
+ super.setDisplaySetPresentation(displaySetIdOrProps);
341
+ }
342
+ setDataPresentationState(dataId, props) {
343
+ this.clearResolvedViewCache();
344
+ super.setDataPresentationState(dataId, props);
345
+ }
346
+ getRotation() {
347
+ return (this.getResolvedView()?.rotation ??
348
+ normalizePlanarRotation(this.viewState.rotation));
349
+ }
350
+ getAnchorWorld() {
351
+ const anchorWorld = this.viewState.anchorWorld;
352
+ return anchorWorld ? [...anchorWorld] : undefined;
353
+ }
354
+ setAnchorWorld(point) {
355
+ this.setViewState({
356
+ anchorWorld: point ? [...point] : undefined,
357
+ });
358
+ }
359
+ setOptions(options, immediate = false) {
360
+ this.options = cloneViewportOptions(options);
361
+ if (this.options.displayArea) {
362
+ this.setDisplayArea(this.options.displayArea, this.options.suppressEvents ?? false);
363
+ }
364
+ if (immediate) {
365
+ this.render();
366
+ }
367
+ }
368
+ reset(immediate = false) {
369
+ this.options = cloneViewportOptions(this.defaultOptions);
370
+ if (immediate) {
371
+ this.render();
372
+ }
373
+ }
374
+ getDisplayArea() {
375
+ return cloneDisplayArea(this.viewState.displayArea ?? this.options.displayArea);
376
+ }
377
+ setDisplayArea(displayArea, suppressEvents = false) {
378
+ const nextDisplayArea = cloneDisplayArea(displayArea);
379
+ if (!nextDisplayArea) {
380
+ return;
381
+ }
382
+ this.options = {
383
+ ...this.options,
384
+ displayArea: cloneDisplayArea(nextDisplayArea),
385
+ };
386
+ this.setViewState({
387
+ anchorCanvas: [0.5, 0.5],
388
+ anchorWorld: undefined,
389
+ displayArea: nextDisplayArea,
390
+ scale: [1, 1],
391
+ scaleMode: nextDisplayArea.scaleMode ?? 'fit',
392
+ });
393
+ if (!suppressEvents && !this.suppressEvents) {
394
+ triggerEvent(this.element, Events.DISPLAY_AREA_MODIFIED, {
395
+ viewportId: this.id,
396
+ displayArea: cloneDisplayArea(nextDisplayArea),
397
+ storeAsInitialCamera: nextDisplayArea.storeAsInitialCamera,
398
+ });
399
+ }
400
+ }
401
+ getZoom() {
402
+ return getPlanarProjectionZoom(this.getProjectionSnapshot());
403
+ }
404
+ getScale() {
405
+ return getPlanarProjectionScale(this.getProjectionSnapshot());
406
+ }
407
+ setZoom(zoom, canvasPoint) {
408
+ this.setScale(zoom, canvasPoint);
409
+ }
410
+ setScale(scale, canvasPoint) {
411
+ const resolvedView = this.getResolvedView();
412
+ const nextScale = normalizePlanarScale(scale);
413
+ if (resolvedView) {
414
+ this.applyResolvedViewState(resolvedView.withScale(nextScale, canvasPoint).state.viewState);
415
+ return;
416
+ }
417
+ if (canvasPoint) {
418
+ this.setScaleAtCanvasPoint(nextScale, canvasPoint);
419
+ return;
420
+ }
421
+ this.setViewState({
422
+ displayArea: undefined,
423
+ scale: nextScale,
424
+ scaleMode: 'fit',
425
+ });
426
+ }
427
+ getPan() {
428
+ return getPlanarProjectionPan(this.getProjectionSnapshot());
429
+ }
430
+ setPan(nextPan) {
431
+ const resolvedView = this.getResolvedView();
432
+ if (resolvedView) {
433
+ this.applyResolvedViewState(resolvedView.withPan(nextPan).state.viewState);
434
+ return;
435
+ }
436
+ this.applyResolvedViewState(this.getFallbackViewStateWithPan(this.viewState, nextPan));
437
+ }
438
+ setScaleAtCanvasPoint(scale, canvasPoint) {
439
+ const resolvedView = this.getResolvedView();
440
+ const nextScale = normalizePlanarScale(scale);
441
+ if (resolvedView) {
442
+ this.applyResolvedViewState(resolvedView.withScale(nextScale, canvasPoint).state.viewState);
443
+ return;
444
+ }
445
+ const worldPoint = this.buildFallbackCanvasToWorld(canvasPoint);
446
+ const { height: canvasHeight, width: canvasWidth } = this.getCurrentCanvasDimensions();
447
+ this.setViewState({
448
+ anchorWorld: worldPoint,
449
+ anchorCanvas: [
450
+ canvasPoint[0] / Math.max(canvasWidth, 1),
451
+ canvasPoint[1] / Math.max(canvasHeight, 1),
452
+ ],
453
+ displayArea: undefined,
454
+ scale: nextScale,
455
+ scaleMode: 'fit',
456
+ });
457
+ }
458
+ getViewState() {
459
+ return normalizePlanarViewState(this.viewState);
460
+ }
461
+ getResolvedView(args = {}) {
462
+ return this.resolveCachedViewState(this.viewState, args);
463
+ }
464
+ getRenderingEngine() {
465
+ return renderingEngineCache.get(this.renderingEngineId);
466
+ }
467
+ getViewReference(viewRefSpecifier = {}) {
468
+ return this.viewReferences.getViewReference(viewRefSpecifier);
469
+ }
470
+ getViewReferenceId(viewRefSpecifier = {}) {
471
+ return this.viewReferences.getViewReferenceId(viewRefSpecifier);
472
+ }
473
+ setViewReference(viewRef) {
474
+ this.viewReferences.setViewReference(viewRef);
475
+ }
476
+ getImageData() {
477
+ return this.getCurrentBinding()?.getImageData?.();
478
+ }
479
+ canvasToWorld(canvasPos) {
480
+ const resolvedView = this.getResolvedView();
481
+ if (!resolvedView) {
482
+ return this.buildFallbackCanvasToWorld(canvasPos);
483
+ }
484
+ return resolvedView.canvasToWorld(canvasPos);
485
+ }
486
+ worldToCanvas(worldPos) {
487
+ const resolvedView = this.getResolvedView();
488
+ if (!resolvedView) {
489
+ return this.buildFallbackWorldToCanvas(worldPos);
490
+ }
491
+ return resolvedView.worldToCanvas(worldPos);
492
+ }
493
+ getFrameOfReferenceUID() {
494
+ return this.viewReferences.getFrameOfReferenceUID();
495
+ }
496
+ hasImageId(imageId) {
497
+ return this.getImageIds().includes(imageId);
498
+ }
499
+ hasImageURI(imageURI) {
500
+ return this.getImageIds().some((imageId) => imageIdToURI(imageId) === imageURI);
501
+ }
502
+ hasVolumeId(volumeId) {
503
+ return this.getVolumeId() === volumeId;
504
+ }
505
+ hasVolumeURI(volumeURI) {
506
+ return String(this.getVolumeId() || '').includes(volumeURI);
507
+ }
508
+ isPlaneViewable(planeRestriction, options) {
509
+ return this.viewReferences.isPlaneViewable(planeRestriction, options);
510
+ }
511
+ isReferenceViewable(viewRef, options = {}) {
512
+ return super.isReferenceViewable(viewRef, options);
513
+ }
514
+ setImageIdIndex(imageIdIndex) {
515
+ const imageIds = this.getImageIds();
516
+ if (!imageIds.length) {
517
+ return Promise.reject(new Error('[PlanarViewport] Cannot set image index on empty stack'));
518
+ }
519
+ const clampedImageIdIndex = Math.min(Math.max(0, imageIdIndex), this.getMaxImageIdIndex());
520
+ const resolvedImageId = imageIds[clampedImageIdIndex] || imageIds[imageIds.length - 1];
521
+ const rendering = this.getCurrentPlanarRendering();
522
+ if (rendering?.renderMode === ActorRenderMode.CPU_VOLUME ||
523
+ rendering?.renderMode === ActorRenderMode.VTK_VOLUME_SLICE) {
524
+ const sliceWorldPoint = this.getVolumeSliceWorldPointForImageIdIndex(clampedImageIdIndex);
525
+ if (sliceWorldPoint) {
526
+ this.setViewState({
527
+ slice: {
528
+ kind: 'volumePoint',
529
+ sliceWorldPoint,
530
+ },
531
+ });
532
+ }
533
+ return Promise.resolve(resolvedImageId);
534
+ }
535
+ this.setViewState({
536
+ slice: {
537
+ kind: 'stackIndex',
538
+ imageIdIndex: clampedImageIdIndex,
539
+ },
540
+ });
541
+ return Promise.resolve(resolvedImageId);
542
+ }
543
+ scroll(delta) {
544
+ return this.setImageIdIndex(this.getActiveImageIdIndex() + delta);
545
+ }
546
+ setOrientation(orientation) {
547
+ this.setViewState({ orientation: this.resolveSetOrientation(orientation) });
548
+ }
549
+ resetViewState(options) {
550
+ const { resetPan = true, resetZoom = true, resetOrientation = true, resetFlip = true, } = options || {};
551
+ const nextCamera = {
552
+ rotation: 0,
553
+ };
554
+ if (resetPan) {
555
+ nextCamera.anchorWorld = undefined;
556
+ nextCamera.anchorCanvas = [0.5, 0.5];
557
+ }
558
+ if (resetZoom) {
559
+ nextCamera.scale = [1, 1];
560
+ nextCamera.scaleMode = 'fit';
561
+ }
562
+ if (resetOrientation) {
563
+ nextCamera.orientation = this.resolveRequestedOrientation();
564
+ }
565
+ if (resetFlip) {
566
+ nextCamera.flipHorizontal = false;
567
+ nextCamera.flipVertical = false;
568
+ }
569
+ this.setViewState(nextCamera);
570
+ this.triggerCameraResetEvent();
571
+ return true;
572
+ }
573
+ resetViewStateForResize() {
574
+ return this.resetViewState();
575
+ }
576
+ getUseCustomRenderingPipeline() {
577
+ return false;
578
+ }
579
+ setRendered() {
580
+ super.setRendered();
581
+ }
582
+ resize() {
583
+ if (this.isDestroyed) {
584
+ return;
585
+ }
586
+ this.clearResolvedViewCache();
587
+ const { clientHeight, clientWidth } = this.element;
588
+ const { canvas } = this.renderContext.cpu;
589
+ const devicePixelRatio = window.devicePixelRatio || 1;
590
+ const targetWidth = Math.round(clientWidth * devicePixelRatio);
591
+ const targetHeight = Math.round(clientHeight * devicePixelRatio);
592
+ if (canvas.width !== targetWidth || canvas.height !== targetHeight) {
593
+ canvas.width = targetWidth;
594
+ canvas.height = targetHeight;
595
+ }
596
+ this.resizeBindingsWithActiveFirst();
597
+ }
598
+ render() {
599
+ if (this.isDestroyed) {
600
+ return;
601
+ }
602
+ if (!this.bindings.size) {
603
+ this.viewportStatus = ViewportStatus.NO_DATA;
604
+ return;
605
+ }
606
+ this.setNeedsRender();
607
+ this.renderContext.cpu.composition.renderPassId += 1;
608
+ if (!this.renderBindings()) {
609
+ this.requestRenderingEngineRender();
610
+ }
611
+ }
612
+ onDestroy() {
613
+ this.clearResolvedViewCache();
614
+ if (this.renderImageObjectDataId) {
615
+ genericViewportDataSetMetadataProvider.remove(this.renderImageObjectDataId);
616
+ this.renderImageObjectDataId = undefined;
617
+ }
618
+ this.cpuCanvas?.remove();
619
+ this.cpuCanvas = undefined;
620
+ this.mountedData.clearActiveDataId();
621
+ this.renderContext.view.activeSourceICamera = undefined;
622
+ }
623
+ modified(previousCamera) {
624
+ if (this.isDestroyed) {
625
+ return;
626
+ }
627
+ this.updateBindingsCameraState();
628
+ this.render();
629
+ if (previousCamera) {
630
+ this.triggerCameraModifiedEvent(previousCamera);
631
+ }
632
+ }
633
+ renderBindings() {
634
+ if (this.isDestroyed) {
635
+ return false;
636
+ }
637
+ let renderedByAdapter = false;
638
+ const sourceBinding = this.getCurrentBinding();
639
+ sourceBinding?.render?.();
640
+ renderedByAdapter = renderedByAdapter || Boolean(sourceBinding?.render);
641
+ for (const binding of this.bindings.values()) {
642
+ if (binding === sourceBinding) {
643
+ continue;
644
+ }
645
+ binding.render?.();
646
+ renderedByAdapter = renderedByAdapter || Boolean(binding.render);
647
+ }
648
+ return renderedByAdapter;
649
+ }
650
+ requestRenderingEngineRender() {
651
+ const renderingEngine = renderingEngineCache.get(this.renderingEngineId);
652
+ if (renderingEngine) {
653
+ renderingEngine.renderViewport(this.id);
654
+ }
655
+ }
656
+ setRenderModeVisibility(renderMode, cpuCanvas, vtkCanvas) {
657
+ const useCPUCanvas = renderMode === ActorRenderMode.CPU_IMAGE ||
658
+ renderMode === ActorRenderMode.CPU_VOLUME;
659
+ const viewportElement = this.element.querySelector('.viewport-element');
660
+ cpuCanvas.style.display = useCPUCanvas ? '' : 'none';
661
+ cpuCanvas.style.pointerEvents = useCPUCanvas ? 'auto' : 'none';
662
+ vtkCanvas.style.display = useCPUCanvas ? 'none' : '';
663
+ if (viewportElement) {
664
+ viewportElement.style.pointerEvents = useCPUCanvas ? 'none' : '';
665
+ }
666
+ }
667
+ createLegacyCompatibilityHost() {
668
+ return {
669
+ getElement: () => this.element,
670
+ getViewportId: () => this.id,
671
+ getRequestedOrientation: () => this.resolveRequestedOrientation(),
672
+ prepareVolumeCompatibilityCamera: () => {
673
+ this.viewState = this.normalizeViewState({
674
+ ...this.viewState,
675
+ orientation: this.resolveRequestedOrientation(),
676
+ });
677
+ },
678
+ setDisplaySets: (...entries) => this.setDisplaySets(...entries),
679
+ setImageIdIndex: (imageIdIndex) => this.setImageIdIndex(imageIdIndex),
680
+ getCurrentImageId: () => this.getCurrentImageId(),
681
+ render: () => this.render(),
682
+ removeBindingsExcept: (keepDataIds) => this.removeBindingsExcept(keepDataIds),
683
+ setCameraOrientation: (orientation) => {
684
+ this.setViewState({
685
+ orientation: this.resolveSetOrientation(orientation),
686
+ });
687
+ },
688
+ setDataPresentationState: (dataId, presentation) => {
689
+ this.setDataPresentationState(dataId, presentation);
690
+ },
691
+ setDisplaySetPresentation: (displaySetId, presentation) => {
692
+ this.setDisplaySetPresentation(displaySetId, presentation);
693
+ },
694
+ getDisplaySetPresentation: (dataId) => this.getDisplaySetPresentation(dataId),
695
+ getCameraOrientation: () => this.viewState.orientation,
696
+ getCurrentPlanarRendering: () => this.getCurrentPlanarRendering(),
697
+ getActiveDataId: () => this.mountedData.getActiveDataId(),
698
+ getFirstBoundDataId: () => this.mountedData.getFirstBoundDataId(),
699
+ findDataIdByVolumeId: (volumeId) => this.mountedData.findDataIdByVolumeId(volumeId),
700
+ getBindingActor: (dataId) => this.mountedData.getBindingActor(dataId),
701
+ getDefaultVOIRange: (dataId) => this.getDefaultVOIRange(dataId),
702
+ getImageCount: () => this.getImageIds().length,
703
+ getMaxImageIdIndex: () => this.getMaxImageIdIndex(),
704
+ };
705
+ }
706
+ updateBindingsCameraState() {
707
+ const currentBinding = this.getCurrentBinding();
708
+ if (currentBinding) {
709
+ currentBinding.applyViewState(this.viewState);
710
+ }
711
+ else {
712
+ this.renderContext.view.activeSourceICamera = undefined;
713
+ }
714
+ this.forEachBinding((binding) => {
715
+ if (binding !== currentBinding) {
716
+ binding.applyViewState(this.viewState);
717
+ }
718
+ });
719
+ }
720
+ resizeBindingsWithActiveFirst() {
721
+ const currentBinding = this.getCurrentBinding();
722
+ currentBinding?.resize?.();
723
+ this.forEachBinding((binding) => {
724
+ if (binding !== currentBinding) {
725
+ binding.resize?.();
726
+ }
727
+ });
728
+ }
729
+ getActiveImageIdIndex() {
730
+ const binding = this.getCurrentBinding();
731
+ const currentImageIdIndex = binding?.rendering?.currentImageIdIndex;
732
+ if (typeof currentImageIdIndex === 'number') {
733
+ return currentImageIdIndex;
734
+ }
735
+ return this.viewState.slice?.kind === 'stackIndex'
736
+ ? this.viewState.slice.imageIdIndex
737
+ : 0;
738
+ }
739
+ getMaxImageIdIndex() {
740
+ const binding = this.getCurrentBinding();
741
+ const maxImageIdIndex = binding?.rendering?.maxImageIdIndex;
742
+ if (typeof maxImageIdIndex === 'number') {
743
+ return maxImageIdIndex;
744
+ }
745
+ return Math.max(0, this.getImageIds().length - 1);
746
+ }
747
+ getVolumeSliceWorldPointForImageIdIndex(imageIdIndex) {
748
+ const sliceBasis = this.getResolvedView({
749
+ sliceIndex: imageIdIndex,
750
+ })?.getSliceBasis();
751
+ const sliceWorldPoint = sliceBasis?.sliceCenterWorld;
752
+ return sliceWorldPoint ? [...sliceWorldPoint] : undefined;
753
+ }
754
+ getPlanarData() {
755
+ return this.getCurrentPlanarData();
756
+ }
757
+ getCurrentBinding() {
758
+ return this.mountedData.getCurrentBinding();
759
+ }
760
+ getDataSet(dataId) {
761
+ const dataSet = getGenericViewportImageDataSet(dataId);
762
+ if (!isPlanarRegisteredDataSet(dataSet)) {
763
+ return;
764
+ }
765
+ return dataSet;
766
+ }
767
+ async loadPlanarData(dataId, options) {
768
+ const dataSet = this.getDataSet(dataId);
769
+ if (!dataSet) {
770
+ throw new Error(`[PlanarViewport] No registered planar dataset metadata for ${dataId}`);
771
+ }
772
+ const resolvedOrientation = this.resolveRequestedOrientation(options.orientation);
773
+ const selectedPath = selectPlanarRenderPath(dataSet, {
774
+ orientation: resolvedOrientation,
775
+ cpuThresholds: options.cpuThresholds,
776
+ });
777
+ const data = await this.dataProvider.load(dataId, {
778
+ acquisitionOrientation: selectedPath.acquisitionOrientation,
779
+ orientation: resolvedOrientation,
780
+ renderMode: selectedPath.renderMode,
781
+ volumeId: selectedPath.volumeId,
782
+ });
783
+ return {
784
+ data,
785
+ selectedPath,
786
+ resolvedOrientation,
787
+ };
788
+ }
789
+ applyLoadedPlanarViewState(resolvedOrientation, planarData, selectedPath) {
790
+ const isVolumePath = selectedPath.renderMode === ActorRenderMode.CPU_VOLUME ||
791
+ selectedPath.renderMode === ActorRenderMode.VTK_VOLUME_SLICE;
792
+ const orientation = normalizePlanarOrientation(resolvedOrientation, selectedPath.acquisitionOrientation);
793
+ const slice = isVolumePath
794
+ ? this.createInitialVolumeSliceState(planarData, selectedPath.renderMode, orientation)
795
+ : {
796
+ kind: 'stackIndex',
797
+ imageIdIndex: planarData.initialImageIdIndex,
798
+ };
799
+ this.clearResolvedViewCache();
800
+ this.viewState = this.normalizeViewState({
801
+ ...this.viewState,
802
+ slice,
803
+ orientation,
804
+ });
805
+ }
806
+ createInitialVolumeSliceState(planarData, renderMode, orientation) {
807
+ if (!planarData.imageVolume) {
808
+ return;
809
+ }
810
+ const { height, width } = this.getCurrentCanvasDimensions();
811
+ const createSliceBasis = renderMode === ActorRenderMode.CPU_VOLUME
812
+ ? createPlanarCpuVolumeSliceBasis
813
+ : createPlanarVolumeSliceBasis;
814
+ const initialImageIdIndex = orientation === OrientationAxis.ACQUISITION
815
+ ? planarData.initialImageIdIndex
816
+ : undefined;
817
+ const { sliceBasis } = createSliceBasis({
818
+ canvasHeight: height,
819
+ canvasWidth: width,
820
+ imageIdIndex: initialImageIdIndex,
821
+ imageVolume: planarData.imageVolume,
822
+ orientation,
823
+ });
824
+ return {
825
+ kind: 'volumePoint',
826
+ sliceWorldPoint: [...sliceBasis.sliceCenterWorld],
827
+ };
828
+ }
829
+ resolveRequestedOrientation(orientation) {
830
+ return (clonePlanarOrientation((orientation ??
831
+ this.defaultOptions
832
+ .orientation) ||
833
+ OrientationAxis.ACQUISITION) || OrientationAxis.ACQUISITION);
834
+ }
835
+ resolveSetOrientation(orientation) {
836
+ if (typeof orientation !== 'string') {
837
+ return clonePlanarOrientation(orientation) || OrientationAxis.ACQUISITION;
838
+ }
839
+ if (!isReformatOrientation(orientation)) {
840
+ return orientation;
841
+ }
842
+ const baseOrientation = getBaseReformatOrientation(orientation);
843
+ const cameraVectors = getCameraVectors({
844
+ getActors: () => this.getActors(),
845
+ getCamera: () => this.getCameraForEvent(),
846
+ getCurrentImageId: () => this.getCurrentImageId(),
847
+ getImageIds: () => this.getImageIds(),
848
+ type: ViewportType.ORTHOGRAPHIC,
849
+ }, {
850
+ useViewportNormal: true,
851
+ ...(baseOrientation ? { orientation: baseOrientation } : {}),
852
+ });
853
+ if (cameraVectors) {
854
+ return {
855
+ viewPlaneNormal: cameraVectors.viewPlaneNormal,
856
+ viewUp: cameraVectors.viewUp,
857
+ };
858
+ }
859
+ return baseOrientation || this.viewState.orientation;
860
+ }
861
+ removeBindingsExcept(keepDataIds) {
862
+ this.mountedData.removeBindingsExcept(keepDataIds);
863
+ }
864
+ resolveStackInputImage(stackInput) {
865
+ const cachedImage = cache.getImage(stackInput.imageId);
866
+ if (cachedImage) {
867
+ return cachedImage;
868
+ }
869
+ if (!stackInput.imageData) {
870
+ return;
871
+ }
872
+ return createPlanarImageFromVTKImageData(stackInput.imageId, stackInput.imageData);
873
+ }
874
+ resolveOverlayReference(stackInput, image) {
875
+ const reference = stackInput.reference;
876
+ if (reference && typeof reference.kind === 'string') {
877
+ return reference;
878
+ }
879
+ return {
880
+ kind: 'image',
881
+ imageId: image.imageId,
882
+ };
883
+ }
884
+ resolveOverlayDataId(stackInput, image, reference) {
885
+ const explicitDataId = stackInput.dataId;
886
+ if (typeof explicitDataId === 'string') {
887
+ return explicitDataId;
888
+ }
889
+ if (reference.kind === 'segmentation' &&
890
+ typeof reference.representationUID === 'string') {
891
+ return reference.representationUID;
892
+ }
893
+ const baseDataId = image.imageId;
894
+ if (!this.mountedData.hasBinding(baseDataId)) {
895
+ return baseDataId;
896
+ }
897
+ return `overlay:${baseDataId}`;
898
+ }
899
+ findBindingDataIdByActorEntryUID(actorEntryUID) {
900
+ return this.mountedData.findBindingDataIdByActorEntryUID(actorEntryUID);
901
+ }
902
+ findDataIdByVolumeId(volumeId) {
903
+ return this.mountedData.findDataIdByVolumeId(volumeId);
904
+ }
905
+ getCurrentPlanarRendering() {
906
+ return this.getCurrentBinding()?.rendering;
907
+ }
908
+ resolveViewState(viewState, args = {}) {
909
+ const data = this.getPlanarData();
910
+ const rendering = this.getCurrentPlanarRendering();
911
+ return resolvePlanarViewportView({
912
+ viewState,
913
+ data,
914
+ frameOfReferenceUID: args.frameOfReferenceUID ?? this.resolveFrameOfReferenceUID(),
915
+ renderContext: this.renderContext,
916
+ rendering,
917
+ sliceIndex: args.sliceIndex,
918
+ });
919
+ }
920
+ getProjectionSnapshot() {
921
+ const { height: canvasHeight, width: canvasWidth } = this.getCurrentCanvasDimensions();
922
+ const snapshot = getPlanarProjectionSnapshot({
923
+ viewport: this,
924
+ canvasHeight,
925
+ canvasWidth,
926
+ displayArea: this.getDisplayArea(),
927
+ frameOfReferenceUID: this.resolveFrameOfReferenceUID(),
928
+ resolvedView: this.getResolvedView(),
929
+ resolveViewState: (viewState) => this.resolveViewState(viewState),
930
+ viewState: this.viewState,
931
+ });
932
+ if (!snapshot) {
933
+ throw new Error('[PlanarViewport] Unable to resolve projection snapshot');
934
+ }
935
+ return snapshot;
936
+ }
937
+ resolveCachedViewState(viewState, args = {}) {
938
+ if (args.frameOfReferenceUID || typeof args.sliceIndex === 'number') {
939
+ return this.resolveViewState(viewState, args);
940
+ }
941
+ const data = this.getPlanarData();
942
+ const rendering = this.getCurrentPlanarRendering();
943
+ const activeDataId = this.mountedData.getActiveDataId();
944
+ const frameOfReferenceUID = this.resolveFrameOfReferenceUID();
945
+ const cache = this.resolvedViewCache;
946
+ if (!rendering) {
947
+ return this.resolveViewState(viewState, args);
948
+ }
949
+ const { canvasHeight, canvasWidth } = getPlanarViewStateCanvasDimensions({
950
+ renderContext: this.renderContext,
951
+ rendering,
952
+ });
953
+ if (cache &&
954
+ cache.activeDataId === activeDataId &&
955
+ cache.viewState === viewState &&
956
+ cache.data === data &&
957
+ cache.rendering === rendering &&
958
+ cache.frameOfReferenceUID === frameOfReferenceUID &&
959
+ cache.canvasHeight === canvasHeight &&
960
+ cache.canvasWidth === canvasWidth &&
961
+ cache.revision === this.resolvedViewCacheRevision) {
962
+ return cache.resolvedView;
963
+ }
964
+ const resolvedView = resolvePlanarViewportView({
965
+ viewState,
966
+ data,
967
+ frameOfReferenceUID,
968
+ renderContext: this.renderContext,
969
+ rendering,
970
+ canvasDimensions: {
971
+ canvasHeight,
972
+ canvasWidth,
973
+ },
974
+ });
975
+ if (resolvedView) {
976
+ this.resolvedViewCache = {
977
+ activeDataId,
978
+ canvasHeight,
979
+ canvasWidth,
980
+ data,
981
+ frameOfReferenceUID,
982
+ rendering,
983
+ resolvedView,
984
+ revision: this.resolvedViewCacheRevision,
985
+ viewState,
986
+ };
987
+ }
988
+ return resolvedView;
989
+ }
990
+ clearResolvedViewCache() {
991
+ this.resolvedViewCache = undefined;
992
+ this.resolvedViewCacheRevision += 1;
993
+ }
994
+ resolveFrameOfReferenceUID() {
995
+ return this.viewReferences.resolveFrameOfReferenceUID();
996
+ }
997
+ getFallbackPan(viewState = this.viewState) {
998
+ const anchorCanvas = viewState.anchorCanvas ?? [0.5, 0.5];
999
+ const anchorWorld = viewState.anchorWorld ?? [0, 0, 0];
1000
+ const { height, width } = this.getCurrentCanvasDimensions();
1001
+ const [scaleX, scaleY] = normalizePlanarScale(viewState.scale);
1002
+ return [
1003
+ (0 - anchorWorld[0]) * scaleX + (anchorCanvas[0] - 0.5) * width,
1004
+ (0 - anchorWorld[1]) * scaleY + (anchorCanvas[1] - 0.5) * height,
1005
+ ];
1006
+ }
1007
+ getFallbackViewStateWithPan(viewState, nextPan) {
1008
+ const currentPan = this.getFallbackPan(viewState);
1009
+ const [ax, ay] = viewState.anchorCanvas ?? [0.5, 0.5];
1010
+ const { height: canvasHeight, width: canvasWidth } = this.getCurrentCanvasDimensions();
1011
+ const deltaX = nextPan[0] - currentPan[0];
1012
+ const deltaY = nextPan[1] - currentPan[1];
1013
+ return this.normalizeViewState({
1014
+ ...viewState,
1015
+ anchorCanvas: [
1016
+ ax + deltaX / Math.max(canvasWidth, 1),
1017
+ ay + deltaY / Math.max(canvasHeight, 1),
1018
+ ],
1019
+ displayArea: undefined,
1020
+ });
1021
+ }
1022
+ buildFallbackCanvasToWorld(canvasPos) {
1023
+ const anchorCanvas = this.viewState.anchorCanvas ?? [0.5, 0.5];
1024
+ const anchorWorld = this.viewState.anchorWorld ?? [0, 0, 0];
1025
+ const { height, width } = this.getCurrentCanvasDimensions();
1026
+ const [scaleX, scaleY] = normalizePlanarScale(this.viewState.scale);
1027
+ return [
1028
+ anchorWorld[0] + (canvasPos[0] - anchorCanvas[0] * width) / scaleX,
1029
+ anchorWorld[1] + (canvasPos[1] - anchorCanvas[1] * height) / scaleY,
1030
+ anchorWorld[2],
1031
+ ];
1032
+ }
1033
+ buildFallbackWorldToCanvas(worldPos) {
1034
+ const anchorCanvas = this.viewState.anchorCanvas ?? [0.5, 0.5];
1035
+ const anchorWorld = this.viewState.anchorWorld ?? [0, 0, 0];
1036
+ const { height, width } = this.getCurrentCanvasDimensions();
1037
+ const [scaleX, scaleY] = normalizePlanarScale(this.viewState.scale);
1038
+ return [
1039
+ (worldPos[0] - anchorWorld[0]) * scaleX + anchorCanvas[0] * width,
1040
+ (worldPos[1] - anchorWorld[1]) * scaleY + anchorCanvas[1] * height,
1041
+ ];
1042
+ }
1043
+ applyResolvedViewState(nextCamera) {
1044
+ const previousCamera = this.getResolvedCameraForEvent();
1045
+ this.clearResolvedViewCache();
1046
+ this.viewState = this.normalizeViewState(nextCamera);
1047
+ this.modified(previousCamera);
1048
+ }
1049
+ getResolvedCameraForEvent() {
1050
+ return this.getResolvedView()?.toICamera();
1051
+ }
1052
+ getCameraForEvent() {
1053
+ const resolvedView = this.getResolvedView();
1054
+ if (resolvedView) {
1055
+ return resolvedView.toICamera();
1056
+ }
1057
+ return this.getViewState();
1058
+ }
1059
+ getCurrentPresentation() {
1060
+ const resolvedView = this.getResolvedView();
1061
+ if (!resolvedView) {
1062
+ return;
1063
+ }
1064
+ return {
1065
+ flipHorizontal: resolvedView.state.viewState.flipHorizontal === true,
1066
+ flipVertical: resolvedView.state.viewState.flipVertical === true,
1067
+ pan: resolvedView.pan,
1068
+ rotation: resolvedView.rotation,
1069
+ scale: resolvedView.scale,
1070
+ zoom: resolvedView.zoom,
1071
+ };
1072
+ }
1073
+ getCurrentCanvasDimensions() {
1074
+ const rendering = this.getCurrentPlanarRendering();
1075
+ if (rendering) {
1076
+ const { canvasHeight, canvasWidth } = getPlanarViewStateCanvasDimensions({
1077
+ renderContext: this.renderContext,
1078
+ rendering,
1079
+ });
1080
+ return {
1081
+ width: canvasWidth || this.element.clientWidth,
1082
+ height: canvasHeight || this.element.clientHeight,
1083
+ };
1084
+ }
1085
+ return {
1086
+ width: this.element.clientWidth,
1087
+ height: this.element.clientHeight,
1088
+ };
1089
+ }
1090
+ getCurrentPlanarData() {
1091
+ return this.getCurrentBinding()?.data;
1092
+ }
1093
+ getReferenceViewContexts() {
1094
+ return this.viewReferences.getReferenceViewContexts(super.getReferenceViewContexts());
1095
+ }
1096
+ }
1097
+ function cloneViewportOptions(options = {}) {
1098
+ return deepClone(options);
1099
+ }
1100
+ function getBaseReformatOrientation(orientation) {
1101
+ switch (orientation) {
1102
+ case OrientationAxis.AXIAL_REFORMAT:
1103
+ return OrientationAxis.AXIAL;
1104
+ case OrientationAxis.CORONAL_REFORMAT:
1105
+ return OrientationAxis.CORONAL;
1106
+ case OrientationAxis.SAGITTAL_REFORMAT:
1107
+ return OrientationAxis.SAGITTAL;
1108
+ default:
1109
+ return;
1110
+ }
1111
+ }
1112
+ function isReformatOrientation(orientation) {
1113
+ return (orientation === OrientationAxis.REFORMAT ||
1114
+ orientation === OrientationAxis.AXIAL_REFORMAT ||
1115
+ orientation === OrientationAxis.CORONAL_REFORMAT ||
1116
+ orientation === OrientationAxis.SAGITTAL_REFORMAT);
1117
+ }
1118
+ function createPlanarImageFromVTKImageData(imageId, imageData) {
1119
+ const dimensions = imageData.getDimensions();
1120
+ const spacing = imageData.getSpacing();
1121
+ const columns = dimensions[0] ?? 1;
1122
+ const rows = dimensions[1] ?? 1;
1123
+ const columnPixelSpacing = spacing[0] ?? 1;
1124
+ const rowPixelSpacing = spacing[1] ?? 1;
1125
+ const scalars = imageData.getPointData().getScalars();
1126
+ const scalarData = scalars.getData();
1127
+ const scalarRange = scalarData.length
1128
+ ? getMinMax(scalarData)
1129
+ : { min: 0, max: 1 };
1130
+ const { min, max } = Number.isFinite(scalarRange.min) && Number.isFinite(scalarRange.max)
1131
+ ? scalarRange
1132
+ : { min: 0, max: 1 };
1133
+ const windowWidth = Math.max(max - min, 1);
1134
+ const dataType = scalarData.constructor?.name || 'Uint8Array';
1135
+ return {
1136
+ imageId,
1137
+ minPixelValue: min,
1138
+ maxPixelValue: max,
1139
+ slope: 1,
1140
+ intercept: 0,
1141
+ windowCenter: min + windowWidth / 2,
1142
+ windowWidth,
1143
+ voiLUTFunction: VOILUTFunctionType.LINEAR,
1144
+ getPixelData: () => scalarData,
1145
+ getCanvas: () => {
1146
+ const canvas = document.createElement('canvas');
1147
+ canvas.width = columns;
1148
+ canvas.height = rows;
1149
+ return canvas;
1150
+ },
1151
+ rows,
1152
+ columns,
1153
+ height: rows,
1154
+ width: columns,
1155
+ color: false,
1156
+ rgba: false,
1157
+ numberOfComponents: scalars.getNumberOfComponents?.() ?? 1,
1158
+ columnPixelSpacing,
1159
+ rowPixelSpacing,
1160
+ invert: false,
1161
+ photometricInterpretation: 'MONOCHROME2',
1162
+ sizeInBytes: scalarData.byteLength ??
1163
+ scalarData.length * 4,
1164
+ dataType: dataType,
1165
+ };
1166
+ }
1167
+ function isPlanarRegisteredDataSet(value) {
1168
+ if (!isGenericViewportImageDataSet(value) || value.imageIds.length === 0) {
1169
+ return false;
1170
+ }
1171
+ return ((value.initialImageIdIndex === undefined ||
1172
+ typeof value.initialImageIdIndex === 'number') &&
1173
+ (value.volumeId === undefined || typeof value.volumeId === 'string'));
1174
+ }
1175
+ export default PlanarViewport;