@cornerstonejs/tools 4.22.13 → 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 (225) hide show
  1. package/dist/esm/config.d.ts +4 -0
  2. package/dist/esm/drawingSvg/drawPath.d.ts +3 -0
  3. package/dist/esm/drawingSvg/drawPath.js +4 -1
  4. package/dist/esm/eventListeners/keyboard/keyDownListener.js +2 -2
  5. package/dist/esm/eventListeners/mouse/getMouseEventPoints.d.ts +1 -1
  6. package/dist/esm/eventListeners/mouse/getMouseEventPoints.js +19 -1
  7. package/dist/esm/eventListeners/mouse/mouseDoubleClickListener.js +8 -1
  8. package/dist/esm/eventListeners/mouse/mouseDownListener.js +37 -5
  9. package/dist/esm/eventListeners/mouse/mouseMoveListener.js +3 -0
  10. package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js +60 -92
  11. package/dist/esm/eventListeners/segmentation/labelmap/onLabelmapSegmentationDataModified.js +49 -21
  12. package/dist/esm/eventListeners/segmentation/labelmap/performStackLabelmapUpdate.js +7 -13
  13. package/dist/esm/eventListeners/segmentation/labelmap/performVolumeLabelmapUpdate.js +44 -18
  14. package/dist/esm/eventListeners/touch/getTouchEventPoints.js +27 -4
  15. package/dist/esm/eventListeners/touch/touchStartListener.js +27 -9
  16. package/dist/esm/eventListeners/wheel/wheelListener.js +5 -1
  17. package/dist/esm/init.js +2 -0
  18. package/dist/esm/stateManagement/annotation/FrameOfReferenceSpecificAnnotationManager.js +10 -4
  19. package/dist/esm/stateManagement/segmentation/SegmentationRenderingEngine.js +23 -20
  20. package/dist/esm/stateManagement/segmentation/SegmentationRepresentationDisplayRegistry.d.ts +12 -0
  21. package/dist/esm/stateManagement/segmentation/SegmentationRepresentationDisplayRegistry.js +7 -0
  22. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.d.ts +1 -11
  23. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.js +28 -166
  24. package/dist/esm/stateManagement/segmentation/addColorLUT.js +7 -1
  25. package/dist/esm/stateManagement/segmentation/getCurrentLabelmapImageIdForViewport.js +16 -1
  26. package/dist/esm/stateManagement/segmentation/helpers/clearSegmentValue.js +9 -7
  27. package/dist/esm/stateManagement/segmentation/helpers/getSegmentationActor.d.ts +1 -1
  28. package/dist/esm/stateManagement/segmentation/helpers/getSegmentationActor.js +3 -2
  29. package/dist/esm/stateManagement/segmentation/helpers/getViewportLabelmapRenderMode.d.ts +5 -0
  30. package/dist/esm/stateManagement/segmentation/helpers/getViewportLabelmapRenderMode.js +58 -0
  31. package/dist/esm/stateManagement/segmentation/helpers/labelmapImageMapperSupport.d.ts +52 -0
  32. package/dist/esm/stateManagement/segmentation/helpers/labelmapImageMapperSupport.js +246 -0
  33. package/dist/esm/stateManagement/segmentation/helpers/labelmapSegmentationState.d.ts +1 -0
  34. package/dist/esm/stateManagement/segmentation/helpers/labelmapSegmentationState.js +1 -0
  35. package/dist/esm/stateManagement/segmentation/helpers/normalizeSegmentationInput.js +11 -1
  36. package/dist/esm/stateManagement/segmentation/internalAddSegmentationRepresentation.js +3 -3
  37. package/dist/esm/stateManagement/segmentation/labelmapModel/index.d.ts +9 -0
  38. package/dist/esm/stateManagement/segmentation/labelmapModel/index.js +7 -0
  39. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapEditTransaction.d.ts +54 -0
  40. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapEditTransaction.js +224 -0
  41. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageIdMapping.d.ts +6 -0
  42. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageIdMapping.js +39 -0
  43. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageReferenceResolver.d.ts +23 -0
  44. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageReferenceResolver.js +269 -0
  45. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLayerStore.d.ts +15 -0
  46. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLayerStore.js +160 -0
  47. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLegacyAdapter.d.ts +4 -0
  48. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLegacyAdapter.js +42 -0
  49. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapSegmentBindings.d.ts +11 -0
  50. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapSegmentBindings.js +73 -0
  51. package/dist/esm/stateManagement/segmentation/labelmapModel/normalizeLabelmapSegmentationData.d.ts +17 -0
  52. package/dist/esm/stateManagement/segmentation/labelmapModel/normalizeLabelmapSegmentationData.js +75 -0
  53. package/dist/esm/stateManagement/segmentation/labelmapModel/privateLabelmap.d.ts +5 -0
  54. package/dist/esm/stateManagement/segmentation/labelmapModel/privateLabelmap.js +106 -0
  55. package/dist/esm/stateManagement/segmentation/models/SegmentModel.d.ts +11 -0
  56. package/dist/esm/stateManagement/segmentation/models/SegmentModel.js +19 -0
  57. package/dist/esm/stateManagement/segmentation/models/SegmentationModel.d.ts +12 -0
  58. package/dist/esm/stateManagement/segmentation/models/SegmentationModel.js +23 -0
  59. package/dist/esm/stateManagement/segmentation/removeSegmentationRepresentations.js +6 -10
  60. package/dist/esm/stateManagement/segmentation/segmentIndex.js +24 -0
  61. package/dist/esm/stateManagement/segmentation/segmentationEventManager.js +2 -9
  62. package/dist/esm/stateManagement/segmentation/segmentationState.d.ts +2 -1
  63. package/dist/esm/stateManagement/segmentation/segmentationState.js +4 -1
  64. package/dist/esm/store/state.js +2 -1
  65. package/dist/esm/synchronizers/callbacks/imageSliceSyncCallback.js +12 -3
  66. package/dist/esm/synchronizers/callbacks/presentationViewSyncCallback.js +5 -2
  67. package/dist/esm/synchronizers/callbacks/zoomPanSyncCallback.js +51 -3
  68. package/dist/esm/tools/AdvancedMagnifyTool.js +1 -1
  69. package/dist/esm/tools/CrosshairsTool.js +5 -5
  70. package/dist/esm/tools/OrientationControllerTool.js +1 -1
  71. package/dist/esm/tools/OrientationMarkerTool.js +4 -4
  72. package/dist/esm/tools/PanTool.js +26 -3
  73. package/dist/esm/tools/PlanarRotateTool.js +19 -4
  74. package/dist/esm/tools/ReferenceCursors.js +7 -1
  75. package/dist/esm/tools/SculptorTool/CircleSculptCursor.js +1 -1
  76. package/dist/esm/tools/TrackballRotateTool.js +3 -2
  77. package/dist/esm/tools/VolumeCroppingTool.js +3 -2
  78. package/dist/esm/tools/WindowLevelTool.d.ts +2 -1
  79. package/dist/esm/tools/WindowLevelTool.js +48 -4
  80. package/dist/esm/tools/ZoomTool.d.ts +8 -0
  81. package/dist/esm/tools/ZoomTool.js +92 -11
  82. package/dist/esm/tools/annotation/AngleTool.js +33 -31
  83. package/dist/esm/tools/annotation/ArrowAnnotateTool.js +30 -28
  84. package/dist/esm/tools/annotation/BidirectionalTool.js +51 -49
  85. package/dist/esm/tools/annotation/CircleROITool.js +49 -44
  86. package/dist/esm/tools/annotation/CobbAngleTool.js +1 -1
  87. package/dist/esm/tools/annotation/DragProbeTool.js +1 -1
  88. package/dist/esm/tools/annotation/ETDRSGridTool.js +1 -1
  89. package/dist/esm/tools/annotation/EllipticalROITool.js +42 -37
  90. package/dist/esm/tools/annotation/HeightTool.js +1 -1
  91. package/dist/esm/tools/annotation/KeyImageTool.js +11 -11
  92. package/dist/esm/tools/annotation/LabelTool.js +37 -35
  93. package/dist/esm/tools/annotation/LengthTool.js +35 -33
  94. package/dist/esm/tools/annotation/LivewireContourSegmentationTool.js +6 -4
  95. package/dist/esm/tools/annotation/LivewireContourTool.js +1 -1
  96. package/dist/esm/tools/annotation/PlanarFreehandContourSegmentationTool.js +6 -4
  97. package/dist/esm/tools/annotation/PlanarFreehandROITool.js +1 -1
  98. package/dist/esm/tools/annotation/ProbeTool.js +51 -46
  99. package/dist/esm/tools/annotation/RectangleROITool.js +42 -37
  100. package/dist/esm/tools/annotation/RegionSegmentPlusTool.js +1 -1
  101. package/dist/esm/tools/annotation/RegionSegmentTool.js +1 -1
  102. package/dist/esm/tools/annotation/SplineContourSegmentationTool.js +1 -1
  103. package/dist/esm/tools/annotation/SplineROITool.js +51 -49
  104. package/dist/esm/tools/annotation/UltrasoundDirectionalTool.js +1 -1
  105. package/dist/esm/tools/annotation/UltrasoundPleuraBLineTool/UltrasoundPleuraBLineTool.js +57 -55
  106. package/dist/esm/tools/annotation/VideoRedactionTool.js +1 -1
  107. package/dist/esm/tools/base/AnnotationDisplayTool.js +9 -6
  108. package/dist/esm/tools/base/AnnotationTool.js +2 -1
  109. package/dist/esm/tools/base/BaseTool.js +16 -10
  110. package/dist/esm/tools/base/ContourSegmentationBaseTool.js +1 -1
  111. package/dist/esm/tools/base/GrowCutBaseTool.js +2 -2
  112. package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.d.ts +2 -4
  113. package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.js +15 -85
  114. package/dist/esm/tools/displayTools/Labelmap/labelmapActorStyle.d.ts +5 -0
  115. package/dist/esm/tools/displayTools/Labelmap/labelmapActorStyle.js +191 -0
  116. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.d.ts +4 -3
  117. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +48 -209
  118. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/createLabelmapRenderPlan.d.ts +3 -0
  119. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/createLabelmapRenderPlan.js +51 -0
  120. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/index.d.ts +4 -0
  121. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/index.js +3 -0
  122. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/legacyVolumePlan.d.ts +14 -0
  123. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/legacyVolumePlan.js +143 -0
  124. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/planarGenericVolumeLabelmap.d.ts +40 -0
  125. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/planarGenericVolumeLabelmap.js +79 -0
  126. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/removeLabelmapRepresentationFromViewport.d.ts +3 -0
  127. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/removeLabelmapRepresentationFromViewport.js +18 -0
  128. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/resolveLabelmapRenderPlan.d.ts +9 -0
  129. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/resolveLabelmapRenderPlan.js +56 -0
  130. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/stackImagePlan.d.ts +11 -0
  131. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/stackImagePlan.js +35 -0
  132. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/types.d.ts +48 -0
  133. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/types.js +0 -0
  134. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/volumeSliceImageMapperPlan.d.ts +13 -0
  135. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/volumeSliceImageMapperPlan.js +34 -0
  136. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan.d.ts +2 -0
  137. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan.js +1 -0
  138. package/dist/esm/tools/displayTools/Labelmap/labelmapRepresentationUID.d.ts +8 -0
  139. package/dist/esm/tools/displayTools/Labelmap/labelmapRepresentationUID.js +18 -0
  140. package/dist/esm/tools/displayTools/Labelmap/removeLabelmapFromElement.js +2 -5
  141. package/dist/esm/tools/displayTools/Labelmap/removeLabelmapRepresentationData.d.ts +3 -0
  142. package/dist/esm/tools/displayTools/Labelmap/removeLabelmapRepresentationData.js +16 -0
  143. package/dist/esm/tools/displayTools/Labelmap/syncStackLabelmapActors.d.ts +2 -0
  144. package/dist/esm/tools/displayTools/Labelmap/syncStackLabelmapActors.js +135 -0
  145. package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapImageMapper.d.ts +16 -0
  146. package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapImageMapper.js +267 -0
  147. package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapSliceData.d.ts +27 -0
  148. package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapSliceData.js +185 -0
  149. package/dist/esm/tools/displayTools/registerBuiltInSegmentationRepresentationDisplays.d.ts +1 -0
  150. package/dist/esm/tools/displayTools/registerBuiltInSegmentationRepresentationDisplays.js +16 -0
  151. package/dist/esm/tools/segmentation/BrushTool.d.ts +9 -2
  152. package/dist/esm/tools/segmentation/BrushTool.js +109 -25
  153. package/dist/esm/tools/segmentation/CircleScissorsTool.js +13 -6
  154. package/dist/esm/tools/segmentation/LabelmapBaseTool.d.ts +2 -3
  155. package/dist/esm/tools/segmentation/LabelmapBaseTool.js +77 -38
  156. package/dist/esm/tools/segmentation/LabelmapEditWithContour.js +3 -3
  157. package/dist/esm/tools/segmentation/PaintFillTool.js +11 -4
  158. package/dist/esm/tools/segmentation/RectangleROIStartEndThresholdTool.d.ts +2 -0
  159. package/dist/esm/tools/segmentation/RectangleROIStartEndThresholdTool.js +16 -8
  160. package/dist/esm/tools/segmentation/RectangleScissorsTool.js +13 -6
  161. package/dist/esm/tools/segmentation/SegmentBidirectionalTool.js +63 -61
  162. package/dist/esm/tools/segmentation/SegmentSelectTool.js +4 -4
  163. package/dist/esm/tools/segmentation/SphereScissorsTool.js +5 -1
  164. package/dist/esm/tools/segmentation/strategies/BrushStrategy.d.ts +7 -0
  165. package/dist/esm/tools/segmentation/strategies/BrushStrategy.js +47 -24
  166. package/dist/esm/tools/segmentation/strategies/compositions/circularCursor.js +49 -15
  167. package/dist/esm/tools/segmentation/strategies/compositions/determineSegmentIndex.js +2 -2
  168. package/dist/esm/tools/segmentation/strategies/compositions/dynamicThreshold.js +5 -1
  169. package/dist/esm/tools/segmentation/strategies/compositions/islandRemovalComposition.js +2 -2
  170. package/dist/esm/tools/segmentation/strategies/compositions/preview.js +2 -2
  171. package/dist/esm/tools/segmentation/strategies/compositions/setValue.js +14 -6
  172. package/dist/esm/tools/segmentation/strategies/utils/crossLayerErase.d.ts +4 -0
  173. package/dist/esm/tools/segmentation/strategies/utils/crossLayerErase.js +23 -0
  174. package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.js +1 -1
  175. package/dist/esm/tools/segmentation/strategies/utils/handleUseSegmentCenterIndex.js +12 -11
  176. package/dist/esm/tools/segmentation/strategies/utils/labelmapOverlap.d.ts +4 -0
  177. package/dist/esm/tools/segmentation/strategies/utils/labelmapOverlap.js +41 -0
  178. package/dist/esm/tools/segmentation/strategies/utils/overwritePolicy.d.ts +3 -0
  179. package/dist/esm/tools/segmentation/strategies/utils/overwritePolicy.js +31 -0
  180. package/dist/esm/tools/segmentation/strategies/utils/segmentSeparation.d.ts +3 -0
  181. package/dist/esm/tools/segmentation/strategies/utils/segmentSeparation.js +38 -0
  182. package/dist/esm/tools/segmentation/utils/LazyBrushEditController.d.ts +19 -0
  183. package/dist/esm/tools/segmentation/utils/LazyBrushEditController.js +55 -0
  184. package/dist/esm/tools/segmentation/utils/lazyBrushPreview.d.ts +3 -0
  185. package/dist/esm/tools/segmentation/utils/lazyBrushPreview.js +34 -0
  186. package/dist/esm/tools/segmentation/utils/shouldUseLazyLabelmapEditing.d.ts +3 -0
  187. package/dist/esm/tools/segmentation/utils/shouldUseLazyLabelmapEditing.js +42 -0
  188. package/dist/esm/types/LabelmapToolOperationData.d.ts +5 -0
  189. package/dist/esm/types/LabelmapTypes.d.ts +29 -6
  190. package/dist/esm/types/SegmentationStateTypes.d.ts +4 -0
  191. package/dist/esm/utilities/calibrateImageSpacing.js +17 -2
  192. package/dist/esm/utilities/contours/AnnotationToPointData.js +1 -1
  193. package/dist/esm/utilities/getSphereBoundsInfo.js +5 -1
  194. package/dist/esm/utilities/getViewportICamera.d.ts +4 -0
  195. package/dist/esm/utilities/getViewportICamera.js +23 -0
  196. package/dist/esm/utilities/getViewportsForAnnotation.js +5 -1
  197. package/dist/esm/utilities/math/basic/BasicStatsCalculator.js +9 -7
  198. package/dist/esm/utilities/pointInSurroundingSphereCallback.js +8 -1
  199. package/dist/esm/utilities/segmentation/InterpolationManager/InterpolationManager.js +121 -118
  200. package/dist/esm/utilities/segmentation/SegmentStatsCalculator.js +5 -4
  201. package/dist/esm/utilities/segmentation/VolumetricCalculator.js +1 -1
  202. package/dist/esm/utilities/segmentation/createLabelmapVolumeForViewport.js +1 -1
  203. package/dist/esm/utilities/segmentation/getReferenceVolumeForSegmentation.js +1 -1
  204. package/dist/esm/utilities/segmentation/getReferenceVolumeForSegmentationVolume.js +11 -2
  205. package/dist/esm/utilities/segmentation/getSegmentIndexAtLabelmapBorder.js +36 -17
  206. package/dist/esm/utilities/segmentation/getSegmentIndexAtWorldPoint.js +42 -25
  207. package/dist/esm/utilities/segmentation/getUniqueSegmentIndices.js +3 -30
  208. package/dist/esm/utilities/segmentation/index.d.ts +2 -1
  209. package/dist/esm/utilities/segmentation/index.js +2 -1
  210. package/dist/esm/utilities/segmentation/utilsForWorker.js +2 -2
  211. package/dist/esm/utilities/segmentation/validateLabelmap.js +1 -1
  212. package/dist/esm/utilities/stackPrefetch/stackPrefetch.js +0 -1
  213. package/dist/esm/utilities/touch/index.js +3 -2
  214. package/dist/esm/utilities/viewportCapabilities.d.ts +16 -0
  215. package/dist/esm/utilities/viewportCapabilities.js +18 -0
  216. package/dist/esm/utilities/viewportFilters/filterViewportsWithParallelNormals.d.ts +1 -1
  217. package/dist/esm/utilities/viewportFilters/filterViewportsWithParallelNormals.js +12 -4
  218. package/dist/esm/utilities/viewportFilters/filterViewportsWithSameOrientation.d.ts +1 -1
  219. package/dist/esm/utilities/viewportFilters/filterViewportsWithSameOrientation.js +11 -4
  220. package/dist/esm/utilities/viewportFilters/getViewportIdsWithToolToRender.js +1 -1
  221. package/dist/esm/utilities/viewportPresentation.d.ts +3 -0
  222. package/dist/esm/utilities/viewportPresentation.js +26 -0
  223. package/dist/esm/version.d.ts +1 -1
  224. package/dist/esm/version.js +1 -1
  225. package/package.json +10 -10
