@cornerstonejs/tools 5.0.0-beta.1 → 5.0.1

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 (290) 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/index.d.ts +2 -2
  18. package/dist/esm/index.js +2 -2
  19. package/dist/esm/init.js +2 -0
  20. package/dist/esm/stateManagement/annotation/FrameOfReferenceSpecificAnnotationManager.js +10 -4
  21. package/dist/esm/stateManagement/segmentation/SegmentationRenderingEngine.js +23 -20
  22. package/dist/esm/stateManagement/segmentation/SegmentationRepresentationDisplayRegistry.d.ts +12 -0
  23. package/dist/esm/stateManagement/segmentation/SegmentationRepresentationDisplayRegistry.js +7 -0
  24. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.d.ts +1 -10
  25. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.js +28 -149
  26. package/dist/esm/stateManagement/segmentation/addColorLUT.js +7 -1
  27. package/dist/esm/stateManagement/segmentation/getCurrentLabelmapImageIdForViewport.js +16 -1
  28. package/dist/esm/stateManagement/segmentation/helpers/clearSegmentValue.js +9 -7
  29. package/dist/esm/stateManagement/segmentation/helpers/getSegmentationActor.d.ts +1 -1
  30. package/dist/esm/stateManagement/segmentation/helpers/getSegmentationActor.js +3 -2
  31. package/dist/esm/stateManagement/segmentation/helpers/getViewportLabelmapRenderMode.d.ts +5 -0
  32. package/dist/esm/stateManagement/segmentation/helpers/getViewportLabelmapRenderMode.js +58 -0
  33. package/dist/esm/stateManagement/segmentation/helpers/labelmapImageMapperSupport.d.ts +52 -0
  34. package/dist/esm/stateManagement/segmentation/helpers/labelmapImageMapperSupport.js +246 -0
  35. package/dist/esm/stateManagement/segmentation/helpers/labelmapSegmentationState.d.ts +1 -0
  36. package/dist/esm/stateManagement/segmentation/helpers/labelmapSegmentationState.js +1 -0
  37. package/dist/esm/stateManagement/segmentation/helpers/normalizeSegmentationInput.js +12 -1
  38. package/dist/esm/stateManagement/segmentation/internalAddSegmentationRepresentation.js +3 -3
  39. package/dist/esm/stateManagement/segmentation/labelmapModel/index.d.ts +9 -0
  40. package/dist/esm/stateManagement/segmentation/labelmapModel/index.js +7 -0
  41. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapEditTransaction.d.ts +54 -0
  42. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapEditTransaction.js +224 -0
  43. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageIdMapping.d.ts +6 -0
  44. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageIdMapping.js +39 -0
  45. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageReferenceResolver.d.ts +23 -0
  46. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageReferenceResolver.js +269 -0
  47. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLayerStore.d.ts +15 -0
  48. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLayerStore.js +160 -0
  49. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLegacyAdapter.d.ts +4 -0
  50. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLegacyAdapter.js +42 -0
  51. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapSegmentBindings.d.ts +11 -0
  52. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapSegmentBindings.js +73 -0
  53. package/dist/esm/stateManagement/segmentation/labelmapModel/normalizeLabelmapSegmentationData.d.ts +17 -0
  54. package/dist/esm/stateManagement/segmentation/labelmapModel/normalizeLabelmapSegmentationData.js +75 -0
  55. package/dist/esm/stateManagement/segmentation/labelmapModel/privateLabelmap.d.ts +5 -0
  56. package/dist/esm/stateManagement/segmentation/labelmapModel/privateLabelmap.js +106 -0
  57. package/dist/esm/stateManagement/segmentation/models/SegmentModel.d.ts +11 -0
  58. package/dist/esm/stateManagement/segmentation/models/SegmentModel.js +19 -0
  59. package/dist/esm/stateManagement/segmentation/models/SegmentationModel.d.ts +12 -0
  60. package/dist/esm/stateManagement/segmentation/models/SegmentationModel.js +23 -0
  61. package/dist/esm/stateManagement/segmentation/removeSegmentationRepresentations.js +6 -10
  62. package/dist/esm/stateManagement/segmentation/segmentIndex.js +24 -0
  63. package/dist/esm/stateManagement/segmentation/segmentationEventManager.js +2 -9
  64. package/dist/esm/stateManagement/segmentation/segmentationState.d.ts +2 -1
  65. package/dist/esm/stateManagement/segmentation/segmentationState.js +4 -1
  66. package/dist/esm/store/SynchronizerManager/Synchronizer.d.ts +3 -1
  67. package/dist/esm/store/state.js +2 -1
  68. package/dist/esm/synchronizers/callbacks/imageSliceSyncCallback.js +12 -3
  69. package/dist/esm/synchronizers/callbacks/presentationViewSyncCallback.js +5 -2
  70. package/dist/esm/synchronizers/callbacks/zoomPanSyncCallback.js +51 -3
  71. package/dist/esm/synchronizers/synchronizers/createPresentationViewSynchronizer.d.ts +1 -1
  72. package/dist/esm/tools/AdvancedMagnifyTool.js +4 -1
  73. package/dist/esm/tools/CrosshairsTool.d.ts +4 -0
  74. package/dist/esm/tools/CrosshairsTool.js +95 -41
  75. package/dist/esm/tools/MagnifyTool.js +3 -1
  76. package/dist/esm/tools/OrientationControllerTool.d.ts +45 -0
  77. package/dist/esm/tools/OrientationControllerTool.js +454 -0
  78. package/dist/esm/tools/OrientationMarkerTool.js +4 -4
  79. package/dist/esm/tools/PanTool.js +26 -3
  80. package/dist/esm/tools/PlanarRotateTool.js +19 -4
  81. package/dist/esm/tools/ReferenceCursors.js +7 -1
  82. package/dist/esm/tools/SculptorTool/CircleSculptCursor.js +1 -1
  83. package/dist/esm/tools/TrackballRotateTool.js +3 -2
  84. package/dist/esm/tools/VolumeCroppingControlTool.d.ts +10 -35
  85. package/dist/esm/tools/VolumeCroppingControlTool.js +179 -699
  86. package/dist/esm/tools/VolumeCroppingTool.d.ts +34 -32
  87. package/dist/esm/tools/VolumeCroppingTool.js +813 -532
  88. package/dist/esm/tools/WindowLevelTool.d.ts +2 -1
  89. package/dist/esm/tools/WindowLevelTool.js +48 -4
  90. package/dist/esm/tools/ZoomTool.d.ts +8 -0
  91. package/dist/esm/tools/ZoomTool.js +92 -11
  92. package/dist/esm/tools/annotation/AngleTool.js +38 -32
  93. package/dist/esm/tools/annotation/ArrowAnnotateTool.js +30 -28
  94. package/dist/esm/tools/annotation/BidirectionalTool.js +51 -49
  95. package/dist/esm/tools/annotation/CircleROITool.d.ts +1 -0
  96. package/dist/esm/tools/annotation/CircleROITool.js +89 -51
  97. package/dist/esm/tools/annotation/CobbAngleTool.js +1 -1
  98. package/dist/esm/tools/annotation/DragProbeTool.js +1 -1
  99. package/dist/esm/tools/annotation/ETDRSGridTool.js +1 -1
  100. package/dist/esm/tools/annotation/EllipticalROITool.js +46 -39
  101. package/dist/esm/tools/annotation/HeightTool.js +1 -1
  102. package/dist/esm/tools/annotation/KeyImageTool.js +11 -11
  103. package/dist/esm/tools/annotation/LabelTool.js +37 -35
  104. package/dist/esm/tools/annotation/LengthTool.js +35 -33
  105. package/dist/esm/tools/annotation/LivewireContourSegmentationTool.js +6 -4
  106. package/dist/esm/tools/annotation/LivewireContourTool.js +4 -8
  107. package/dist/esm/tools/annotation/PlanarFreehandContourSegmentationTool.js +6 -4
  108. package/dist/esm/tools/annotation/PlanarFreehandROITool.d.ts +2 -1
  109. package/dist/esm/tools/annotation/PlanarFreehandROITool.js +11 -8
  110. package/dist/esm/tools/annotation/ProbeTool.js +66 -56
  111. package/dist/esm/tools/annotation/RectangleROITool.js +48 -37
  112. package/dist/esm/tools/annotation/RegionSegmentPlusTool.js +1 -1
  113. package/dist/esm/tools/annotation/RegionSegmentTool.js +1 -1
  114. package/dist/esm/tools/annotation/SplineContourSegmentationTool.js +1 -1
  115. package/dist/esm/tools/annotation/SplineROITool.js +60 -56
  116. package/dist/esm/tools/annotation/UltrasoundDirectionalTool.js +1 -1
  117. package/dist/esm/tools/annotation/UltrasoundPleuraBLineTool/UltrasoundPleuraBLineTool.js +57 -55
  118. package/dist/esm/tools/annotation/VideoRedactionTool.js +1 -1
  119. package/dist/esm/tools/base/AnnotationDisplayTool.js +9 -6
  120. package/dist/esm/tools/base/AnnotationTool.js +2 -1
  121. package/dist/esm/tools/base/BaseTool.js +16 -10
  122. package/dist/esm/tools/base/ContourSegmentationBaseTool.js +1 -1
  123. package/dist/esm/tools/base/GrowCutBaseTool.js +2 -2
  124. package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.d.ts +2 -4
  125. package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.js +15 -85
  126. package/dist/esm/tools/displayTools/Labelmap/labelmapActorStyle.d.ts +5 -0
  127. package/dist/esm/tools/displayTools/Labelmap/labelmapActorStyle.js +191 -0
  128. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.d.ts +4 -3
  129. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +48 -209
  130. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/createLabelmapRenderPlan.d.ts +3 -0
  131. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/createLabelmapRenderPlan.js +51 -0
  132. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/index.d.ts +4 -0
  133. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/index.js +3 -0
  134. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/legacyVolumePlan.d.ts +14 -0
  135. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/legacyVolumePlan.js +143 -0
  136. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/planarGenericVolumeLabelmap.d.ts +40 -0
  137. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/planarGenericVolumeLabelmap.js +79 -0
  138. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/removeLabelmapRepresentationFromViewport.d.ts +3 -0
  139. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/removeLabelmapRepresentationFromViewport.js +18 -0
  140. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/resolveLabelmapRenderPlan.d.ts +9 -0
  141. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/resolveLabelmapRenderPlan.js +56 -0
  142. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/stackImagePlan.d.ts +11 -0
  143. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/stackImagePlan.js +35 -0
  144. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/types.d.ts +48 -0
  145. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/types.js +0 -0
  146. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/volumeSliceImageMapperPlan.d.ts +13 -0
  147. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/volumeSliceImageMapperPlan.js +34 -0
  148. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan.d.ts +2 -0
  149. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan.js +1 -0
  150. package/dist/esm/tools/displayTools/Labelmap/labelmapRepresentationUID.d.ts +8 -0
  151. package/dist/esm/tools/displayTools/Labelmap/labelmapRepresentationUID.js +18 -0
  152. package/dist/esm/tools/displayTools/Labelmap/removeLabelmapFromElement.js +2 -2
  153. package/dist/esm/tools/displayTools/Labelmap/removeLabelmapRepresentationData.d.ts +3 -0
  154. package/dist/esm/tools/displayTools/Labelmap/removeLabelmapRepresentationData.js +16 -0
  155. package/dist/esm/tools/displayTools/Labelmap/syncStackLabelmapActors.d.ts +2 -0
  156. package/dist/esm/tools/displayTools/Labelmap/syncStackLabelmapActors.js +135 -0
  157. package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapImageMapper.d.ts +16 -0
  158. package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapImageMapper.js +267 -0
  159. package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapSliceData.d.ts +27 -0
  160. package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapSliceData.js +185 -0
  161. package/dist/esm/tools/displayTools/registerBuiltInSegmentationRepresentationDisplays.d.ts +1 -0
  162. package/dist/esm/tools/displayTools/registerBuiltInSegmentationRepresentationDisplays.js +16 -0
  163. package/dist/esm/tools/index.d.ts +2 -1
  164. package/dist/esm/tools/index.js +2 -1
  165. package/dist/esm/tools/segmentation/BrushTool.d.ts +9 -2
  166. package/dist/esm/tools/segmentation/BrushTool.js +123 -26
  167. package/dist/esm/tools/segmentation/CircleScissorsTool.js +19 -36
  168. package/dist/esm/tools/segmentation/LabelmapBaseTool.d.ts +2 -3
  169. package/dist/esm/tools/segmentation/LabelmapBaseTool.js +77 -46
  170. package/dist/esm/tools/segmentation/LabelmapEditWithContour.js +3 -3
  171. package/dist/esm/tools/segmentation/PaintFillTool.js +11 -4
  172. package/dist/esm/tools/segmentation/RectangleROIStartEndThresholdTool.d.ts +2 -0
  173. package/dist/esm/tools/segmentation/RectangleROIStartEndThresholdTool.js +16 -8
  174. package/dist/esm/tools/segmentation/RectangleScissorsTool.js +13 -6
  175. package/dist/esm/tools/segmentation/SegmentBidirectionalTool.js +63 -61
  176. package/dist/esm/tools/segmentation/SegmentSelectTool.js +4 -4
  177. package/dist/esm/tools/segmentation/SphereScissorsTool.js +11 -31
  178. package/dist/esm/tools/segmentation/strategies/BrushStrategy.d.ts +7 -0
  179. package/dist/esm/tools/segmentation/strategies/BrushStrategy.js +47 -24
  180. package/dist/esm/tools/segmentation/strategies/compositions/circularCursor.js +49 -21
  181. package/dist/esm/tools/segmentation/strategies/compositions/determineSegmentIndex.js +2 -2
  182. package/dist/esm/tools/segmentation/strategies/compositions/dynamicThreshold.js +5 -1
  183. package/dist/esm/tools/segmentation/strategies/compositions/islandRemovalComposition.js +2 -2
  184. package/dist/esm/tools/segmentation/strategies/compositions/preview.js +2 -2
  185. package/dist/esm/tools/segmentation/strategies/compositions/setValue.js +14 -6
  186. package/dist/esm/tools/segmentation/strategies/fillCircle.d.ts +3 -1
  187. package/dist/esm/tools/segmentation/strategies/fillCircle.js +38 -31
  188. package/dist/esm/tools/segmentation/strategies/fillSphere.js +11 -3
  189. package/dist/esm/tools/segmentation/strategies/utils/crossLayerErase.d.ts +4 -0
  190. package/dist/esm/tools/segmentation/strategies/utils/crossLayerErase.js +23 -0
  191. package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.js +1 -1
  192. package/dist/esm/tools/segmentation/strategies/utils/handleUseSegmentCenterIndex.js +12 -11
  193. package/dist/esm/tools/segmentation/strategies/utils/labelmapOverlap.d.ts +4 -0
  194. package/dist/esm/tools/segmentation/strategies/utils/labelmapOverlap.js +41 -0
  195. package/dist/esm/tools/segmentation/strategies/utils/overwritePolicy.d.ts +3 -0
  196. package/dist/esm/tools/segmentation/strategies/utils/overwritePolicy.js +31 -0
  197. package/dist/esm/tools/segmentation/strategies/utils/segmentSeparation.d.ts +3 -0
  198. package/dist/esm/tools/segmentation/strategies/utils/segmentSeparation.js +38 -0
  199. package/dist/esm/tools/segmentation/utils/LazyBrushEditController.d.ts +19 -0
  200. package/dist/esm/tools/segmentation/utils/LazyBrushEditController.js +55 -0
  201. package/dist/esm/tools/segmentation/utils/lazyBrushPreview.d.ts +3 -0
  202. package/dist/esm/tools/segmentation/utils/lazyBrushPreview.js +34 -0
  203. package/dist/esm/tools/segmentation/utils/shouldUseLazyLabelmapEditing.d.ts +3 -0
  204. package/dist/esm/tools/segmentation/utils/shouldUseLazyLabelmapEditing.js +42 -0
  205. package/dist/esm/types/ISynchronizerEventHandler.d.ts +2 -1
  206. package/dist/esm/types/LabelmapToolOperationData.d.ts +5 -0
  207. package/dist/esm/types/LabelmapTypes.d.ts +29 -6
  208. package/dist/esm/types/SegmentationStateTypes.d.ts +6 -0
  209. package/dist/esm/utilities/boundingBox/index.d.ts +2 -1
  210. package/dist/esm/utilities/boundingBox/index.js +2 -1
  211. package/dist/esm/utilities/boundingBox/snapIndexBounds.d.ts +3 -0
  212. package/dist/esm/utilities/boundingBox/snapIndexBounds.js +9 -0
  213. package/dist/esm/utilities/calibrateImageSpacing.js +17 -2
  214. package/dist/esm/utilities/contours/AnnotationToPointData.js +1 -1
  215. package/dist/esm/utilities/draw3D/addLine3DBetweenPoints.d.ts +7 -0
  216. package/dist/esm/utilities/draw3D/addLine3DBetweenPoints.js +34 -0
  217. package/dist/esm/utilities/draw3D/calculateAdaptiveSphereRadius.d.ts +6 -0
  218. package/dist/esm/utilities/draw3D/calculateAdaptiveSphereRadius.js +7 -0
  219. package/dist/esm/utilities/draw3D/index.d.ts +2 -0
  220. package/dist/esm/utilities/draw3D/index.js +2 -0
  221. package/dist/esm/utilities/drawing/getTextBoxCoordsCanvas.js +22 -14
  222. package/dist/esm/utilities/getCenterAndRadiusInCanvas.d.ts +6 -0
  223. package/dist/esm/utilities/getCenterAndRadiusInCanvas.js +26 -0
  224. package/dist/esm/utilities/getEllipseWorldCoordinates.d.ts +2 -0
  225. package/dist/esm/utilities/getEllipseWorldCoordinates.js +26 -0
  226. package/dist/esm/utilities/getSphereBoundsInfo.js +5 -1
  227. package/dist/esm/utilities/getViewportICamera.d.ts +4 -0
  228. package/dist/esm/utilities/getViewportICamera.js +23 -0
  229. package/dist/esm/utilities/getViewportsForAnnotation.js +5 -1
  230. package/dist/esm/utilities/index.d.ts +2 -1
  231. package/dist/esm/utilities/index.js +2 -1
  232. package/dist/esm/utilities/interactionDragCoordinator.d.ts +5 -0
  233. package/dist/esm/utilities/interactionDragCoordinator.js +16 -0
  234. package/dist/esm/utilities/math/basic/BasicStatsCalculator.js +9 -7
  235. package/dist/esm/utilities/pointInSurroundingSphereCallback.js +8 -1
  236. package/dist/esm/utilities/segmentation/InterpolationManager/InterpolationManager.js +121 -118
  237. package/dist/esm/utilities/segmentation/SegmentStatsCalculator.js +5 -4
  238. package/dist/esm/utilities/segmentation/VolumetricCalculator.js +1 -1
  239. package/dist/esm/utilities/segmentation/createLabelmapVolumeForViewport.js +1 -1
  240. package/dist/esm/utilities/segmentation/getReferenceVolumeForSegmentation.js +1 -1
  241. package/dist/esm/utilities/segmentation/getReferenceVolumeForSegmentationVolume.js +11 -2
  242. package/dist/esm/utilities/segmentation/getSegmentIndexAtLabelmapBorder.js +36 -17
  243. package/dist/esm/utilities/segmentation/getSegmentIndexAtWorldPoint.js +42 -25
  244. package/dist/esm/utilities/segmentation/getUniqueSegmentIndices.js +3 -30
  245. package/dist/esm/utilities/segmentation/index.d.ts +2 -1
  246. package/dist/esm/utilities/segmentation/index.js +2 -1
  247. package/dist/esm/utilities/segmentation/utilsForWorker.js +6 -2
  248. package/dist/esm/utilities/segmentation/validateLabelmap.js +1 -1
  249. package/dist/esm/utilities/stackPrefetch/stackPrefetch.js +0 -1
  250. package/dist/esm/utilities/touch/index.js +3 -2
  251. package/dist/esm/utilities/viewportCapabilities.d.ts +16 -0
  252. package/dist/esm/utilities/viewportCapabilities.js +18 -0
  253. package/dist/esm/utilities/viewportFilters/filterViewportsWithParallelNormals.d.ts +1 -1
  254. package/dist/esm/utilities/viewportFilters/filterViewportsWithParallelNormals.js +12 -4
  255. package/dist/esm/utilities/viewportFilters/filterViewportsWithSameOrientation.d.ts +1 -1
  256. package/dist/esm/utilities/viewportFilters/filterViewportsWithSameOrientation.js +11 -4
  257. package/dist/esm/utilities/viewportFilters/getViewportIdsWithToolToRender.js +1 -1
  258. package/dist/esm/utilities/viewportPresentation.d.ts +3 -0
  259. package/dist/esm/utilities/viewportPresentation.js +26 -0
  260. package/dist/esm/utilities/volumeCropping/computePlanePlaneIntersection.d.ts +6 -0
  261. package/dist/esm/utilities/volumeCropping/computePlanePlaneIntersection.js +37 -0
  262. package/dist/esm/utilities/volumeCropping/constants.d.ts +31 -0
  263. package/dist/esm/utilities/volumeCropping/constants.js +31 -0
  264. package/dist/esm/utilities/volumeCropping/copyClippingPlanes.d.ts +2 -0
  265. package/dist/esm/utilities/volumeCropping/copyClippingPlanes.js +6 -0
  266. package/dist/esm/utilities/volumeCropping/extractVolumeDirectionVectors.d.ts +9 -0
  267. package/dist/esm/utilities/volumeCropping/extractVolumeDirectionVectors.js +9 -0
  268. package/dist/esm/utilities/volumeCropping/findLineBoundsIntersection.d.ts +5 -0
  269. package/dist/esm/utilities/volumeCropping/findLineBoundsIntersection.js +50 -0
  270. package/dist/esm/utilities/volumeCropping/getColorKeyForPlaneIndex.d.ts +1 -0
  271. package/dist/esm/utilities/volumeCropping/getColorKeyForPlaneIndex.js +13 -0
  272. package/dist/esm/utilities/volumeCropping/getOrientationFromNormal.d.ts +2 -0
  273. package/dist/esm/utilities/volumeCropping/getOrientationFromNormal.js +19 -0
  274. package/dist/esm/utilities/volumeCropping/index.d.ts +9 -0
  275. package/dist/esm/utilities/volumeCropping/index.js +9 -0
  276. package/dist/esm/utilities/volumeCropping/parseCornerKey.d.ts +8 -0
  277. package/dist/esm/utilities/volumeCropping/parseCornerKey.js +11 -0
  278. package/dist/esm/utilities/volumeCropping/types.d.ts +5 -0
  279. package/dist/esm/utilities/volumeCropping/types.js +0 -0
  280. package/dist/esm/utilities/vtkjs/AnnotatedRhombicuboctahedronActor/index.d.ts +31 -0
  281. package/dist/esm/utilities/vtkjs/AnnotatedRhombicuboctahedronActor/index.js +391 -0
  282. package/dist/esm/utilities/vtkjs/OrientationControllerWidget/index.d.ts +69 -0
  283. package/dist/esm/utilities/vtkjs/OrientationControllerWidget/index.js +804 -0
  284. package/dist/esm/utilities/vtkjs/RhombicuboctahedronSource/index.d.ts +7 -0
  285. package/dist/esm/utilities/vtkjs/RhombicuboctahedronSource/index.js +144 -0
  286. package/dist/esm/utilities/vtkjs/index.d.ts +3 -0
  287. package/dist/esm/utilities/vtkjs/index.js +3 -0
  288. package/dist/esm/version.d.ts +1 -1
  289. package/dist/esm/version.js +1 -1
  290. package/package.json +10 -9
