@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
@@ -1,17 +1,25 @@
1
+ import renderingEngineCache from '../../renderingEngineCache';
2
+ import { RenderModesPanel, } from './RenderModesPanel';
1
3
  import { StatsPanel } from './StatsPanel';
2
4
  import { PanelType } from './enums';
3
5
  import { STATS_CONFIG, PANEL_CONFIGS, CONVERSION } from './constants';
4
6
  export class StatsOverlay {
5
- static { this.instance = null; }
6
7
  constructor() {
7
8
  this.dom = null;
8
- this.currentMode = 0;
9
9
  this.startTime = 0;
10
10
  this.lastUpdateTime = 0;
11
11
  this.frameCount = 0;
12
12
  this.panels = new Map();
13
+ this.metricsColumn = null;
14
+ this.bindingsColumn = null;
13
15
  this.animationFrameId = null;
14
16
  this.isSetup = false;
17
+ this.dragPointerId = null;
18
+ this.dragOffsetX = 0;
19
+ this.dragOffsetY = 0;
20
+ this.handlePointerDown = (event) => this.onPointerDown(event);
21
+ this.handlePointerMove = (event) => this.onPointerMove(event);
22
+ this.handlePointerUp = (event) => this.onPointerUp(event);
15
23
  }
16
24
  static getInstance() {
17
25
  if (!StatsOverlay.instance) {
@@ -28,8 +36,9 @@ export class StatsOverlay {
28
36
  this.startTime = performance.now();
29
37
  this.lastUpdateTime = this.startTime;
30
38
  this.initializePanels();
31
- this.showPanel(PanelType.FPS);
32
39
  this.applyOverlayStyles();
40
+ this.restorePosition();
41
+ this.attachDragHandlers();
33
42
  document.body.appendChild(this.dom);
34
43
  this.startLoop();
35
44
  this.isSetup = true;
@@ -40,37 +49,29 @@ export class StatsOverlay {
40
49
  }
41
50
  cleanup() {
42
51
  this.stopLoop();
52
+ this.detachDragHandlers();
43
53
  if (this.dom && this.dom.parentNode) {
44
54
  this.dom.parentNode.removeChild(this.dom);
45
55
  }
46
56
  this.dom = null;
57
+ this.metricsColumn = null;
58
+ this.bindingsColumn = null;
47
59
  this.panels.clear();
48
60
  this.isSetup = false;
49
61
  }
50
- showPanel(panelType) {
51
- const children = Array.from(this.dom.children);
52
- children.forEach((child, index) => {
53
- child.style.display = index === panelType ? 'block' : 'none';
54
- });
55
- this.currentMode = panelType;
62
+ showPanel(_panelType) {
56
63
  }
57
64
  update() {
58
65
  this.startTime = this.updateStats();
59
66
  }
60
67
  createOverlayElement() {
61
- const element = document.createElement('div');
62
- element.addEventListener('click', this.handleClick.bind(this), false);
63
- return element;
68
+ return document.createElement('div');
64
69
  }
65
70
  applyOverlayStyles() {
66
71
  Object.assign(this.dom.style, STATS_CONFIG.OVERLAY_STYLES);
67
72
  }
68
- handleClick(event) {
69
- event.preventDefault();
70
- const panelCount = this.dom.children.length;
71
- this.showPanel((this.currentMode + 1) % panelCount);
72
- }
73
73
  initializePanels() {
74
+ this.initializePanelColumns();
74
75
  const fpsPanel = new StatsPanel(PANEL_CONFIGS[PanelType.FPS].name, PANEL_CONFIGS[PanelType.FPS].foregroundColor, PANEL_CONFIGS[PanelType.FPS].backgroundColor);
75
76
  this.addPanel(PanelType.FPS, fpsPanel);
76
77
  const msPanel = new StatsPanel(PANEL_CONFIGS[PanelType.MS].name, PANEL_CONFIGS[PanelType.MS].foregroundColor, PANEL_CONFIGS[PanelType.MS].backgroundColor);
@@ -79,13 +80,34 @@ export class StatsOverlay {
79
80
  const memPanel = new StatsPanel(PANEL_CONFIGS[PanelType.MEMORY].name, PANEL_CONFIGS[PanelType.MEMORY].foregroundColor, PANEL_CONFIGS[PanelType.MEMORY].backgroundColor);
80
81
  this.addPanel(PanelType.MEMORY, memPanel);
81
82
  }
83
+ this.addPanel(PanelType.RENDER_MODES, new RenderModesPanel());
84
+ }
85
+ initializePanelColumns() {
86
+ this.metricsColumn = document.createElement('div');
87
+ this.metricsColumn.style.cssText = `
88
+ display:flex;
89
+ flex-direction:column;
90
+ flex:0 0 auto;
91
+ `;
92
+ this.bindingsColumn = document.createElement('div');
93
+ this.bindingsColumn.style.cssText = `
94
+ display:flex;
95
+ flex-direction:column;
96
+ flex:0 1 auto;
97
+ min-width:0;
98
+ `;
99
+ this.dom.appendChild(this.metricsColumn);
100
+ this.dom.appendChild(this.bindingsColumn);
82
101
  }
83
102
  isMemoryAvailable() {
84
103
  const perf = performance;
85
104
  return perf.memory !== undefined;
86
105
  }
87
106
  addPanel(type, panel) {
88
- this.dom.appendChild(panel.dom);
107
+ const column = type === PanelType.RENDER_MODES
108
+ ? this.bindingsColumn
109
+ : this.metricsColumn;
110
+ (column ?? this.dom).appendChild(panel.dom);
89
111
  this.panels.set(type, panel);
90
112
  }
91
113
  startLoop() {
@@ -119,9 +141,49 @@ export class StatsOverlay {
119
141
  this.lastUpdateTime = currentTime;
120
142
  this.frameCount = 0;
121
143
  this.updateMemoryPanel();
144
+ this.updateRenderModesPanel();
122
145
  }
123
146
  return currentTime;
124
147
  }
148
+ updateRenderModesPanel() {
149
+ const panel = this.panels.get(PanelType.RENDER_MODES);
150
+ if (!(panel instanceof RenderModesPanel)) {
151
+ return;
152
+ }
153
+ const entries = [];
154
+ for (const renderingEngine of renderingEngineCache.getAll()) {
155
+ if (!renderingEngine || renderingEngine.hasBeenDestroyed) {
156
+ continue;
157
+ }
158
+ for (const viewport of renderingEngine.getViewports()) {
159
+ const debugViewport = viewport;
160
+ const renderModes = debugViewport._debug?.renderModes;
161
+ entries.push({
162
+ renderingEngineId: renderingEngine.id,
163
+ viewportId: viewport.id,
164
+ bindings: this.getViewportBindingDebugEntries(debugViewport, renderModes ?? {}),
165
+ });
166
+ }
167
+ }
168
+ panel.setContent(entries);
169
+ }
170
+ getViewportBindingDebugEntries(viewport, renderModes) {
171
+ const actors = viewport.getActors?.() ?? [];
172
+ const sourceDataId = viewport.getSourceDataId?.();
173
+ return Object.entries(renderModes).map(([dataId, renderMode]) => {
174
+ const role = resolveBindingRole(viewport, dataId, sourceDataId);
175
+ const actor = role === 'source'
176
+ ? viewport.getDefaultActor?.()
177
+ : findActorForDataId(actors, dataId);
178
+ return {
179
+ actorUID: actor?.uid,
180
+ dataId,
181
+ referencedId: actor?.referencedId,
182
+ renderMode,
183
+ role,
184
+ };
185
+ });
186
+ }
125
187
  updateMemoryPanel() {
126
188
  const memPanel = this.panels.get(PanelType.MEMORY);
127
189
  if (!memPanel) {
@@ -134,4 +196,116 @@ export class StatsOverlay {
134
196
  memPanel.update(memoryMB, maxMemoryMB);
135
197
  }
136
198
  }
199
+ attachDragHandlers() {
200
+ this.dom?.addEventListener('pointerdown', this.handlePointerDown);
201
+ }
202
+ detachDragHandlers() {
203
+ this.dom?.removeEventListener('pointerdown', this.handlePointerDown);
204
+ window.removeEventListener('pointermove', this.handlePointerMove);
205
+ window.removeEventListener('pointerup', this.handlePointerUp);
206
+ window.removeEventListener('pointercancel', this.handlePointerUp);
207
+ }
208
+ onPointerDown(event) {
209
+ if (!this.dom || event.button !== 0) {
210
+ return;
211
+ }
212
+ this.dragPointerId = event.pointerId;
213
+ const rect = this.dom.getBoundingClientRect();
214
+ this.dragOffsetX = event.clientX - rect.left;
215
+ this.dragOffsetY = event.clientY - rect.top;
216
+ this.setPosition(rect.left, rect.top);
217
+ window.addEventListener('pointermove', this.handlePointerMove);
218
+ window.addEventListener('pointerup', this.handlePointerUp);
219
+ window.addEventListener('pointercancel', this.handlePointerUp);
220
+ event.preventDefault();
221
+ }
222
+ onPointerMove(event) {
223
+ if (this.dragPointerId !== event.pointerId || !this.dom) {
224
+ return;
225
+ }
226
+ this.setPosition(event.clientX - this.dragOffsetX, event.clientY - this.dragOffsetY);
227
+ }
228
+ onPointerUp(event) {
229
+ if (this.dragPointerId !== event.pointerId || !this.dom) {
230
+ return;
231
+ }
232
+ this.dragPointerId = null;
233
+ window.removeEventListener('pointermove', this.handlePointerMove);
234
+ window.removeEventListener('pointerup', this.handlePointerUp);
235
+ window.removeEventListener('pointercancel', this.handlePointerUp);
236
+ const rect = this.dom.getBoundingClientRect();
237
+ this.savePosition(rect.left, rect.top);
238
+ }
239
+ setPosition(left, top) {
240
+ if (!this.dom) {
241
+ return;
242
+ }
243
+ const clamped = this.clampToViewport(left, top);
244
+ this.dom.style.left = `${clamped.left}px`;
245
+ this.dom.style.top = `${clamped.top}px`;
246
+ this.dom.style.right = 'auto';
247
+ this.dom.style.bottom = 'auto';
248
+ }
249
+ clampToViewport(left, top) {
250
+ if (!this.dom) {
251
+ return { left, top };
252
+ }
253
+ const width = this.dom.offsetWidth;
254
+ const height = this.dom.offsetHeight;
255
+ const maxLeft = Math.max(0, window.innerWidth - width);
256
+ const maxTop = Math.max(0, window.innerHeight - height);
257
+ return {
258
+ left: Math.min(Math.max(0, left), maxLeft),
259
+ top: Math.min(Math.max(0, top), maxTop),
260
+ };
261
+ }
262
+ restorePosition() {
263
+ const saved = this.readSavedPosition();
264
+ if (!saved) {
265
+ return;
266
+ }
267
+ this.setPosition(saved.left, saved.top);
268
+ }
269
+ readSavedPosition() {
270
+ try {
271
+ const raw = window.localStorage.getItem(STATS_CONFIG.POSITION_STORAGE_KEY);
272
+ if (!raw) {
273
+ return null;
274
+ }
275
+ const parsed = JSON.parse(raw);
276
+ if (typeof parsed?.left !== 'number' ||
277
+ typeof parsed?.top !== 'number' ||
278
+ !Number.isFinite(parsed.left) ||
279
+ !Number.isFinite(parsed.top)) {
280
+ return null;
281
+ }
282
+ return { left: parsed.left, top: parsed.top };
283
+ }
284
+ catch {
285
+ return null;
286
+ }
287
+ }
288
+ savePosition(left, top) {
289
+ try {
290
+ window.localStorage.setItem(STATS_CONFIG.POSITION_STORAGE_KEY, JSON.stringify({ left, top }));
291
+ }
292
+ catch {
293
+ }
294
+ }
295
+ }
296
+ StatsOverlay.instance = null;
297
+ function resolveBindingRole(viewport, dataId, sourceDataId) {
298
+ const role = viewport.getDisplaySetRole?.(dataId);
299
+ if (role === 'source' || role === 'overlay') {
300
+ return role;
301
+ }
302
+ if (sourceDataId && dataId === sourceDataId) {
303
+ return 'source';
304
+ }
305
+ return 'data';
306
+ }
307
+ function findActorForDataId(actors, dataId) {
308
+ return actors.find((actor) => actor.uid === dataId ||
309
+ actor.representationUID === dataId ||
310
+ actor.referencedId === dataId);
137
311
  }
@@ -1,5 +1,6 @@
1
1
  declare const PANEL_CONFIG: {
2
2
  readonly WIDTH: 160;
3
+ readonly WIDE_WIDTH: 360;
3
4
  readonly HEIGHT: 96;
4
5
  readonly TEXT_PADDING: 3;
5
6
  readonly TEXT_Y_OFFSET: 2;
@@ -20,9 +21,16 @@ declare const STATS_CONFIG: {
20
21
  readonly right: "0px";
21
22
  readonly left: "auto";
22
23
  readonly zIndex: "9999";
23
- readonly cursor: "pointer";
24
+ readonly cursor: "move";
24
25
  readonly opacity: "0.9";
26
+ readonly display: "flex";
27
+ readonly flexDirection: "row";
28
+ readonly alignItems: "flex-start";
29
+ readonly gap: "4px";
30
+ readonly maxWidth: "calc(100vw - 8px)";
31
+ readonly userSelect: "none";
25
32
  };
33
+ readonly POSITION_STORAGE_KEY: "cornerstone-stats-overlay-position";
26
34
  };
27
35
  declare const CONVERSION: {
28
36
  readonly BYTES_TO_MB: 1048576;
@@ -40,5 +48,9 @@ declare const PANEL_CONFIGS: readonly [{
40
48
  readonly name: "MB";
41
49
  readonly foregroundColor: "#f08";
42
50
  readonly backgroundColor: "#201";
51
+ }, {
52
+ readonly name: "VIEWPORT BINDINGS";
53
+ readonly foregroundColor: "#fc0";
54
+ readonly backgroundColor: "#221100";
43
55
  }];
44
56
  export { PANEL_CONFIG, STATS_CONFIG, CONVERSION, PANEL_CONFIGS };
@@ -1,5 +1,6 @@
1
1
  const PANEL_CONFIG = {
2
2
  WIDTH: 160,
3
+ WIDE_WIDTH: 360,
3
4
  HEIGHT: 96,
4
5
  TEXT_PADDING: 3,
5
6
  TEXT_Y_OFFSET: 2,
@@ -20,9 +21,16 @@ const STATS_CONFIG = {
20
21
  right: '0px',
21
22
  left: 'auto',
22
23
  zIndex: '9999',
23
- cursor: 'pointer',
24
+ cursor: 'move',
24
25
  opacity: '0.9',
26
+ display: 'flex',
27
+ flexDirection: 'row',
28
+ alignItems: 'flex-start',
29
+ gap: '4px',
30
+ maxWidth: 'calc(100vw - 8px)',
31
+ userSelect: 'none',
25
32
  },
33
+ POSITION_STORAGE_KEY: 'cornerstone-stats-overlay-position',
26
34
  };
27
35
  const CONVERSION = {
28
36
  BYTES_TO_MB: 1048576,
@@ -32,5 +40,10 @@ const PANEL_CONFIGS = [
32
40
  { name: 'FPS', foregroundColor: '#0ff', backgroundColor: '#002' },
33
41
  { name: 'MS', foregroundColor: '#0f0', backgroundColor: '#020' },
34
42
  { name: 'MB', foregroundColor: '#f08', backgroundColor: '#201' },
43
+ {
44
+ name: 'VIEWPORT BINDINGS',
45
+ foregroundColor: '#fc0',
46
+ backgroundColor: '#221100',
47
+ },
35
48
  ];
36
49
  export { PANEL_CONFIG, STATS_CONFIG, CONVERSION, PANEL_CONFIGS };
@@ -1,6 +1,7 @@
1
1
  declare enum PanelType {
2
2
  FPS = 0,
3
3
  MS = 1,
4
- MEMORY = 2
4
+ MEMORY = 2,
5
+ RENDER_MODES = 3
5
6
  }
6
7
  export { PanelType };
@@ -3,5 +3,6 @@ var PanelType;
3
3
  PanelType[PanelType["FPS"] = 0] = "FPS";
4
4
  PanelType[PanelType["MS"] = 1] = "MS";
5
5
  PanelType[PanelType["MEMORY"] = 2] = "MEMORY";
6
+ PanelType[PanelType["RENDER_MODES"] = 3] = "RENDER_MODES";
6
7
  })(PanelType || (PanelType = {}));
7
8
  export { PanelType };
@@ -1,5 +1,5 @@
1
1
  interface Panel {
2
- dom: HTMLCanvasElement;
2
+ dom: HTMLElement;
3
3
  update: (value: number, maxValue: number) => void;
4
4
  }
5
5
  interface StatsInstance {
@@ -0,0 +1,4 @@
1
+ import type { IVolumeViewport } from '../../types';
2
+ export type ICompatibleVolumeViewport = Pick<IVolumeViewport, 'setVolumes' | 'addVolumes'>;
3
+ declare function isVolumeCompatible(viewport: unknown): viewport is ICompatibleVolumeViewport;
4
+ export default isVolumeCompatible;
@@ -0,0 +1,7 @@
1
+ function isVolumeCompatible(viewport) {
2
+ return Boolean(viewport &&
3
+ typeof viewport.setVolumes ===
4
+ 'function' &&
5
+ typeof viewport.addVolumes === 'function');
6
+ }
7
+ export default isVolumeCompatible;
@@ -1,8 +1,31 @@
1
- import type { ViewportInput, IViewport } from '../../types/IViewport';
1
+ import type { ViewportType as ViewportTypeWire } from '../../types/ViewportTypeRegistry';
2
+ import ECGViewport from '../GenericViewport/ECG/ECGViewport';
3
+ import PlanarViewport from '../GenericViewport/Planar/PlanarViewport';
4
+ import NextVideoViewport from '../GenericViewport/Video/VideoViewport';
5
+ import VolumeViewport3D from '../GenericViewport/Volume3D/viewport3D';
6
+ import type { ViewportTypeConstants } from '../../types/ViewportTypeRegistry';
7
+ import type { ViewportInput, IViewport, InternalViewportInput, NormalizedViewportInput } from '../../types/IViewport';
2
8
  interface ViewportConstructor {
3
- new (viewportInput: ViewportInput): IViewport;
9
+ new (viewportInput: ViewportInput): IViewport | PlanarViewport | NextVideoViewport | VolumeViewport3D | ECGViewport;
10
+ useCustomRenderingPipeline?: boolean;
4
11
  }
5
- declare const viewportTypeToViewportClass: {
6
- [key: string]: ViewportConstructor;
12
+ type ViewportClassInput = Pick<ViewportInput | InternalViewportInput | NormalizedViewportInput, 'type' | 'requestedType'>;
13
+ type ViewportClassResolver = (input: ViewportClassInput) => ViewportConstructor | undefined;
14
+ type RegisterViewportTypeBaseOptions = {
15
+ ViewportClass: ViewportConstructor;
16
+ resolveClass?: ViewportClassResolver;
7
17
  };
18
+ type RegisterViewportTypeNamedOptions<Name extends keyof ViewportTypeConstants> = RegisterViewportTypeBaseOptions & {
19
+ name: Name;
20
+ type: ViewportTypeConstants[Name];
21
+ };
22
+ type RegisterViewportTypeUnnamedOptions = RegisterViewportTypeBaseOptions & {
23
+ type: ViewportTypeWire | string;
24
+ name?: never;
25
+ };
26
+ declare const viewportTypeToViewportClass: Record<string, ViewportConstructor>;
27
+ export declare function registerViewportType<Name extends keyof ViewportTypeConstants>(options: RegisterViewportTypeNamedOptions<Name>): void;
28
+ export declare function registerViewportType(options: RegisterViewportTypeUnnamedOptions): void;
29
+ export declare function isRegisteredViewportType(type: string): boolean;
8
30
  export default viewportTypeToViewportClass;
31
+ export declare function getViewportClassForInput(input: ViewportClassInput): ViewportConstructor;
@@ -1,17 +1,132 @@
1
1
  import StackViewport from '../StackViewport';
2
2
  import VolumeViewport from '../VolumeViewport';
3
3
  import ViewportType from '../../enums/ViewportType';
4
- import VolumeViewport3D from '../VolumeViewport3D';
4
+ import ViewportTypes, { registerViewportTypesConstant, } from '../../enums/ViewportTypes';
5
+ import LegacyVolumeViewport3D from '../VolumeViewport3D';
5
6
  import VideoViewport from '../VideoViewport';
6
7
  import WSIViewport from '../WSIViewport';
7
- import ECGViewport from '../ECGViewport';
8
- const viewportTypeToViewportClass = {
9
- [ViewportType.ORTHOGRAPHIC]: VolumeViewport,
10
- [ViewportType.PERSPECTIVE]: VolumeViewport,
11
- [ViewportType.STACK]: StackViewport,
12
- [ViewportType.VOLUME_3D]: VolumeViewport3D,
13
- [ViewportType.VIDEO]: VideoViewport,
14
- [ViewportType.WHOLE_SLIDE]: WSIViewport,
15
- [ViewportType.ECG]: ECGViewport,
16
- };
8
+ import LegacyECGViewport from '../ECGViewport';
9
+ import ECGViewport from '../GenericViewport/ECG/ECGViewport';
10
+ import PlanarViewport from '../GenericViewport/Planar/PlanarViewport';
11
+ import PlanarViewportLegacyAdapter from '../GenericViewport/Planar/PlanarViewportLegacyAdapter';
12
+ import NextVideoViewport from '../GenericViewport/Video/VideoViewport';
13
+ import VideoViewportLegacyAdapter from '../GenericViewport/Video/VideoViewportLegacyAdapter';
14
+ import VolumeViewport3D from '../GenericViewport/Volume3D/viewport3D';
15
+ import VolumeViewport3DLegacyAdapter from '../GenericViewport/Volume3D/VolumeViewport3DLegacyAdapter';
16
+ import NextWSIViewport from '../GenericViewport/WSI/WSIViewport';
17
+ import WSIViewportLegacyAdapter from '../GenericViewport/WSI/WSIViewportLegacyAdapter';
18
+ import ECGViewportLegacyAdapter from '../GenericViewport/ECG/ECGViewportLegacyAdapter';
19
+ const viewportConstructors = new Map();
20
+ const viewportTypeToViewportClass = {};
21
+ const resolvers = [];
22
+ const registeredViewportTypes = new Set();
23
+ let hasRegisteredCoreViewportTypes = false;
24
+ function registerCoreViewportTypes() {
25
+ if (hasRegisteredCoreViewportTypes) {
26
+ return;
27
+ }
28
+ hasRegisteredCoreViewportTypes = true;
29
+ registerViewportType({
30
+ type: ViewportType.ORTHOGRAPHIC,
31
+ ViewportClass: VolumeViewport,
32
+ });
33
+ registerViewportType({
34
+ type: ViewportType.PERSPECTIVE,
35
+ ViewportClass: VolumeViewport,
36
+ });
37
+ registerViewportType({
38
+ type: ViewportType.STACK,
39
+ ViewportClass: StackViewport,
40
+ });
41
+ registerViewportType({
42
+ type: ViewportType.VOLUME_3D,
43
+ ViewportClass: LegacyVolumeViewport3D,
44
+ });
45
+ registerViewportType({
46
+ type: ViewportType.WHOLE_SLIDE,
47
+ ViewportClass: WSIViewport,
48
+ });
49
+ registerViewportType({
50
+ type: ViewportType.ECG,
51
+ ViewportClass: LegacyECGViewport,
52
+ });
53
+ registerViewportType({
54
+ type: ViewportType.VIDEO,
55
+ ViewportClass: VideoViewport,
56
+ });
57
+ registerViewportType({
58
+ type: ViewportType.VOLUME_3D_NEXT,
59
+ ViewportClass: VolumeViewport3D,
60
+ resolveClass: ({ type, requestedType }) => type === ViewportType.VOLUME_3D_NEXT &&
61
+ requestedType === ViewportType.VOLUME_3D
62
+ ? VolumeViewport3DLegacyAdapter
63
+ : undefined,
64
+ });
65
+ registerViewportType({
66
+ type: ViewportType.PLANAR_NEXT,
67
+ ViewportClass: PlanarViewport,
68
+ resolveClass: ({ type, requestedType }) => type === ViewportType.PLANAR_NEXT &&
69
+ (requestedType === ViewportType.STACK ||
70
+ requestedType === ViewportType.ORTHOGRAPHIC)
71
+ ? PlanarViewportLegacyAdapter
72
+ : undefined,
73
+ });
74
+ registerViewportType({
75
+ type: ViewportType.VIDEO_NEXT,
76
+ ViewportClass: NextVideoViewport,
77
+ resolveClass: ({ type, requestedType }) => type === ViewportType.VIDEO_NEXT && requestedType === ViewportType.VIDEO
78
+ ? VideoViewportLegacyAdapter
79
+ : undefined,
80
+ });
81
+ registerViewportType({
82
+ type: ViewportType.ECG_NEXT,
83
+ ViewportClass: ECGViewport,
84
+ resolveClass: ({ type, requestedType }) => type === ViewportType.ECG_NEXT && requestedType === ViewportType.ECG
85
+ ? ECGViewportLegacyAdapter
86
+ : undefined,
87
+ });
88
+ registerViewportType({
89
+ type: ViewportType.WHOLE_SLIDE_NEXT,
90
+ ViewportClass: NextWSIViewport,
91
+ resolveClass: ({ type, requestedType }) => type === ViewportType.WHOLE_SLIDE_NEXT &&
92
+ requestedType === ViewportType.WHOLE_SLIDE
93
+ ? WSIViewportLegacyAdapter
94
+ : undefined,
95
+ });
96
+ }
97
+ export function registerViewportType({ type, name, ViewportClass, resolveClass, }) {
98
+ if (viewportConstructors.has(type)) {
99
+ throw new Error(`Viewport type "${type}" is already registered`);
100
+ }
101
+ if (name && Object.prototype.hasOwnProperty.call(ViewportTypes, name)) {
102
+ throw new Error(`Viewport type constant "${name}" already exists`);
103
+ }
104
+ viewportConstructors.set(type, ViewportClass);
105
+ viewportTypeToViewportClass[type] = ViewportClass;
106
+ registeredViewportTypes.add(type);
107
+ if (name) {
108
+ registerViewportTypesConstant(name, type);
109
+ }
110
+ if (resolveClass) {
111
+ resolvers.push(resolveClass);
112
+ }
113
+ }
114
+ export function isRegisteredViewportType(type) {
115
+ registerCoreViewportTypes();
116
+ return registeredViewportTypes.has(type);
117
+ }
17
118
  export default viewportTypeToViewportClass;
119
+ export function getViewportClassForInput(input) {
120
+ registerCoreViewportTypes();
121
+ for (const resolveClass of resolvers) {
122
+ const resolved = resolveClass(input);
123
+ if (resolved) {
124
+ return resolved;
125
+ }
126
+ }
127
+ const viewportClass = viewportConstructors.get(input.type);
128
+ if (!viewportClass) {
129
+ throw new Error(`Unknown viewport type: ${input.type}`);
130
+ }
131
+ return viewportClass;
132
+ }
@@ -1 +1,3 @@
1
- export default function viewportTypeUsesCustomRenderingPipeline(viewportType: string): any;
1
+ import type { IViewport } from '../../types';
2
+ export default function viewportTypeUsesCustomRenderingPipeline(viewportType: string): boolean;
3
+ export declare function viewportUsesCustomRenderingPipeline(viewport: IViewport): boolean;
@@ -1,4 +1,11 @@
1
- import viewportTypeToViewportClass from './viewportTypeToViewportClass';
1
+ import { getViewportClassForInput, isRegisteredViewportType, } from './viewportTypeToViewportClass';
2
2
  export default function viewportTypeUsesCustomRenderingPipeline(viewportType) {
3
- return viewportTypeToViewportClass[viewportType].useCustomRenderingPipeline;
3
+ if (!isRegisteredViewportType(viewportType)) {
4
+ return false;
5
+ }
6
+ return Boolean(getViewportClassForInput({ type: viewportType })
7
+ .useCustomRenderingPipeline);
8
+ }
9
+ export function viewportUsesCustomRenderingPipeline(viewport) {
10
+ return viewport.getUseCustomRenderingPipeline();
4
11
  }
@@ -0,0 +1,12 @@
1
+ import type vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer';
2
+ import type { Point2, Point3 } from '../../types';
3
+ export declare function canvasToWorldContextPool(args: {
4
+ canvas: HTMLCanvasElement;
5
+ renderer: vtkRenderer;
6
+ canvasPos: Point2;
7
+ }): Point3;
8
+ export declare function worldToCanvasContextPool(args: {
9
+ canvas: HTMLCanvasElement;
10
+ renderer: vtkRenderer;
11
+ worldPos: Point3;
12
+ }): Point2;
@@ -0,0 +1,57 @@
1
+ export function canvasToWorldContextPool(args) {
2
+ const { canvas, renderer, canvasPos } = args;
3
+ const vtkCamera = renderer.getActiveCamera();
4
+ const restoreCamera = prepareCameraForCoordinateTransforms(vtkCamera);
5
+ const devicePixelRatio = window.devicePixelRatio || 1;
6
+ const { width, height } = canvas;
7
+ const aspectRatio = width / height;
8
+ const canvasPosWithDPR = [
9
+ canvasPos[0] * devicePixelRatio,
10
+ canvasPos[1] * devicePixelRatio,
11
+ ];
12
+ const [xStart, yStart, xEnd, yEnd] = renderer.getViewport();
13
+ const viewportWidth = xEnd - xStart;
14
+ const viewportHeight = yEnd - yStart;
15
+ const normalizedDisplay = [
16
+ xStart + (canvasPosWithDPR[0] / width) * viewportWidth,
17
+ yStart + (1 - canvasPosWithDPR[1] / height) * viewportHeight,
18
+ 0,
19
+ ];
20
+ const projCoords = renderer.normalizedDisplayToProjection(normalizedDisplay[0], normalizedDisplay[1], normalizedDisplay[2]);
21
+ const viewCoords = renderer.projectionToView(projCoords[0], projCoords[1], projCoords[2], aspectRatio);
22
+ const worldCoord = renderer.viewToWorld(viewCoords[0], viewCoords[1], viewCoords[2]);
23
+ restoreCamera();
24
+ return [worldCoord[0], worldCoord[1], worldCoord[2]];
25
+ }
26
+ export function worldToCanvasContextPool(args) {
27
+ const { canvas, renderer, worldPos } = args;
28
+ const vtkCamera = renderer.getActiveCamera();
29
+ const restoreCamera = prepareCameraForCoordinateTransforms(vtkCamera);
30
+ const devicePixelRatio = window.devicePixelRatio || 1;
31
+ const { width, height } = canvas;
32
+ const aspectRatio = width / height;
33
+ const viewCoords = renderer.worldToView(worldPos[0], worldPos[1], worldPos[2]);
34
+ const projCoords = renderer.viewToProjection(viewCoords[0], viewCoords[1], viewCoords[2], aspectRatio);
35
+ const normalizedDisplay = renderer.projectionToNormalizedDisplay(projCoords[0], projCoords[1], projCoords[2]);
36
+ const [xStart, yStart, xEnd, yEnd] = renderer.getViewport();
37
+ const viewportWidth = xEnd - xStart;
38
+ const viewportHeight = yEnd - yStart;
39
+ const canvasX = ((normalizedDisplay[0] - xStart) / viewportWidth) * width;
40
+ const canvasY = (1 - (normalizedDisplay[1] - yStart) / viewportHeight) * height;
41
+ restoreCamera();
42
+ return [canvasX / devicePixelRatio, canvasY / devicePixelRatio];
43
+ }
44
+ function prepareCameraForCoordinateTransforms(vtkCamera) {
45
+ if (vtkCamera.setIsPerformingCoordinateTransformation) {
46
+ vtkCamera.setIsPerformingCoordinateTransformation(true);
47
+ return () => {
48
+ vtkCamera.setIsPerformingCoordinateTransformation?.(false);
49
+ };
50
+ }
51
+ const clippingRange = vtkCamera.getClippingRange();
52
+ const distance = vtkCamera.getDistance();
53
+ vtkCamera.setClippingRange(distance, distance + 0.1);
54
+ return () => {
55
+ vtkCamera.setClippingRange(clippingRange[0], clippingRange[1]);
56
+ };
57
+ }