@@ -14,4 +14,5 @@ import { updateLabelmapSegmentationImageReferences } from './updateLabelmapSegme
14
14
  import { getStackSegmentationImageIdsForViewport } from './getStackSegmentationImageIdsForViewport';
15
15
  import { getSegmentationRepresentation, getSegmentationRepresentations, getSegmentationRepresentationsBySegmentationId } from './getSegmentationRepresentation';
16
16
  declare function destroy(): void;
17
- export { getColorLUT, getCurrentLabelmapImageIdForViewport, getCurrentLabelmapImageIdsForViewport, getNextColorLUTIndex, getSegmentation, getSegmentations, getStackSegmentationImageIdsForViewport, getViewportIdsWithSegmentation, getSegmentationRepresentation, getSegmentationRepresentations, getViewportSegmentationRepresentations, removeColorLUT, getViewportSegmentations, removeSegmentation, removeLabelmapRepresentation, removeContourRepresentation, removeSurfaceRepresentation, removeSegmentationRepresentation, removeAllSegmentationRepresentations, removeAllSegmentations, addColorLUT, addSegmentations, updateLabelmapSegmentationImageReferences, getSegmentationRepresentationsBySegmentationId, destroy, };
17
+ declare function getDefaultSegmentationStateManager(): import("./SegmentationStateManager").default;
18
+ export { getColorLUT, getCurrentLabelmapImageIdForViewport, getCurrentLabelmapImageIdsForViewport, getNextColorLUTIndex, getSegmentation, getSegmentations, getStackSegmentationImageIdsForViewport, getViewportIdsWithSegmentation, getSegmentationRepresentation, getSegmentationRepresentations, getViewportSegmentationRepresentations, removeColorLUT, getViewportSegmentations, removeSegmentation, removeLabelmapRepresentation, removeContourRepresentation, removeSurfaceRepresentation, removeSegmentationRepresentation, removeAllSegmentationRepresentations, removeAllSegmentations, addColorLUT, addSegmentations, updateLabelmapSegmentationImageReferences, getSegmentationRepresentationsBySegmentationId, destroy, getDefaultSegmentationStateManager, };
@@ -17,4 +17,7 @@ import { defaultSegmentationStateManager } from './SegmentationStateManager';
17
17
  function destroy() {
18
18
  defaultSegmentationStateManager.resetState();
19
19
  }