@@ -17,7 +17,6 @@ import ContourSegmentationBaseTool from '../base/ContourSegmentationBaseTool';
17
17
  import { getCalibratedLengthUnitsAndScale, throttle } from '../../utilities';
18
18
  const CLICK_CLOSE_CURVE_SQR_DIST = 10 ** 2;
19
19
  class LivewireContourTool extends ContourSegmentationBaseTool {
20
- static { this.toolName = 'LivewireContour'; }
21
20
  constructor(toolProps = {}, defaultToolProps = {
22
21
  supportedInteractionTypes: ['Mouse', 'Touch'],
23
22
  configuration: {
@@ -335,12 +334,9 @@ class LivewireContourTool extends ContourSegmentationBaseTool {
335
334
  const deltaInX = vec3.distance(originalWorldPoint, deltaXPoint);
336
335
  const deltaInY = vec3.distance(originalWorldPoint, deltaYPoint);
337
336
  const { imageData } = image;
338
- const { scale, areaUnit } = getCalibratedLengthUnitsAndScale(image, () => {
337
+ const { areaUnit } = getCalibratedLengthUnitsAndScale(image, () => {
339
338
  const { maxX: canvasMaxX, maxY: canvasMaxY, minX: canvasMinX, minY: canvasMinY, } = math.polyline.getAABB(canvasCoordinates);
340
- const topLeftBBWorld = viewport.canvasToWorld([
341
- canvasMinX,
342
- canvasMinY,
343
- ]);
339
+ const topLeftBBWorld = viewport.canvasToWorld([canvasMinX, canvasMinY]);
344
340
  const topLeftBBIndex = utilities.transformWorldToIndex(imageData, topLeftBBWorld);
345
341
  const bottomRightBBWorld = viewport.canvasToWorld([
346
342
  canvasMaxX,
@@ -349,8 +345,7 @@ class LivewireContourTool extends ContourSegmentationBaseTool {
349
345
  const bottomRightBBIndex = utilities.transformWorldToIndex(imageData, bottomRightBBWorld);
350
346
  return [topLeftBBIndex, bottomRightBBIndex];
351
347
  });
352
- let area = math.polyline.getArea(canvasCoordinates) / scale / scale;
353
- area *= deltaInX * deltaInY;
348
+ const area = math.polyline.getArea(canvasCoordinates) * deltaInX * deltaInY;
354
349
  cachedStats[targetId] = {
355
350
  Modality: metadata.Modality,
356
351
  area,
@@ -641,6 +636,7 @@ class LivewireContourTool extends ContourSegmentationBaseTool {
641
636
  });
642
637
  }
643
638
  }
639
+ LivewireContourTool.toolName = 'LivewireContour';
644
640
  export default LivewireContourTool;
645
641
  function defaultGetTextLines(data, targetId) {
646
642
  const cachedVolumeStats = data.cachedStats[targetId];
@@ -1,9 +1,9 @@
1
+ var _a;
1
2
  import { utilities } from '@cornerstonejs/core';
2
3
  import { triggerSegmentationDataModified } from '../../stateManagement/segmentation/triggerSegmentationEvents';
3
4
  import PlanarFreehandROITool from './PlanarFreehandROITool';
4
5
  import AnnotationToPointData from '../../utilities/contours/AnnotationToPointData';
5
6
  export class PlanarFreehandContourSegmentationTool extends PlanarFreehandROITool {
6
- static { this.toolName = 'PlanarFreehandContourSegmentationTool'; }
7
7
  constructor(toolProps) {
8
8
  const initialProps = utilities.deepMerge({
9
9
  configuration: {
@@ -13,9 +13,6 @@ export class PlanarFreehandContourSegmentationTool extends PlanarFreehandROITool
13
13
  }, toolProps);
14
14
  super(initialProps);
15
15
  }
16
- static {
17
- AnnotationToPointData.register(this);
18
- }
19
16
  isContourSegmentationTool() {
20
17
  return true;
21
18
  }
@@ -30,4 +27,9 @@ export class PlanarFreehandContourSegmentationTool extends PlanarFreehandROITool
30
27
  return renderResult;
31
28
  }
32
29
  }
30
+ _a = PlanarFreehandContourSegmentationTool;
31
+ PlanarFreehandContourSegmentationTool.toolName = 'PlanarFreehandContourSegmentationTool';
32
+ (() => {
33
+ AnnotationToPointData.register(_a);
34
+ })();
33
35
  export default PlanarFreehandContourSegmentationTool;
@@ -35,11 +35,12 @@ declare class PlanarFreehandROITool extends ContourSegmentationBaseTool {
35
35
  protected renderAnnotationInstance(renderContext: AnnotationRenderContext): boolean;
36
36
  _calculateStatsIfActive(annotation: PlanarFreehandROIAnnotation, targetId: string, viewport: any, renderingEngine: any, enabledElement: any): void;
37
37
  private _calculateCachedStats;
38
- protected updateClosedCachedStats({ viewport, points, imageData, metadata, cachedStats, targetId, modalityUnit, canvasCoordinates, calibratedScale, deltaInX, deltaInY, }: {
38
+ protected updateClosedCachedStats({ viewport, points, imageData, metadata, voxelManager, cachedStats, targetId, modalityUnit, canvasCoordinates, calibratedScale, deltaInX, deltaInY, }: {
39
39
  viewport: any;
40
40
  points: any;
41
41
  imageData: any;
42
42
  metadata: any;
43
+ voxelManager: any;
43
44
  cachedStats: any;
44
45
  targetId: any;
45
46
  modalityUnit: any;
@@ -20,11 +20,11 @@ import { BasicStatsCalculator } from '../../utilities/math/basic';
20
20
  import ContourSegmentationBaseTool from '../base/ContourSegmentationBaseTool';
21
21
  import { KeyboardBindings, ChangeTypes, MeasurementType } from '../../enums';
22
22
  import { getPixelValueUnits } from '../../utilities/getPixelValueUnits';
23
+ import snapIndexBounds from '../../utilities/boundingBox/snapIndexBounds';
23
24
  const { pointCanProjectOnLine } = polyline;
24
25
  const { EPSILON } = CONSTANTS;
25
26
  const PARALLEL_THRESHOLD = 1 - EPSILON;
26
27
  class PlanarFreehandROITool extends ContourSegmentationBaseTool {
27
- static { this.toolName = 'PlanarFreehandROI'; }
28
28
  constructor(toolProps = {}, defaultToolProps = {
29
29
  supportedInteractionTypes: ['Mouse', 'Touch'],
30
30
  configuration: {
@@ -140,7 +140,7 @@ class PlanarFreehandROITool extends ContourSegmentationBaseTool {
140
140
  if (!image) {
141
141
  continue;
142
142
  }
143
- const { imageData, metadata } = image;
143
+ const { imageData, metadata, voxelManager } = image;
144
144
  const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p));
145
145
  const modalityUnitOptions = {
146
146
  isPreScaled: isViewportPreScaled(viewport, targetId),
@@ -182,6 +182,7 @@ class PlanarFreehandROITool extends ContourSegmentationBaseTool {
182
182
  points,
183
183
  imageData,
184
184
  metadata,
185
+ voxelManager,
185
186
  cachedStats,
186
187
  modalityUnit,
187
188
  calibratedScale,
@@ -408,9 +409,8 @@ class PlanarFreehandROITool extends ContourSegmentationBaseTool {
408
409
  }
409
410
  }
410
411
  }
411
- updateClosedCachedStats({ viewport, points, imageData, metadata, cachedStats, targetId, modalityUnit, canvasCoordinates, calibratedScale, deltaInX, deltaInY, }) {
412
- const { scale, areaUnit, unit } = calibratedScale;
413
- const { voxelManager } = viewport.getImageData();
412
+ updateClosedCachedStats({ viewport, points, imageData, metadata, voxelManager, cachedStats, targetId, modalityUnit, canvasCoordinates, calibratedScale, deltaInX, deltaInY, }) {
413
+ const { areaUnit, unit } = calibratedScale;
414
414
  const indexPoints = points.map((point) => imageData.worldToIndex(point));
415
415
  let iMin = Number.MAX_SAFE_INTEGER;
416
416
  let iMax = Number.MIN_SAFE_INTEGER;
@@ -419,7 +419,7 @@ class PlanarFreehandROITool extends ContourSegmentationBaseTool {
419
419
  let kMin = Number.MAX_SAFE_INTEGER;
420
420
  let kMax = Number.MIN_SAFE_INTEGER;
421
421
  for (let j = 0; j < points.length; j++) {
422
- const worldPosIndex = indexPoints[j].map(Math.floor);
422
+ const worldPosIndex = indexPoints[j];
423
423
  iMin = Math.min(iMin, worldPosIndex[0]);
424
424
  iMax = Math.max(iMax, worldPosIndex[0]);
425
425
  jMin = Math.min(jMin, worldPosIndex[1]);
@@ -427,8 +427,10 @@ class PlanarFreehandROITool extends ContourSegmentationBaseTool {
427
427
  kMin = Math.min(kMin, worldPosIndex[2]);
428
428
  kMax = Math.max(kMax, worldPosIndex[2]);
429
429
  }
430
- let area = polyline.getArea(canvasCoordinates) / scale / scale;
431
- area *= deltaInX * deltaInY;
430
+ [iMin, iMax] = snapIndexBounds(iMin, iMax);
431
+ [jMin, jMax] = snapIndexBounds(jMin, jMax);
432
+ [kMin, kMax] = snapIndexBounds(kMin, kMax);
433
+ const area = polyline.getArea(canvasCoordinates) * deltaInX * deltaInY;
432
434
  const perimeter = PlanarFreehandROITool.calculateLengthInIndex(calibratedScale, indexPoints, closed);
433
435
  const iDelta = 0.01 * (iMax - iMin);
434
436
  const jDelta = 0.01 * (jMax - jMin);
@@ -530,6 +532,7 @@ class PlanarFreehandROITool extends ContourSegmentationBaseTool {
530
532
  };
531
533
  }
532
534
  }
535
+ PlanarFreehandROITool.toolName = 'PlanarFreehandROI';
533
536
  function defaultGetTextLines(data, targetId) {
534
537
  const cachedVolumeStats = data.cachedStats[targetId];
535
538
  const { area, mean, stdDev, length, perimeter, max, min, isEmptyArea, unit, areaUnit, modalityUnit, } = cachedVolumeStats || {};
@@ -1,3 +1,4 @@
1
+ var _a;
1
2
  import { vec2, vec3 } from 'gl-matrix';
2
3
  import { getEnabledElement, VolumeViewport, utilities as csUtils, getEnabledElementByViewportId, } from '@cornerstonejs/core';
3
4
  import { AnnotationTool } from '../base';
@@ -13,25 +14,12 @@ import { resetElementCursor, hideElementCursor, } from '../../cursors/elementCur
13
14
  import { isAnnotationVisible } from '../../stateManagement/annotation/annotationVisibility';
14
15
  import triggerAnnotationRenderForViewportIds from '../../utilities/triggerAnnotationRenderForViewportIds';
15
16
  import { getPixelValueUnits } from '../../utilities/getPixelValueUnits';
17
+ import { viewportSupportsImageSlices } from '../../utilities/viewportCapabilities';
16
18
  import { isViewportPreScaled } from '../../utilities/viewport/isViewportPreScaled';
17
19
  const { transformWorldToIndex } = csUtils;
18
20
  class ProbeTool extends AnnotationTool {
19
- static { this.toolName = 'Probe'; }
20
- static { this.probeDefaults = {
21
- supportedInteractionTypes: ['Mouse', 'Touch'],
22
- configuration: {
23
- shadow: true,
24
- preventHandleOutsideImage: false,
25
- getTextLines: defaultGetTextLines,
26
- handleRadius: '6',
27
- textCanvasOffset: {
28
- x: 6,
29
- y: -6,
30
- },
31
- },
32
- }; }
33
21
  constructor(toolProps = {}, defaultToolProps) {
34
- super(toolProps, AnnotationTool.mergeDefaultProps(ProbeTool.probeDefaults, defaultToolProps));
22
+ super(toolProps, AnnotationTool.mergeDefaultProps(_a.probeDefaults, defaultToolProps));
35
23
  this.addNewAnnotation = (evt) => {
36
24
  const eventDetail = evt.detail;
37
25
  const { currentPoints, element } = eventDetail;
@@ -176,17 +164,24 @@ class ProbeTool extends AnnotationTool {
176
164
  this._calculateCachedStats(annotation, renderingEngine, enabledElement);
177
165
  if (viewport instanceof VolumeViewport) {
178
166
  const { referencedImageId } = annotation.metadata;
179
- for (const targetId in data.cachedStats) {
180
- if (targetId.startsWith('imageId')) {
181
- const viewports = renderingEngine.getStackViewports();
182
- const invalidatedStack = viewports.find((vp) => {
183
- const referencedImageURI = csUtils.imageIdToURI(referencedImageId);
184
- const hasImageURI = vp.hasImageURI(referencedImageURI);
185
- const currentImageURI = csUtils.imageIdToURI(vp.getCurrentImageId());
186
- return hasImageURI && currentImageURI !== referencedImageURI;
187
- });
188
- if (invalidatedStack) {
189
- delete data.cachedStats[targetId];
167
+ if (referencedImageId) {
168
+ for (const targetId in data.cachedStats) {
169
+ if (targetId.startsWith('imageId')) {
170
+ const viewports = renderingEngine
171
+ .getViewports()
172
+ .filter(viewportSupportsImageSlices);
173
+ const invalidatedStack = viewports.find((vp) => {
174
+ const currentImageId = vp.getCurrentImageId();
175
+ if (!currentImageId)
176
+ return false;
177
+ const referencedImageURI = csUtils.imageIdToURI(referencedImageId);
178
+ const hasImageURI = vp.hasImageURI(referencedImageURI);
179
+ const currentImageURI = csUtils.imageIdToURI(currentImageId);
180
+ return hasImageURI && currentImageURI !== referencedImageURI;
181
+ });
182
+ if (invalidatedStack) {
183
+ delete data.cachedStats[targetId];
184
+ }
190
185
  }
191
186
  }
192
187
  }
@@ -225,36 +220,6 @@ class ProbeTool extends AnnotationTool {
225
220
  return vec2.distance(canvasCoords, annotationCanvasCoordinate) < proximity;
226
221
  }
227
222
  toolSelectedCallback() { }
228
- static { this.hydrate = (viewportId, points, options) => {
229
- const enabledElement = getEnabledElementByViewportId(viewportId);
230
- if (!enabledElement) {
231
- return;
232
- }
233
- const { FrameOfReferenceUID, referencedImageId, viewPlaneNormal, viewUp, instance, viewport, } = this.hydrateBase(ProbeTool, enabledElement, points, options);
234
- const { toolInstance, ...serializableOptions } = options || {};
235
- const annotation = {
236
- annotationUID: options?.annotationUID || csUtils.uuidv4(),
237
- data: {
238
- handles: {
239
- points,
240
- },
241
- },
242
- highlighted: false,
243
- autoGenerated: false,
244
- invalidated: false,
245
- isLocked: false,
246
- isVisible: true,
247
- metadata: {
248
- toolName: instance.getToolName(),
249
- viewPlaneNormal,
250
- FrameOfReferenceUID,
251
- referencedImageId,
252
- ...serializableOptions,
253
- },
254
- };
255
- addAnnotation(annotation, viewport.element);
256
- triggerAnnotationRenderForViewportIds([viewport.id]);
257
- }; }
258
223
  getHandleNearImagePoint(element, annotation, canvasCoords, proximity) {
259
224
  const enabledElement = getEnabledElement(element);
260
225
  const { viewport } = enabledElement;
@@ -358,6 +323,51 @@ class ProbeTool extends AnnotationTool {
358
323
  return cachedStats;
359
324
  }
360
325
  }
326
+ _a = ProbeTool;
327
+ ProbeTool.toolName = 'Probe';
328
+ ProbeTool.probeDefaults = {
329
+ supportedInteractionTypes: ['Mouse', 'Touch'],
330
+ configuration: {
331
+ shadow: true,
332
+ preventHandleOutsideImage: false,
333
+ getTextLines: defaultGetTextLines,
334
+ handleRadius: '6',
335
+ textCanvasOffset: {
336
+ x: 6,
337
+ y: -6,
338
+ },
339
+ },
340
+ };
341
+ ProbeTool.hydrate = (viewportId, points, options) => {
342
+ const enabledElement = getEnabledElementByViewportId(viewportId);
343
+ if (!enabledElement) {
344
+ return;
345
+ }
346
+ const { FrameOfReferenceUID, referencedImageId, viewPlaneNormal, viewUp, instance, viewport, } = _a.hydrateBase(_a, enabledElement, points, options);
347
+ const { toolInstance, ...serializableOptions } = options || {};
348
+ const annotation = {
349
+ annotationUID: options?.annotationUID || csUtils.uuidv4(),
350
+ data: {
351
+ handles: {
352
+ points,
353
+ },
354
+ },
355
+ highlighted: false,
356
+ autoGenerated: false,
357
+ invalidated: false,
358
+ isLocked: false,
359
+ isVisible: true,
360
+ metadata: {
361
+ toolName: instance.getToolName(),
362
+ viewPlaneNormal,
363
+ FrameOfReferenceUID,
364
+ referencedImageId,
365
+ ...serializableOptions,
366
+ },
367
+ };
368
+ addAnnotation(annotation, viewport.element);
369
+ triggerAnnotationRenderForViewportIds([viewport.id]);
370
+ };
361
371
  function defaultGetTextLines(data, targetId) {
362
372
  const cachedVolumeStats = data.cachedStats[targetId];
363
373
  const { index, value, modalityUnit } = cachedVolumeStats;
@@ -1,3 +1,4 @@
1
+ var _a;
1
2
  import { AnnotationTool } from '../base';
2
3
  import { getEnabledElement, VolumeViewport, utilities as csUtils, getEnabledElementByViewportId, } from '@cornerstonejs/core';
3
4
  import { vec3 } from 'gl-matrix';
@@ -15,12 +16,12 @@ import * as rectangle from '../../utilities/math/rectangle';
15
16
  import { resetElementCursor, hideElementCursor, } from '../../cursors/elementCursor';
16
17
  import triggerAnnotationRenderForViewportIds from '../../utilities/triggerAnnotationRenderForViewportIds';
17
18
  import { getPixelValueUnits } from '../../utilities/getPixelValueUnits';
19
+ import { viewportSupportsImageSlices } from '../../utilities/viewportCapabilities';
18
20
  import { isViewportPreScaled } from '../../utilities/viewport/isViewportPreScaled';
19
21
  import { BasicStatsCalculator } from '../../utilities/math/basic';
20
22
  import { getStyleProperty } from '../../stateManagement/annotation/config/helpers';
21
23
  const { transformWorldToIndex } = csUtils;
22
24
  class RectangleROITool extends AnnotationTool {
23
- static { this.toolName = 'RectangleROI'; }
24
25
  constructor(toolProps = {}, defaultToolProps = {
25
26
  supportedInteractionTypes: ['Mouse', 'Touch'],
26
27
  configuration: {
@@ -352,7 +353,9 @@ class RectangleROITool extends AnnotationTool {
352
353
  const { referencedImageId } = annotation.metadata;
353
354
  for (const targetId in data.cachedStats) {
354
355
  if (targetId.startsWith('imageId')) {
355
- const viewports = renderingEngine.getStackViewports();
356
+ const viewports = renderingEngine
357
+ .getViewports()
358
+ .filter(viewportSupportsImageSlices);
356
359
  const invalidatedStack = viewports.find((vp) => {
357
360
  const referencedImageURI = csUtils.imageIdToURI(referencedImageId);
358
361
  const hasImageURI = vp.hasImageURI(referencedImageURI);
@@ -456,8 +459,14 @@ class RectangleROITool extends AnnotationTool {
456
459
  ];
457
460
  const handles = [pos1Index, pos2Index];
458
461
  const calibrate = getCalibratedLengthUnitsAndScale(image, handles);
459
- const width = RectangleROITool.calculateLengthInIndex(calibrate, indexHandles.slice(0, 2));
460
- const height = RectangleROITool.calculateLengthInIndex(calibrate, indexHandles.slice(2, 4));
462
+ const width = _a.calculateLengthInIndex(calibrate, [
463
+ indexHandles[0],
464
+ indexHandles[1],
465
+ ]);
466
+ const height = _a.calculateLengthInIndex(calibrate, [
467
+ indexHandles[0],
468
+ indexHandles[2],
469
+ ]);
461
470
  const area = Math.abs(width * height);
462
471
  const { areaUnit } = calibrate;
463
472
  const pixelUnitsOptions = {
@@ -507,40 +516,42 @@ class RectangleROITool extends AnnotationTool {
507
516
  };
508
517
  this._throttledCalculateCachedStats = throttle(this._calculateCachedStats, 100, { trailing: true });
509
518
  }
510
- static { this.hydrate = (viewportId, points, options) => {
511
- const enabledElement = getEnabledElementByViewportId(viewportId);
512
- if (!enabledElement) {
513
- return;
514
- }
515
- const { FrameOfReferenceUID, referencedImageId, viewPlaneNormal, instance, viewport, } = this.hydrateBase(RectangleROITool, enabledElement, points, options);
516
- const { toolInstance, ...serializableOptions } = options || {};
517
- const annotation = {
518
- annotationUID: options?.annotationUID || csUtils.uuidv4(),
519
- data: {
520
- handles: {
521
- points,
522
- activeHandleIndex: null,
523
- },
524
- label: '',
525
- cachedStats: {},
526
- },
527
- highlighted: false,
528
- autoGenerated: false,
529
- invalidated: false,
530
- isLocked: false,
531
- isVisible: true,
532
- metadata: {
533
- toolName: instance.getToolName(),
534
- viewPlaneNormal,
535
- FrameOfReferenceUID,
536
- referencedImageId,
537
- ...serializableOptions,
538
- },
539
- };
540
- addAnnotation(annotation, viewport.element);
541
- triggerAnnotationRenderForViewportIds([viewport.id]);
542
- }; }
543
519
  }
520
+ _a = RectangleROITool;
521
+ RectangleROITool.toolName = 'RectangleROI';
522
+ RectangleROITool.hydrate = (viewportId, points, options) => {
523
+ const enabledElement = getEnabledElementByViewportId(viewportId);
524
+ if (!enabledElement) {
525
+ return;
526
+ }
527
+ const { FrameOfReferenceUID, referencedImageId, viewPlaneNormal, instance, viewport, } = _a.hydrateBase(_a, enabledElement, points, options);
528
+ const { toolInstance, ...serializableOptions } = options || {};
529
+ const annotation = {
530
+ annotationUID: options?.annotationUID || csUtils.uuidv4(),
531
+ data: {
532
+ handles: {
533
+ points,
534
+ activeHandleIndex: null,
535
+ },
536
+ label: '',
537
+ cachedStats: {},
538
+ },
539
+ highlighted: false,
540
+ autoGenerated: false,
541
+ invalidated: false,
542
+ isLocked: false,
543
+ isVisible: true,
544
+ metadata: {
545
+ toolName: instance.getToolName(),
546
+ viewPlaneNormal,
547
+ FrameOfReferenceUID,
548
+ referencedImageId,
549
+ ...serializableOptions,
550
+ },
551
+ };
552
+ addAnnotation(annotation, viewport.element);
553
+ triggerAnnotationRenderForViewportIds([viewport.id]);
554
+ };
544
555
  function defaultGetTextLines(data, targetId) {
545
556
  const cachedVolumeStats = data.cachedStats[targetId];
546
557
  const { area, mean, max, stdDev, areaUnit, modalityUnit, min } = cachedVolumeStats;
@@ -4,7 +4,6 @@ import GrowCutBaseTool from '../base/GrowCutBaseTool';
4
4
  import { calculateGrowCutSeeds } from '../../utilities/segmentation/growCut/runOneClickGrowCut';
5
5
  import { ToolModes } from '../../enums';
6
6
  class RegionSegmentPlusTool extends GrowCutBaseTool {
7
- static { this.toolName = 'RegionSegmentPlus'; }
8
7
  constructor(toolProps = {}, defaultToolProps = {
9
8
  supportedInteractionTypes: ['Mouse', 'Touch'],
10
9
  configuration: {
@@ -125,4 +124,5 @@ class RegionSegmentPlusTool extends GrowCutBaseTool {
125
124
  });
126
125
  }
127
126
  }
127
+ RegionSegmentPlusTool.toolName = 'RegionSegmentPlus';
128
128
  export default RegionSegmentPlusTool;
@@ -7,7 +7,6 @@ import triggerAnnotationRenderForViewportUIDs from '../../utilities/triggerAnnot
7
7
  import { growCut } from '../../utilities/segmentation';
8
8
  import GrowCutBaseTool from '../base/GrowCutBaseTool';
9
9
  class RegionSegmentTool extends GrowCutBaseTool {
10
- static { this.toolName = 'RegionSegment'; }
11
10
  constructor(toolProps = {}, defaultToolProps = {
12
11
  supportedInteractionTypes: ['Mouse', 'Touch'],
13
12
  configuration: {
@@ -111,4 +110,5 @@ class RegionSegmentTool extends GrowCutBaseTool {
111
110
  });
112
111
  }
113
112
  }
113
+ RegionSegmentTool.toolName = 'RegionSegment';
114
114
  export default RegionSegmentTool;
@@ -3,7 +3,6 @@ import SplineROITool from './SplineROITool';
3
3
  import { Events } from '../../enums';
4
4
  import { convertContourSegmentationAnnotation } from '../../utilities/contourSegmentation';
5
5
  class SplineContourSegmentationTool extends SplineROITool {
6
- static { this.toolName = 'SplineContourSegmentationTool'; }
7
6
  constructor(toolProps) {
8
7
  const initialProps = utilities.deepMerge({
9
8
  configuration: {
@@ -33,4 +32,5 @@ class SplineContourSegmentationTool extends SplineROITool {
33
32
  convertContourSegmentationAnnotation(annotation);
34
33
  }
35
34
  }
35
+ SplineContourSegmentationTool.toolName = 'SplineContourSegmentationTool';
36
36
  export default SplineContourSegmentationTool;
@@ -1,3 +1,4 @@
1
+ var _a;
1
2
  import { getEnabledElement, eventTarget, triggerEvent, utilities, getEnabledElementByViewportId, } from '@cornerstonejs/core';
2
3
  import { vec3 } from 'gl-matrix';
3
4
  import { addAnnotation, getChildAnnotations, removeAnnotation, } from '../../stateManagement/annotation/annotationState';
@@ -46,9 +47,6 @@ const splineToolNames = [
46
47
  'CardinalSplineROI',
47
48
  ];
48
49
  class SplineROITool extends ContourSegmentationBaseTool {
49
- static { this.toolName = 'SplineROI'; }
50
- static { this.SplineTypes = SplineTypesEnum; }
51
- static { this.Actions = SplineToolActions; }
52
50
  constructor(toolProps = {}, defaultToolProps = {
53
51
  supportedInteractionTypes: ['Mouse', 'Touch'],
54
52
  configuration: {
@@ -118,6 +116,9 @@ class SplineROITool extends ContourSegmentationBaseTool {
118
116
  this.fireChangeOnUpdate = null;
119
117
  this.isPointNearTool = (element, annotation, canvasCoords, proximity) => {
120
118
  const { instance: spline } = annotation.data.spline;
119
+ if (!spline) {
120
+ return false;
121
+ }
121
122
  return spline.isPointNearCurve(canvasCoords, proximity);
122
123
  };
123
124
  this.toolSelectedCallback = (evt, annotation) => {
@@ -470,12 +471,9 @@ class SplineROITool extends ContourSegmentationBaseTool {
470
471
  const deltaInX = vec3.distance(originalWorldPoint, deltaXPoint);
471
472
  const deltaInY = vec3.distance(originalWorldPoint, deltaYPoint);
472
473
  const { imageData } = image;
473
- const { scale, areaUnit } = getCalibratedLengthUnitsAndScale(image, () => {
474
+ const { areaUnit } = getCalibratedLengthUnitsAndScale(image, () => {
474
475
  const { maxX: canvasMaxX, maxY: canvasMaxY, minX: canvasMinX, minY: canvasMinY, } = math.polyline.getAABB(canvasCoordinates);
475
- const topLeftBBWorld = viewport.canvasToWorld([
476
- canvasMinX,
477
- canvasMinY,
478
- ]);
476
+ const topLeftBBWorld = viewport.canvasToWorld([canvasMinX, canvasMinY]);
479
477
  const topLeftBBIndex = utilities.transformWorldToIndex(imageData, topLeftBBWorld);
480
478
  const bottomRightBBWorld = viewport.canvasToWorld([
481
479
  canvasMaxX,
@@ -484,8 +482,7 @@ class SplineROITool extends ContourSegmentationBaseTool {
484
482
  const bottomRightBBIndex = utilities.transformWorldToIndex(imageData, bottomRightBBWorld);
485
483
  return [topLeftBBIndex, bottomRightBBIndex];
486
484
  });
487
- let area = math.polyline.getArea(canvasCoordinates) / scale / scale;
488
- area *= deltaInX * deltaInY;
485
+ const area = math.polyline.getArea(canvasCoordinates) * deltaInX * deltaInY;
489
486
  cachedStats[targetId] = {
490
487
  Modality: metadata.Modality,
491
488
  area,
@@ -584,6 +581,9 @@ class SplineROITool extends ContourSegmentationBaseTool {
584
581
  const { lineWidth, lineDash, color, locked: annotationLocked, } = annotationStyle;
585
582
  const canvasCoordinates = controlPoints.map((p) => worldToCanvas(p));
586
583
  const { drawPreviewEnabled } = this.configuration.spline;
584
+ if (annotation.data.spline && !annotation.data.spline.instance) {
585
+ annotation.data.spline.instance = new (this._getSplineConfig(annotation.data.spline.type).Class)();
586
+ }
587
587
  const splineType = annotation.data.spline.type;
588
588
  const splineConfig = this._getSplineConfig(splineType);
589
589
  const spline = annotation.data.spline.instance;
@@ -780,54 +780,58 @@ class SplineROITool extends ContourSegmentationBaseTool {
780
780
  }
781
781
  return spline;
782
782
  }
783
- static { this.hydrate = (viewportId, points, options) => {
784
- const enabledElement = getEnabledElementByViewportId(viewportId);
785
- if (!enabledElement) {
786
- return;
787
- }
788
- if (points.length < SPLINE_MIN_POINTS) {
789
- console.warn('Spline requires at least 3 control points');
790
- return;
791
- }
792
- const { FrameOfReferenceUID, referencedImageId, viewPlaneNormal, viewUp, instance, viewport, } = this.hydrateBase(SplineROITool, enabledElement, points, options);
793
- const splineType = options?.splineType || SplineTypesEnum.CatmullRom;
794
- const splineConfig = instance._getSplineConfig(splineType);
795
- const SplineClass = splineConfig.Class;
796
- const splineInstance = new SplineClass();
797
- const { toolInstance, ...serializableOptions } = options || {};
798
- const annotation = {
799
- annotationUID: options?.annotationUID || utilities.uuidv4(),
800
- data: {
801
- handles: {
802
- points,
803
- },
804
- label: '',
805
- cachedStats: {},
806
- spline: {
807
- type: splineType,
808
- instance: splineInstance,
809
- },
810
- contour: {
811
- closed: true,
812
- },
783
+ }
784
+ _a = SplineROITool;
785
+ SplineROITool.toolName = 'SplineROI';
786
+ SplineROITool.SplineTypes = SplineTypesEnum;
787
+ SplineROITool.Actions = SplineToolActions;
788
+ SplineROITool.hydrate = (viewportId, points, options) => {
789
+ const enabledElement = getEnabledElementByViewportId(viewportId);
790
+ if (!enabledElement) {
791
+ return;
792
+ }
793
+ if (points.length < SPLINE_MIN_POINTS) {
794
+ console.warn('Spline requires at least 3 control points');
795
+ return;
796
+ }
797
+ const { FrameOfReferenceUID, referencedImageId, viewPlaneNormal, viewUp, instance, viewport, } = _a.hydrateBase(_a, enabledElement, points, options);
798
+ const splineType = options?.splineType || SplineTypesEnum.CatmullRom;
799
+ const splineConfig = instance._getSplineConfig(splineType);
800
+ const SplineClass = splineConfig.Class;
801
+ const splineInstance = new SplineClass();
802
+ const { toolInstance, ...serializableOptions } = options || {};
803
+ const annotation = {
804
+ annotationUID: options?.annotationUID || utilities.uuidv4(),
805
+ data: {
806
+ handles: {
807
+ points,
813
808
  },
814
- highlighted: false,
815
- autoGenerated: false,
816
- invalidated: true,
817
- isLocked: false,
818
- isVisible: true,
819
- metadata: {
820
- toolName: instance.getToolName(),
821
- viewPlaneNormal,
822
- FrameOfReferenceUID,
823
- referencedImageId,
824
- ...serializableOptions,
809
+ label: '',
810
+ cachedStats: {},
811
+ spline: {
812
+ type: splineType,
813
+ instance: splineInstance,
825
814
  },
826
- };
827
- addAnnotation(annotation, viewport.element);
828
- triggerAnnotationRenderForViewportIds([viewport.id]);
829
- }; }
830
- }
815
+ contour: {
816
+ closed: true,
817
+ },
818
+ },
819
+ highlighted: false,
820
+ autoGenerated: false,
821
+ invalidated: true,
822
+ isLocked: false,
823
+ isVisible: true,
824
+ metadata: {
825
+ toolName: instance.getToolName(),
826
+ viewPlaneNormal,
827
+ FrameOfReferenceUID,
828
+ referencedImageId,
829
+ ...serializableOptions,
830
+ },
831
+ };
832
+ addAnnotation(annotation, viewport.element);
833
+ triggerAnnotationRenderForViewportIds([viewport.id]);
834
+ };
831
835
  function defaultGetTextLines(data, targetId) {
832
836
  const cachedVolumeStats = data.cachedStats[targetId];
833
837
  const { area, isEmptyArea, areaUnit } = cachedVolumeStats;
@@ -14,7 +14,6 @@ import { getCalibratedProbeUnitsAndValue } from '../../utilities/getCalibratedUn
14
14
  import { lineSegment } from '../../utilities/math';
15
15
  const { transformWorldToIndex } = csUtils;
16
16
  class UltrasoundDirectionalTool extends AnnotationTool {
17
- static { this.toolName = 'UltrasoundDirectionalTool'; }
18
17
  constructor(toolProps = {}, defaultToolProps = {
19
18
  supportedInteractionTypes: ['Mouse', 'Touch'],
20
19
  configuration: {
@@ -417,6 +416,7 @@ class UltrasoundDirectionalTool extends AnnotationTool {
417
416
  return cachedStats;
418
417
  }
419
418
  }
419
+ UltrasoundDirectionalTool.toolName = 'UltrasoundDirectionalTool';
420
420
  function defaultGetTextLines(data, targetId, configuration) {
421
421
  const cachedStats = data.cachedStats[targetId];
422
422
  const { xValues, yValues, units, isUnitless, isHorizontal } = cachedStats;