20
- export { getColorLUT, getCurrentLabelmapImageIdForViewport, getCurrentLabelmapImageIdsForViewport, getNextColorLUTIndex, getSegmentation, getSegmentations, getStackSegmentationImageIdsForViewport, getViewportIdsWithSegmentation, getSegmentationRepresentation, getSegmentationRepresentations, getViewportSegmentationRepresentations, removeColorLUT, getViewportSegmentations, removeSegmentation, removeLabelmapRepresentation, removeContourRepresentation, removeSurfaceRepresentation, removeSegmentationRepresentation, removeAllSegmentationRepresentations, removeAllSegmentations, addColorLUT, addSegmentations, updateLabelmapSegmentationImageReferences, getSegmentationRepresentationsBySegmentationId, destroy, };
20
+ function getDefaultSegmentationStateManager() {
21
+ return defaultSegmentationStateManager;
22
+ }
23
+ export { getColorLUT, getCurrentLabelmapImageIdForViewport, getCurrentLabelmapImageIdsForViewport, getNextColorLUTIndex, getSegmentation, getSegmentations, getStackSegmentationImageIdsForViewport, getViewportIdsWithSegmentation, getSegmentationRepresentation, getSegmentationRepresentations, getViewportSegmentationRepresentations, removeColorLUT, getViewportSegmentations, removeSegmentation, removeLabelmapRepresentation, removeContourRepresentation, removeSurfaceRepresentation, removeSegmentationRepresentation, removeAllSegmentationRepresentations, removeAllSegmentations, addColorLUT, addSegmentations, updateLabelmapSegmentationImageReferences, getSegmentationRepresentationsBySegmentationId, destroy, getDefaultSegmentationStateManager, };
@@ -1,3 +1,4 @@
1
+ import { utilities } from '@cornerstonejs/core';
1
2
  import svgNodeCache, { resetSvgNodeCache } from './svgNodeCache';
2
3
  const defaultState = {
3
4
  isInteractingWithTool: false,
@@ -22,7 +23,7 @@ let state = {
22
23
  function resetCornerstoneToolsState() {
23
24
  resetSvgNodeCache();
24
25
  state = {
25
- ...structuredClone({
26
+ ...utilities.deepClone({
26
27
  ...defaultState,
27
28
  svgNodeCache: {},
28
29
  }),
@@ -1,7 +1,16 @@
1
1
  import { vec3, mat4 } from 'gl-matrix';
2
- import { getRenderingEngine, metaData, utilities, VolumeViewport, } from '@cornerstonejs/core';
2
+ import { ActorRenderMode, getRenderingEngine, metaData, utilities, VolumeViewport, } from '@cornerstonejs/core';
3
3
  import areViewportsCoplanar from './areViewportsCoplanar';
4
4
  const getSpatialRegistration = (targetId, sourceId) => utilities.spatialRegistrationMetadataProvider.get('spatialRegistrationModule', targetId, sourceId);
5
+ function isVolumeSliceViewport(viewport) {
6
+ if (viewport instanceof VolumeViewport) {
7
+ return true;
8
+ }
9
+ const getDefaultActor = viewport.getDefaultActor;
10
+ const renderMode = getDefaultActor?.call(viewport)?.actorMapper?.renderMode;
11
+ return (renderMode === ActorRenderMode.CPU_VOLUME ||
12
+ renderMode === ActorRenderMode.VTK_VOLUME_SLICE);
13
+ }
5
14
  export default async function imageSliceSyncCallback(synchronizerInstance, sourceViewport, targetViewport) {
6
15
  const renderingEngine = getRenderingEngine(targetViewport.renderingEngineId);
7
16
  if (!renderingEngine) {
@@ -39,11 +48,11 @@ export default async function imageSliceSyncCallback(synchronizerInstance, sourc
39
48
  const targetImagePositionPatientWithRegistrationMatrix = vec3.transformMat4(vec3.create(), sourceImagePositionPatient, registrationMatrixMat4);
40
49
  const closestImageIdIndex2 = _getClosestImageIdIndex(targetImagePositionPatientWithRegistrationMatrix, targetImageIds);
41
50
  let imageIndexToSet = closestImageIdIndex2.index;
42
- if (tViewport instanceof VolumeViewport) {
51
+ if (isVolumeSliceViewport(tViewport)) {
43
52
  imageIndexToSet = targetImageIds.length - closestImageIdIndex2.index - 1;
44
53
  }
45
54
  if (closestImageIdIndex2.index !== -1 &&
46
- tViewport.getCurrentImageIdIndex() !== closestImageIdIndex2.index) {
55
+ tViewport.getCurrentImageIdIndex() !== imageIndexToSet) {
47
56
  await utilities.jumpToSlice(tViewport.element, {
48
57
  imageIndex: imageIndexToSet,
49
58
  });
@@ -1,4 +1,5 @@
1
1
  import { getRenderingEngine } from '@cornerstonejs/core';
2
+ import { applyViewportPresentation, getViewportPresentation, } from '../../utilities/viewportPresentation';
2
3
  export default function presentationViewSyncCallback(_synchronizerInstance, sourceViewport, targetViewport, _sourceEvent, options) {
3
4
  const renderingEngine = getRenderingEngine(targetViewport.renderingEngineId);
4
5
  if (!renderingEngine) {
@@ -6,7 +7,9 @@ export default function presentationViewSyncCallback(_synchronizerInstance, sour
6
7
  }
7
8
  const tViewport = renderingEngine.getViewport(targetViewport.viewportId);
8
9
  const sViewport = renderingEngine.getViewport(sourceViewport.viewportId);
9
- const presentationView = sViewport.getViewPresentation(options);
10
- tViewport.setViewPresentation(presentationView);
10
+ const presentationView = getViewportPresentation(sViewport, options);
11
+ if (!applyViewportPresentation(tViewport, presentationView)) {
12
+ return;
13
+ }
11
14
  tViewport.render();
12
15
  }
@@ -1,4 +1,43 @@
1
- import { getRenderingEngine } from '@cornerstonejs/core';
1
+ import { getRenderingEngine, viewportHasPan, viewportHasZoom, viewportProjection, } from '@cornerstonejs/core';
2
+ const zoomPanProjectionSelector = {
3
+ pan: true,
4
+ zoom: true,
5
+ };
6
+ function viewportHasViewStateSetter(viewport) {
7
+ return (Boolean(viewport) &&
8
+ typeof viewport === 'object' &&
9
+ 'setViewState' in viewport &&
10
+ typeof viewport.setViewState === 'function');
11
+ }
12
+ function syncProjectionZoomPan(sourceViewport, targetViewport, options) {
13
+ if (!viewportHasViewStateSetter(targetViewport)) {
14
+ return false;
15
+ }
16
+ const sourcePresentation = viewportProjection.getPresentation(sourceViewport, {
17
+ selector: zoomPanProjectionSelector,
18
+ });
19
+ if (!sourcePresentation) {
20
+ return false;
21
+ }
22
+ const presentationPatch = {};
23
+ if (options?.syncZoom !== false &&
24
+ typeof sourcePresentation.zoom === 'number') {
25
+ presentationPatch.zoom = sourcePresentation.zoom;
26
+ }
27
+ if (options?.syncPan !== false && sourcePresentation.pan) {
28
+ presentationPatch.pan = sourcePresentation.pan;
29
+ }
30
+ if (presentationPatch.zoom === undefined &&
31
+ presentationPatch.pan === undefined) {
32
+ return false;
33
+ }
34
+ const nextViewState = viewportProjection.withPresentation(targetViewport, presentationPatch);
35
+ if (!nextViewState) {
36
+ return false;
37
+ }
38
+ targetViewport.setViewState(nextViewState);
39
+ return true;
40
+ }
2
41
  export default function zoomPanSyncCallback(synchronizerInstance, sourceViewport, targetViewport) {
3
42
  const renderingEngine = getRenderingEngine(targetViewport.renderingEngineId);
4
43
  if (!renderingEngine) {
@@ -7,11 +46,20 @@ export default function zoomPanSyncCallback(synchronizerInstance, sourceViewport
7
46
  const options = synchronizerInstance.getOptions(targetViewport.viewportId);
8
47
  const tViewport = renderingEngine.getViewport(targetViewport.viewportId);
9
48
  const sViewport = renderingEngine.getViewport(sourceViewport.viewportId);
10
- if (options?.syncZoom !== false) {
49
+ const syncedByProjection = syncProjectionZoomPan(sViewport, tViewport, options);
50
+ if (syncedByProjection) {
51
+ tViewport.render();
52
+ return;
53
+ }
54
+ if (options?.syncZoom !== false &&
55
+ viewportHasZoom(sViewport) &&
56
+ viewportHasZoom(tViewport)) {
11
57
  const srcZoom = sViewport.getZoom();
12
58
  tViewport.setZoom(srcZoom);
13
59
  }
14
- if (options?.syncPan !== false) {
60
+ if (options?.syncPan !== false &&
61
+ viewportHasPan(sViewport) &&
62
+ viewportHasPan(tViewport)) {
15
63
  const srcPan = sViewport.getPan();
16
64
  tViewport.setPan(srcPan);
17
65
  }
@@ -27,7 +27,6 @@ var AdvancedMagnifyToolActions;
27
27
  const ADVANCED_MAGNIFY_TOOL_NAME = 'AdvancedMagnify';
28
28
  const PARALLEL_THRESHOLD = 1 - CONSTANTS.EPSILON;
29
29
  class AdvancedMagnifyTool extends AnnotationTool {
30
- static { this.Actions = AdvancedMagnifyToolActions; }
31
30
  constructor(toolProps = {}, defaultToolProps = {
32
31
  supportedInteractionTypes: ['Mouse', 'Touch'],
33
32
  configuration: {
@@ -455,6 +454,7 @@ class AdvancedMagnifyTool extends AnnotationTool {
455
454
  }
456
455
  }
457
456
  }
457
+ AdvancedMagnifyTool.Actions = AdvancedMagnifyToolActions;
458
458
  class AdvancedMagnifyViewportManager {
459
459
  constructor() {
460
460
  this.createViewport = (annotation, viewportInfo) => {
@@ -34,11 +34,6 @@ const OPERATION = {
34
34
  SLAB: 3,
35
35
  };
36
36
  class CrosshairsTool extends AnnotationTool {
37
- static { this.minimalModeExamples = new Map([
38
- ['Default', { enabled: false, lineLengthInPx: 40 }],
39
- ['Minimal 40px', { enabled: true, lineLengthInPx: 40 }],
40
- ['Minimal 80px', { enabled: true, lineLengthInPx: 80 }],
41
- ]); }
42
37
  constructor(toolProps = {}, defaultToolProps = {
43
38
  supportedInteractionTypes: ['Mouse'],
44
39
  configuration: {
@@ -1765,6 +1760,11 @@ class CrosshairsTool extends AnnotationTool {
1765
1760
  return data.handles.activeOperation === OPERATION.DRAG ? true : false;
1766
1761
  }
1767
1762
  }
1763
+ CrosshairsTool.minimalModeExamples = new Map([
1764
+ ['Default', { enabled: false, lineLengthInPx: 40 }],
1765
+ ['Minimal 40px', { enabled: true, lineLengthInPx: 40 }],
1766
+ ['Minimal 80px', { enabled: true, lineLengthInPx: 80 }],
1767
+ ]);
1768
1768
  function getMinimalCrosshairConfig(configuration) {
1769
1769
  const minimal = configuration?.minimal;
1770
1770
  if (!minimal?.enabled) {
@@ -65,7 +65,6 @@ const ANIMATE_RESET_CAMERA_OPTIONS = {
65
65
  resetToCenter: true,
66
66
  };
67
67
  class OrientationControllerTool extends BaseTool {
68
- static { this.toolName = 'OrientationControllerTool'; }
69
68
  constructor(toolProps = {}, defaultToolProps = {
70
69
  supportedInteractionTypes: ['Mouse'],
71
70
  configuration: {
@@ -451,4 +450,5 @@ class OrientationControllerTool extends BaseTool {
451
450
  this.animationFrameHandles.set(viewportId, handle);
452
451
  }
453
452
  }
453
+ OrientationControllerTool.toolName = 'OrientationControllerTool';
454
454
  export default OrientationControllerTool;
@@ -17,10 +17,6 @@ var OverlayMarkerType;
17
17
  OverlayMarkerType[OverlayMarkerType["CUSTOM"] = 3] = "CUSTOM";
18
18
  })(OverlayMarkerType || (OverlayMarkerType = {}));
19
19
  class OrientationMarkerTool extends BaseTool {
20
- static { this.CUBE = 1; }
21
- static { this.AXIS = 2; }
22
- static { this.VTPFILE = 3; }
23
- static { this.OVERLAY_MARKER_TYPES = OverlayMarkerType; }
24
20
  constructor(toolProps = {}, defaultToolProps = {
25
21
  configuration: {
26
22
  orientationWidget: {
@@ -282,5 +278,9 @@ class OrientationMarkerTool extends BaseTool {
282
278
  return axes;
283
279
  }
284
280
  }
281
+ OrientationMarkerTool.CUBE = 1;
282
+ OrientationMarkerTool.AXIS = 2;
283
+ OrientationMarkerTool.VTPFILE = 3;
284
+ OrientationMarkerTool.OVERLAY_MARKER_TYPES = OverlayMarkerType;
285
285
  OrientationMarkerTool.toolName = 'OrientationMarker';
286
286
  export default OrientationMarkerTool;
@@ -1,5 +1,5 @@
1
1
  import { BaseTool } from './base';
2
- import { getEnabledElement, utilities as csUtils } from '@cornerstonejs/core';
2
+ import { getEnabledElement, utilities as csUtils, viewportHasPan, } from '@cornerstonejs/core';
3
3
  class PanTool extends BaseTool {
4
4
  constructor(toolProps = {}, defaultToolProps = {
5
5
  supportedInteractionTypes: ['Mouse', 'Touch'],
@@ -7,7 +7,7 @@ class PanTool extends BaseTool {
7
7
  limitToViewport: false,
8
8
  ignoreX: false,
9
9
  ignoreY: false,
10
- ignoreZ: false
10
+ ignoreZ: false,
11
11
  },
12
12
  }) {
13
13
  super(toolProps, defaultToolProps);
@@ -92,7 +92,19 @@ class PanTool extends BaseTool {
92
92
  deltaPointsWorld[2] = 0;
93
93
  }
94
94
  const viewport = enabledElement.viewport;
95
- const camera = viewport.getCamera();
95
+ const camera = getLegacyCamera(viewport);
96
+ if (!hasLegacyCameraPosition(camera)) {
97
+ if (!viewportHasPan(viewport)) {
98
+ return;
99
+ }
100
+ const pan = viewport.getPan();
101
+ viewport.setPan([
102
+ pan[0] + deltaPointsCanvas[0],
103
+ pan[1] + deltaPointsCanvas[1],
104
+ ]);
105
+ viewport.render();
106
+ return;
107
+ }
96
108
  const { focalPoint, position } = camera;
97
109
  if (this.configuration.limitToViewport &&
98
110
  !this._checkImageInViewport(viewport, deltaPointsCanvas)) {
@@ -115,5 +127,16 @@ class PanTool extends BaseTool {
115
127
  viewport.render();
116
128
  }
117
129
  }
130
+ function getLegacyCamera(viewport) {
131
+ const maybeViewport = viewport;
132
+ return typeof maybeViewport.getCamera === 'function'
133
+ ? maybeViewport.getCamera()
134
+ : undefined;
135
+ }
136
+ function hasLegacyCameraPosition(camera) {
137
+ return Boolean(camera &&
138
+ Array.isArray(camera.focalPoint) &&
139
+ Array.isArray(camera.position));
140
+ }
118
141
  PanTool.toolName = 'Pan';
119
142
  export default PanTool;
@@ -2,6 +2,8 @@ import { BaseVolumeViewport, getEnabledElement } from '@cornerstonejs/core';
2
2
  import { mat4, vec3 } from 'gl-matrix';
3
3
  import { BaseTool } from './base';
4
4
  import angleBetweenLines from '../utilities/math/angle/angleBetweenLines';
5
+ import getViewportICamera from '../utilities/getViewportICamera';
6
+ import { applyViewportPresentation, getViewportPresentation, } from '../utilities/viewportPresentation';
5
7
  class PlanarRotateTool extends BaseTool {
6
8
  constructor(toolProps = {}, defaultToolProps = {
7
9
  supportedInteractionTypes: ['Mouse', 'Touch'],
@@ -24,13 +26,16 @@ class PlanarRotateTool extends BaseTool {
24
26
  const startPointWorld = startPoints.world;
25
27
  const enabledElement = getEnabledElement(element);
26
28
  const { viewport } = enabledElement;
27
- const camera = viewport.getCamera();
29
+ const camera = getViewportICamera(viewport);
28
30
  const width = element.clientWidth;
29
31
  const height = element.clientHeight;
30
32
  const centerCanvas = [width * 0.5, height * 0.5];
31
33
  const centerWorld = viewport.canvasToWorld(centerCanvas);
32
34
  let angle = angleBetweenLines([startPointWorld, centerWorld], [centerWorld, currentPointWorld]);
33
35
  const { viewPlaneNormal } = camera;
36
+ if (!viewPlaneNormal) {
37
+ return;
38
+ }
34
39
  const v1 = vec3.sub(vec3.create(), centerWorld, startPointWorld);
35
40
  const v2 = vec3.sub(vec3.create(), centerWorld, currentPointWorld);
36
41
  const cross = vec3.cross(vec3.create(), v1, v2);
@@ -43,7 +48,10 @@ class PlanarRotateTool extends BaseTool {
43
48
  this.setAngle(viewport, angle);
44
49
  }
45
50
  setAngle(viewport, angle) {
46
- const { viewPlaneNormal, viewUp } = viewport.getCamera();
51
+ const { viewPlaneNormal, viewUp } = getViewportICamera(viewport);
52
+ if (!viewPlaneNormal || !viewUp) {
53
+ return;
54
+ }
47
55
  if (viewport instanceof BaseVolumeViewport) {
48
56
  const rotAngle = (((angle + 360) % 360) * Math.PI) / 180;
49
57
  const rotMat = mat4.identity(new Float32Array(16));
@@ -52,10 +60,17 @@ class PlanarRotateTool extends BaseTool {
52
60
  viewport.setCamera({ viewUp: rotatedViewUp });
53
61
  }
54
62
  else {
55
- const { rotation } = viewport.getViewPresentation();
56
- viewport.setViewPresentation({
63
+ const presentation = getViewportPresentation(viewport);
64
+ if (!presentation) {
65
+ return;
66
+ }
67
+ const { rotation = 0 } = presentation;
68
+ const didApply = applyViewportPresentation(viewport, {
57
69
  rotation: (rotation + angle + 360) % 360,
58
70
  });
71
+ if (!didApply) {
72
+ return;
73
+ }
59
74
  }
60
75
  viewport.render();
61
76
  }
@@ -96,7 +96,13 @@ class ReferenceCursors extends AnnotationDisplayTool {
96
96
  };
97
97
  this.onCameraModified = (evt) => {
98
98
  const eventDetail = evt.detail;
99
- const { element, previousCamera, camera } = eventDetail;
99
+ const { previousCamera, camera } = eventDetail;
100
+ const element = eventDetail.element ||
101
+ evt.currentTarget ||
102
+ evt.target;
103
+ if (!element || !previousCamera) {
104
+ return;
105
+ }
100
106
  const enabledElement = getEnabledElement(element);
101
107
  const viewport = enabledElement.viewport;
102
108
  if (element !== this._elementWithCursor) {
@@ -11,7 +11,6 @@ class CircleSculptCursor {
11
11
  maxToolSize: null,
12
12
  };
13
13
  }
14
- static { this.shapeName = 'Circle'; }
15
14
  renderShape(svgDrawingHelper, canvasLocation, options) {
16
15
  const circleUID = '0';
17
16
  drawCircleSvg(svgDrawingHelper, 'SculptorTool', circleUID, canvasLocation, this.toolInfo.toolSize, options);
@@ -74,4 +73,5 @@ class CircleSculptCursor {
74
73
  return vec3.distance(point, mousePoint) < this.toolInfo.radius;
75
74
  }
76
75
  }
76
+ CircleSculptCursor.shapeName = 'Circle';
77
77
  export default CircleSculptCursor;
@@ -4,6 +4,7 @@ import { eventTarget, getEnabledElement, getEnabledElementByIds, } from '@corner
4
4
  import { mat4, vec3 } from 'gl-matrix';
5
5
  import { BaseTool } from './base';
6
6
  import { getToolGroup } from '../store/ToolGroupManager';
7
+ import { applyViewportPresentation, getViewportPresentation, } from '../utilities/viewportPresentation';
7
8
  class TrackballRotateTool extends BaseTool {
8
9
  constructor(toolProps = {}, defaultToolProps = {
9
10
  supportedInteractionTypes: ['Mouse', 'Touch'],
@@ -64,9 +65,9 @@ class TrackballRotateTool extends BaseTool {
64
65
  return;
65
66
  }
66
67
  const { viewport } = element;
67
- const viewPresentation = viewport.getViewPresentation();
68
+ const viewPresentation = getViewportPresentation(viewport);
68
69
  viewport.resetCamera();
69
- viewport.setViewPresentation(viewPresentation);
70
+ applyViewportPresentation(viewport, viewPresentation);
70
71
  viewport.render();
71
72
  });
72
73
  resizeObserver.observe(element);
@@ -12,6 +12,7 @@ import { Events } from '../enums';
12
12
  import { PLANEINDEX, SPHEREINDEX, NUM_CLIPPING_PLANES, extractVolumeDirectionVectors, parseCornerKey, copyClippingPlanes, } from '../utilities/volumeCropping';
13
13
  import { addLine3DBetweenPoints, calculateAdaptiveSphereRadius, } from '../utilities/draw3D';
14
14
  import { isDragOwnedBy } from '../utilities/interactionDragCoordinator';
15
+ import { applyViewportPresentation, getViewportPresentation, } from '../utilities/viewportPresentation';
15
16
  class VolumeCroppingTool extends BaseTool {
16
17
  constructor(toolProps = {}, defaultToolProps = {
17
18
  configuration: {
@@ -708,9 +709,9 @@ class VolumeCroppingTool extends BaseTool {
708
709
  return;
709
710
  }
710
711
  const { viewport } = element;
711
- const viewPresentation = viewport.getViewPresentation();
712
+ const viewPresentation = getViewportPresentation(viewport);
712
713
  viewport.resetCamera();
713
- viewport.setViewPresentation(viewPresentation);
714
+ applyViewportPresentation(viewport, viewPresentation);
714
715
  viewport.render();
715
716
  });
716
717
  resizeObserver.observe(element);
@@ -19,12 +19,13 @@ declare class WindowLevelTool extends BaseTool {
19
19
  lower: any;
20
20
  upper: any;
21
21
  };
22
- getNewRange({ viewport, deltaPointsCanvas, volumeId, lower, upper }: {
22
+ getNewRange({ viewport, deltaPointsCanvas, volumeId, lower, upper, voiLutFunction, }: {
23
23
  viewport: any;
24
24
  deltaPointsCanvas: any;
25
25
  volumeId: any;
26
26
  lower: any;
27
27
  upper: any;
28
+ voiLutFunction: any;
28
29
  }): {
29
30
  lower: number;
30
31
  upper: number;
@@ -45,7 +45,10 @@ class WindowLevelTool extends BaseTool {
45
45
  const { viewport } = enabledElement;
46
46
  let volumeId, lower, upper, modality, newRange, viewportsContainingVolumeUID;
47
47
  let isPreScaled = false;
48
- const properties = viewport.getProperties();
48
+ const properties = getViewportVOIProperties(viewport);
49
+ if (!properties?.voiRange) {
50
+ throw new Error('Viewport is not a valid type');
51
+ }
49
52
  if (viewport instanceof VolumeViewport) {
50
53
  volumeId = viewport.getVolumeId();
51
54
  viewportsContainingVolumeUID =
@@ -86,12 +89,13 @@ class WindowLevelTool extends BaseTool {
86
89
  volumeId,
87
90
  lower,
88
91
  upper,
92
+ voiLutFunction: properties.VOILUTFunction,
89
93
  });
90
94
  }
91
95
  if (newRange.lower >= newRange.upper) {
92
96
  return;
93
97
  }
94
- viewport.setProperties({
98
+ setViewportVOIProperties(viewport, {
95
99
  voiRange: newRange,
96
100
  });
97
101
  viewport.render();
@@ -120,7 +124,7 @@ class WindowLevelTool extends BaseTool {
120
124
  upper = isPreScaled ? Math.max(upper, 0.1) : upper;
121
125
  return { lower, upper };
122
126
  }
123
- getNewRange({ viewport, deltaPointsCanvas, volumeId, lower, upper }) {
127
+ getNewRange({ viewport, deltaPointsCanvas, volumeId, lower, upper, voiLutFunction, }) {
124
128
  const multiplier = this._getMultiplierFromDynamicRange(viewport, volumeId) ||
125
129
  DEFAULT_MULTIPLIER;
126
130
  const wwDelta = deltaPointsCanvas[0] * multiplier;
@@ -129,7 +133,6 @@ class WindowLevelTool extends BaseTool {
129
133
  windowWidth += wwDelta;
130
134
  windowCenter += wcDelta;
131
135
  windowWidth = Math.max(windowWidth, 1);
132
- const voiLutFunction = viewport.getProperties().VOILUTFunction;
133
136
  return utilities.windowLevel.toLowHighRange(windowWidth, windowCenter, voiLutFunction);
134
137
  }
135
138
  _getMultiplierFromDynamicRange(viewport, volumeId) {
@@ -206,3 +209,44 @@ class WindowLevelTool extends BaseTool {
206
209
  }
207
210
  WindowLevelTool.toolName = 'WindowLevel';
208
211
  export default WindowLevelTool;
212
+ function getViewportVOIProperties(viewport) {
213
+ const legacyViewport = viewport;
214
+ if (typeof legacyViewport.getProperties === 'function') {
215
+ return legacyViewport.getProperties();
216
+ }
217
+ const target = getDataPresentationTarget(viewport);
218
+ if (!target) {
219
+ return;
220
+ }
221
+ const dataPresentation = target.viewport.getDisplaySetPresentation?.(target.dataId);
222
+ const defaultVOIRange = target.viewport.getDefaultVOIRange?.(target.dataId);
223
+ return {
224
+ ...(dataPresentation || {}),
225
+ voiRange: dataPresentation?.voiRange ?? defaultVOIRange,
226
+ };
227
+ }
228
+ function setViewportVOIProperties(viewport, props) {
229
+ const legacyViewport = viewport;
230
+ if (typeof legacyViewport.setProperties === 'function') {
231
+ legacyViewport.setProperties(props);
232
+ return;
233
+ }
234
+ const target = getDataPresentationTarget(viewport);
235
+ if (!target) {
236
+ return;
237
+ }
238
+ target.viewport.setDisplaySetPresentation?.(target.dataId, props);
239
+ }
240
+ function getDataPresentationTarget(viewport) {
241
+ const genericViewport = viewport;
242
+ const dataId = genericViewport.getSourceDataId?.();
243
+ if (!dataId ||
244
+ typeof genericViewport.getDisplaySetPresentation !== 'function' ||
245
+ typeof genericViewport.setDisplaySetPresentation !== 'function') {
246
+ return;
247
+ }
248
+ return {
249
+ viewport: genericViewport,
250
+ dataId,
251
+ };
252
+ }
@@ -17,5 +17,13 @@ declare class ZoomTool extends BaseTool {
17
17
  _dragPerspectiveProjection: (evt: EventTypes.InteractionEventType, viewport: Types.IStackViewport | Types.IVolumeViewport, camera: Types.ICamera, pinch?: boolean) => void;
18
18
  _zoom(evt: EventTypes.MouseWheelEventType): void;
19
19
  _panCallback(evt: EventTypes.InteractionEventType): void;
20
+ _dragViewportZoom(evt: EventTypes.InteractionEventType, viewport: {
21
+ getZoom(): number;
22
+ setZoom(...args: unknown[]): void;
23
+ }): void;
24
+ _applyViewportZoomDelta(viewport: {
25
+ getZoom(): number;
26
+ setZoom(...args: unknown[]): void;
27
+ }, element: HTMLDivElement, deltaY: number, canvasPoint?: Types.Point2): void;
20
28
  }
21
29
  export default ZoomTool;