@cornerstonejs/tools 0.56.2 → 0.56.4

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 (352) hide show
  1. package/package.json +5 -4
  2. package/src/constants/COLOR_LUT.ts +262 -0
  3. package/src/constants/index.ts +3 -0
  4. package/src/cursors/ImageMouseCursor.ts +39 -0
  5. package/src/cursors/MouseCursor.ts +114 -0
  6. package/src/cursors/SVGCursorDescriptor.ts +462 -0
  7. package/src/cursors/SVGMouseCursor.ts +145 -0
  8. package/src/cursors/elementCursor.ts +69 -0
  9. package/src/cursors/index.ts +24 -0
  10. package/src/cursors/setCursorForElement.ts +33 -0
  11. package/src/drawingSvg/_getHash.ts +9 -0
  12. package/src/drawingSvg/_setAttributesIfNecessary.ts +13 -0
  13. package/src/drawingSvg/_setNewAttributesIfValid.ts +10 -0
  14. package/src/drawingSvg/clearByToolType.ts +26 -0
  15. package/src/drawingSvg/draw.ts +16 -0
  16. package/src/drawingSvg/drawArrow.ts +82 -0
  17. package/src/drawingSvg/drawCircle.ts +62 -0
  18. package/src/drawingSvg/drawEllipse.ts +71 -0
  19. package/src/drawingSvg/drawHandles.ts +87 -0
  20. package/src/drawingSvg/drawLine.ts +70 -0
  21. package/src/drawingSvg/drawLink.ts +76 -0
  22. package/src/drawingSvg/drawLinkedTextBox.ts +64 -0
  23. package/src/drawingSvg/drawPolyline.ts +80 -0
  24. package/src/drawingSvg/drawRect.ts +70 -0
  25. package/src/drawingSvg/drawTextBox.ts +213 -0
  26. package/src/drawingSvg/getSvgDrawingHelper.ts +98 -0
  27. package/src/drawingSvg/index.ts +23 -0
  28. package/src/enums/AnnotationStyleStates.ts +22 -0
  29. package/src/enums/Events.ts +242 -0
  30. package/src/enums/SegmentationRepresentations.ts +12 -0
  31. package/src/enums/ToolBindings.ts +37 -0
  32. package/src/enums/ToolModes.ts +31 -0
  33. package/src/enums/Touch.ts +8 -0
  34. package/src/enums/index.js +16 -0
  35. package/src/eventDispatchers/annotationModifiedEventDispatcher.ts +41 -0
  36. package/src/eventDispatchers/cameraModifiedEventDispatcher.ts +41 -0
  37. package/src/eventDispatchers/imageRenderedEventDispatcher.ts +37 -0
  38. package/src/eventDispatchers/imageSpacingCalibratedEventDispatcher.ts +50 -0
  39. package/src/eventDispatchers/index.js +15 -0
  40. package/src/eventDispatchers/keyboardEventHandlers/index.js +4 -0
  41. package/src/eventDispatchers/keyboardEventHandlers/keyDown.ts +29 -0
  42. package/src/eventDispatchers/keyboardEventHandlers/keyUp.ts +33 -0
  43. package/src/eventDispatchers/keyboardToolEventDispatcher.ts +28 -0
  44. package/src/eventDispatchers/mouseEventHandlers/index.js +19 -0
  45. package/src/eventDispatchers/mouseEventHandlers/mouseClick.ts +13 -0
  46. package/src/eventDispatchers/mouseEventHandlers/mouseDoubleClick.ts +13 -0
  47. package/src/eventDispatchers/mouseEventHandlers/mouseDown.ts +196 -0
  48. package/src/eventDispatchers/mouseEventHandlers/mouseDownActivate.ts +35 -0
  49. package/src/eventDispatchers/mouseEventHandlers/mouseDrag.ts +25 -0
  50. package/src/eventDispatchers/mouseEventHandlers/mouseMove.ts +70 -0
  51. package/src/eventDispatchers/mouseEventHandlers/mouseUp.ts +9 -0
  52. package/src/eventDispatchers/mouseEventHandlers/mouseWheel.ts +13 -0
  53. package/src/eventDispatchers/mouseToolEventDispatcher.ts +64 -0
  54. package/src/eventDispatchers/shared/customCallbackHandler.ts +73 -0
  55. package/src/eventDispatchers/shared/getActiveToolForKeyboardEvent.ts +58 -0
  56. package/src/eventDispatchers/shared/getActiveToolForMouseEvent.ts +61 -0
  57. package/src/eventDispatchers/shared/getActiveToolForTouchEvent.ts +64 -0
  58. package/src/eventDispatchers/shared/getMouseModifier.ts +30 -0
  59. package/src/eventDispatchers/shared/getToolsWithModesForMouseEvent.ts +56 -0
  60. package/src/eventDispatchers/shared/getToolsWithModesForTouchEvent.ts +54 -0
  61. package/src/eventDispatchers/touchEventHandlers/index.js +15 -0
  62. package/src/eventDispatchers/touchEventHandlers/touchDrag.ts +23 -0
  63. package/src/eventDispatchers/touchEventHandlers/touchEnd.ts +9 -0
  64. package/src/eventDispatchers/touchEventHandlers/touchPress.ts +13 -0
  65. package/src/eventDispatchers/touchEventHandlers/touchStart.ts +174 -0
  66. package/src/eventDispatchers/touchEventHandlers/touchStartActivate.ts +36 -0
  67. package/src/eventDispatchers/touchEventHandlers/touchTap.ts +9 -0
  68. package/src/eventDispatchers/touchToolEventDispatcher.ts +51 -0
  69. package/src/eventListeners/annotations/annotationModifiedListener.ts +22 -0
  70. package/src/eventListeners/annotations/annotationSelectionListener.ts +29 -0
  71. package/src/eventListeners/annotations/index.ts +4 -0
  72. package/src/eventListeners/index.ts +28 -0
  73. package/src/eventListeners/keyboard/index.ts +16 -0
  74. package/src/eventListeners/keyboard/keyDownListener.ts +99 -0
  75. package/src/eventListeners/mouse/getMouseEventPoints.ts +66 -0
  76. package/src/eventListeners/mouse/index.ts +55 -0
  77. package/src/eventListeners/mouse/mouseDoubleClickListener.ts +55 -0
  78. package/src/eventListeners/mouse/mouseDownListener.ts +519 -0
  79. package/src/eventListeners/mouse/mouseMoveListener.ts +33 -0
  80. package/src/eventListeners/segmentation/index.ts +11 -0
  81. package/src/eventListeners/segmentation/segmentationDataModifiedEventListener.ts +61 -0
  82. package/src/eventListeners/segmentation/segmentationModifiedEventListener.ts +32 -0
  83. package/src/eventListeners/segmentation/segmentationRepresentationModifiedEventListener.ts +15 -0
  84. package/src/eventListeners/segmentation/segmentationRepresentationRemovedEventListener.ts +16 -0
  85. package/src/eventListeners/touch/getTouchEventPoints.ts +75 -0
  86. package/src/eventListeners/touch/index.ts +37 -0
  87. package/src/eventListeners/touch/preventGhostClick.js +72 -0
  88. package/src/eventListeners/touch/touchStartListener.ts +499 -0
  89. package/src/eventListeners/wheel/index.ts +27 -0
  90. package/src/eventListeners/wheel/normalizeWheel.ts +69 -0
  91. package/src/eventListeners/wheel/wheelListener.ts +51 -0
  92. package/src/index.ts +133 -0
  93. package/src/init.ts +187 -0
  94. package/src/stateManagement/annotation/FrameOfReferenceSpecificAnnotationManager.ts +399 -0
  95. package/src/stateManagement/annotation/annotationLocking.ts +178 -0
  96. package/src/stateManagement/annotation/annotationSelection.ts +163 -0
  97. package/src/stateManagement/annotation/annotationState.ts +180 -0
  98. package/src/stateManagement/annotation/annotationVisibility.ts +156 -0
  99. package/src/stateManagement/annotation/config/ToolStyle.ts +265 -0
  100. package/src/stateManagement/annotation/config/getFont.ts +36 -0
  101. package/src/stateManagement/annotation/config/getState.ts +26 -0
  102. package/src/stateManagement/annotation/config/helpers.ts +55 -0
  103. package/src/stateManagement/annotation/config/index.ts +5 -0
  104. package/src/stateManagement/annotation/helpers/state.ts +83 -0
  105. package/src/stateManagement/annotation/index.ts +15 -0
  106. package/src/stateManagement/index.js +40 -0
  107. package/src/stateManagement/segmentation/SegmentationStateManager.ts +491 -0
  108. package/src/stateManagement/segmentation/activeSegmentation.ts +60 -0
  109. package/src/stateManagement/segmentation/addSegmentationRepresentations.ts +77 -0
  110. package/src/stateManagement/segmentation/addSegmentations.ts +27 -0
  111. package/src/stateManagement/segmentation/config/index.ts +29 -0
  112. package/src/stateManagement/segmentation/config/segmentationColor.ts +132 -0
  113. package/src/stateManagement/segmentation/config/segmentationConfig.ts +195 -0
  114. package/src/stateManagement/segmentation/config/segmentationVisibility.ts +171 -0
  115. package/src/stateManagement/segmentation/helpers/index.ts +3 -0
  116. package/src/stateManagement/segmentation/helpers/normalizeSegmentationInput.ts +35 -0
  117. package/src/stateManagement/segmentation/helpers/validateSegmentationInput.ts +41 -0
  118. package/src/stateManagement/segmentation/index.ts +22 -0
  119. package/src/stateManagement/segmentation/removeSegmentationsFromToolGroup.ts +85 -0
  120. package/src/stateManagement/segmentation/segmentIndex.ts +38 -0
  121. package/src/stateManagement/segmentation/segmentLocking.ts +72 -0
  122. package/src/stateManagement/segmentation/segmentationState.ts +429 -0
  123. package/src/stateManagement/segmentation/triggerSegmentationEvents.ts +157 -0
  124. package/src/store/SynchronizerManager/Synchronizer.ts +344 -0
  125. package/src/store/SynchronizerManager/createSynchronizer.ts +41 -0
  126. package/src/store/SynchronizerManager/destroy.ts +14 -0
  127. package/src/store/SynchronizerManager/destroySynchronizer.ts +25 -0
  128. package/src/store/SynchronizerManager/getAllSynchronizers.ts +12 -0
  129. package/src/store/SynchronizerManager/getSynchronizer.ts +13 -0
  130. package/src/store/SynchronizerManager/getSynchronizersForViewport.ts +44 -0
  131. package/src/store/SynchronizerManager/index.js +15 -0
  132. package/src/store/ToolGroupManager/ToolGroup.ts +679 -0
  133. package/src/store/ToolGroupManager/createToolGroup.ts +33 -0
  134. package/src/store/ToolGroupManager/destroy.ts +24 -0
  135. package/src/store/ToolGroupManager/destroyToolGroup.ts +26 -0
  136. package/src/store/ToolGroupManager/getAllToolGroups.ts +12 -0
  137. package/src/store/ToolGroupManager/getToolGroup.ts +14 -0
  138. package/src/store/ToolGroupManager/getToolGroupForViewport.ts +44 -0
  139. package/src/store/ToolGroupManager/getToolGroupsWithToolName.ts +33 -0
  140. package/src/store/ToolGroupManager/index.ts +17 -0
  141. package/src/store/addEnabledElement.ts +137 -0
  142. package/src/store/addTool.ts +56 -0
  143. package/src/store/cancelActiveManipulations.ts +30 -0
  144. package/src/store/filterMoveableAnnotationTools.ts +61 -0
  145. package/src/store/filterToolsWithAnnotationsForElement.ts +51 -0
  146. package/src/store/filterToolsWithMoveableHandles.ts +51 -0
  147. package/src/store/index.ts +29 -0
  148. package/src/store/removeEnabledElement.ts +132 -0
  149. package/src/store/state.ts +57 -0
  150. package/src/store/svgNodeCache.ts +7 -0
  151. package/src/synchronizers/callbacks/areViewportsCoplanar .ts +12 -0
  152. package/src/synchronizers/callbacks/cameraSyncCallback.ts +33 -0
  153. package/src/synchronizers/callbacks/stackImageSyncCallback.ts +157 -0
  154. package/src/synchronizers/callbacks/voiSyncCallback.ts +51 -0
  155. package/src/synchronizers/callbacks/zoomPanSyncCallback.ts +43 -0
  156. package/src/synchronizers/index.ts +11 -0
  157. package/src/synchronizers/synchronizers/createCameraPositionSynchronizer.ts +25 -0
  158. package/src/synchronizers/synchronizers/createStackImageSynchronizer.ts +25 -0
  159. package/src/synchronizers/synchronizers/createVOISynchronizer.ts +24 -0
  160. package/src/synchronizers/synchronizers/createZoomPanSynchronizer.ts +25 -0
  161. package/src/synchronizers/synchronizers/index.ts +11 -0
  162. package/src/tools/CrosshairsTool.ts +2693 -0
  163. package/src/tools/MIPJumpToClickTool.ts +99 -0
  164. package/src/tools/MagnifyTool.ts +319 -0
  165. package/src/tools/PanTool.ts +58 -0
  166. package/src/tools/PlanarRotateTool.ts +77 -0
  167. package/src/tools/ReferenceCursors.ts +466 -0
  168. package/src/tools/ReferenceLinesTool.ts +279 -0
  169. package/src/tools/ScaleOverlayTool.ts +685 -0
  170. package/src/tools/StackScrollTool.ts +97 -0
  171. package/src/tools/StackScrollToolMouseWheelTool.ts +58 -0
  172. package/src/tools/TrackballRotateTool.ts +141 -0
  173. package/src/tools/VolumeRotateMouseWheelTool.ts +86 -0
  174. package/src/tools/WindowLevelTool.ts +260 -0
  175. package/src/tools/ZoomTool.ts +293 -0
  176. package/src/tools/annotation/AngleTool.ts +835 -0
  177. package/src/tools/annotation/ArrowAnnotateTool.ts +820 -0
  178. package/src/tools/annotation/BidirectionalTool.ts +1350 -0
  179. package/src/tools/annotation/CircleROITool.ts +1070 -0
  180. package/src/tools/annotation/CobbAngleTool.ts +815 -0
  181. package/src/tools/annotation/DragProbeTool.ts +213 -0
  182. package/src/tools/annotation/EllipticalROITool.ts +1223 -0
  183. package/src/tools/annotation/LengthTool.ts +861 -0
  184. package/src/tools/annotation/PlanarFreehandROITool.ts +636 -0
  185. package/src/tools/annotation/ProbeTool.ts +681 -0
  186. package/src/tools/annotation/RectangleROITool.ts +1028 -0
  187. package/src/tools/annotation/planarFreehandROITool/closedContourEditLoop.ts +488 -0
  188. package/src/tools/annotation/planarFreehandROITool/drawLoop.ts +462 -0
  189. package/src/tools/annotation/planarFreehandROITool/editLoopCommon.ts +331 -0
  190. package/src/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.ts +74 -0
  191. package/src/tools/annotation/planarFreehandROITool/openContourEditLoop.ts +612 -0
  192. package/src/tools/annotation/planarFreehandROITool/openContourEndEditLoop.ts +74 -0
  193. package/src/tools/annotation/planarFreehandROITool/renderMethods.ts +407 -0
  194. package/src/tools/base/AnnotationDisplayTool.ts +228 -0
  195. package/src/tools/base/AnnotationTool.ts +307 -0
  196. package/src/tools/base/BaseTool.ts +215 -0
  197. package/src/tools/base/index.ts +4 -0
  198. package/src/tools/displayTools/Contour/addContourToElement.ts +135 -0
  199. package/src/tools/displayTools/Contour/contourDisplay.ts +252 -0
  200. package/src/tools/displayTools/Contour/index.ts +3 -0
  201. package/src/tools/displayTools/Contour/removeContourFromElement.ts +35 -0
  202. package/src/tools/displayTools/Labelmap/addLabelmapToElement.ts +57 -0
  203. package/src/tools/displayTools/Labelmap/index.ts +4 -0
  204. package/src/tools/displayTools/Labelmap/labelmapConfig.ts +37 -0
  205. package/src/tools/displayTools/Labelmap/labelmapDisplay.ts +461 -0
  206. package/src/tools/displayTools/Labelmap/removeLabelmapFromElement.ts +27 -0
  207. package/src/tools/displayTools/Labelmap/validateRepresentationData.ts +30 -0
  208. package/src/tools/displayTools/SegmentationDisplayTool.ts +198 -0
  209. package/src/tools/index.ts +84 -0
  210. package/src/tools/segmentation/BrushTool.ts +474 -0
  211. package/src/tools/segmentation/CircleScissorsTool.ts +365 -0
  212. package/src/tools/segmentation/PaintFillTool.ts +370 -0
  213. package/src/tools/segmentation/RectangleROIStartEndThresholdTool.ts +471 -0
  214. package/src/tools/segmentation/RectangleROIThresholdTool.ts +281 -0
  215. package/src/tools/segmentation/RectangleScissorsTool.ts +382 -0
  216. package/src/tools/segmentation/SphereScissorsTool.ts +368 -0
  217. package/src/tools/segmentation/strategies/eraseCircle.ts +30 -0
  218. package/src/tools/segmentation/strategies/eraseRectangle.ts +81 -0
  219. package/src/tools/segmentation/strategies/eraseSphere.ts +27 -0
  220. package/src/tools/segmentation/strategies/fillCircle.ts +185 -0
  221. package/src/tools/segmentation/strategies/fillRectangle.ts +110 -0
  222. package/src/tools/segmentation/strategies/fillSphere.ts +88 -0
  223. package/src/tools/segmentation/strategies/index.ts +9 -0
  224. package/src/types/AnnotationGroupSelector.ts +7 -0
  225. package/src/types/AnnotationStyle.ts +42 -0
  226. package/src/types/AnnotationTypes.ts +109 -0
  227. package/src/types/BoundsIJK.ts +5 -0
  228. package/src/types/CINETypes.ts +32 -0
  229. package/src/types/ContourTypes.ts +26 -0
  230. package/src/types/CursorTypes.ts +12 -0
  231. package/src/types/EventTypes.ts +657 -0
  232. package/src/types/FloodFillTypes.ts +19 -0
  233. package/src/types/IAnnotationManager.ts +89 -0
  234. package/src/types/IDistance.ts +16 -0
  235. package/src/types/IPoints.ts +18 -0
  236. package/src/types/ISetToolModeOptions.ts +29 -0
  237. package/src/types/ISynchronizerEventHandler.ts +11 -0
  238. package/src/types/IToolClassReference.ts +5 -0
  239. package/src/types/IToolGroup.ts +72 -0
  240. package/src/types/ITouchPoints.ts +14 -0
  241. package/src/types/InteractionTypes.ts +6 -0
  242. package/src/types/InternalToolTypes.ts +19 -0
  243. package/src/types/JumpToSliceOptions.ts +7 -0
  244. package/src/types/LabelmapTypes.ts +41 -0
  245. package/src/types/PlanarBoundingBox.ts +8 -0
  246. package/src/types/SVGDrawingHelper.ts +10 -0
  247. package/src/types/ScrollOptions.ts +9 -0
  248. package/src/types/SegmentationStateTypes.ts +248 -0
  249. package/src/types/ToolHandle.ts +26 -0
  250. package/src/types/ToolProps.ts +16 -0
  251. package/src/types/ToolSpecificAnnotationTypes.ts +311 -0
  252. package/src/types/index.ts +115 -0
  253. package/src/utilities/boundingBox/extend2DBoundingBoxInViewAxis.ts +29 -0
  254. package/src/utilities/boundingBox/getBoundingBoxAroundShape.ts +57 -0
  255. package/src/utilities/boundingBox/index.ts +4 -0
  256. package/src/utilities/calibrateImageSpacing.ts +46 -0
  257. package/src/utilities/cine/events.ts +9 -0
  258. package/src/utilities/cine/index.ts +5 -0
  259. package/src/utilities/cine/playClip.ts +435 -0
  260. package/src/utilities/cine/state.ts +18 -0
  261. package/src/utilities/clip.js +30 -0
  262. package/src/utilities/debounce.js +217 -0
  263. package/src/utilities/drawing/getTextBoxCoordsCanvas.ts +45 -0
  264. package/src/utilities/drawing/index.ts +3 -0
  265. package/src/utilities/dynamicVolume/getDataInTime.ts +110 -0
  266. package/src/utilities/dynamicVolume/index.ts +2 -0
  267. package/src/utilities/getAnnotationNearPoint.ts +130 -0
  268. package/src/utilities/getModalityUnit.ts +11 -0
  269. package/src/utilities/getToolsWithModesForElement.ts +52 -0
  270. package/src/utilities/index.ts +68 -0
  271. package/src/utilities/isObject.js +29 -0
  272. package/src/utilities/math/angle/angleBetweenLines.ts +29 -0
  273. package/src/utilities/math/circle/_types.ts +6 -0
  274. package/src/utilities/math/circle/getCanvasCircleCorners.ts +23 -0
  275. package/src/utilities/math/circle/getCanvasCircleRadius.ts +16 -0
  276. package/src/utilities/math/circle/index.ts +4 -0
  277. package/src/utilities/math/ellipse/getCanvasEllipseCorners.ts +26 -0
  278. package/src/utilities/math/ellipse/index.ts +4 -0
  279. package/src/utilities/math/ellipse/pointInEllipse.ts +38 -0
  280. package/src/utilities/math/ellipse/pointInEllipsoidWithConstraint.ts +35 -0
  281. package/src/utilities/math/index.ts +8 -0
  282. package/src/utilities/math/line/distanceToPoint.ts +24 -0
  283. package/src/utilities/math/line/distanceToPointSquared.ts +44 -0
  284. package/src/utilities/math/line/index.ts +5 -0
  285. package/src/utilities/math/line/intersectLine.ts +92 -0
  286. package/src/utilities/math/midPoint.ts +24 -0
  287. package/src/utilities/math/point/distanceToPoint.ts +22 -0
  288. package/src/utilities/math/point/index.ts +3 -0
  289. package/src/utilities/math/polyline/addCanvasPointsToArray.ts +62 -0
  290. package/src/utilities/math/polyline/calculateAreaOfPoints.ts +23 -0
  291. package/src/utilities/math/polyline/getIntersectionWithPolyline.ts +182 -0
  292. package/src/utilities/math/polyline/getSubPixelSpacingAndXYDirections.ts +99 -0
  293. package/src/utilities/math/polyline/index.ts +19 -0
  294. package/src/utilities/math/polyline/planarFreehandROIInternalTypes.ts +36 -0
  295. package/src/utilities/math/polyline/pointCanProjectOnLine.ts +57 -0
  296. package/src/utilities/math/polyline/pointsAreWithinCloseContourProximity.ts +15 -0
  297. package/src/utilities/math/rectangle/distanceToPoint.ts +82 -0
  298. package/src/utilities/math/rectangle/index.ts +3 -0
  299. package/src/utilities/math/sphere/index.ts +3 -0
  300. package/src/utilities/math/sphere/pointInSphere.ts +31 -0
  301. package/src/utilities/math/vec2/findClosestPoint.ts +40 -0
  302. package/src/utilities/math/vec2/index.ts +4 -0
  303. package/src/utilities/math/vec2/liangBarksyClip.ts +84 -0
  304. package/src/utilities/orientation/getOrientationStringLPS.ts +52 -0
  305. package/src/utilities/orientation/index.ts +4 -0
  306. package/src/utilities/orientation/invertOrientationStringLPS.ts +21 -0
  307. package/src/utilities/planar/filterAnnotationsForDisplay.ts +68 -0
  308. package/src/utilities/planar/filterAnnotationsWithinSlice.ts +85 -0
  309. package/src/utilities/planar/getPointInLineOfSightWithCriteria.ts +104 -0
  310. package/src/utilities/planar/getWorldWidthAndHeightFromCorners.ts +51 -0
  311. package/src/utilities/planar/getWorldWidthAndHeightFromTwoPoints.ts +51 -0
  312. package/src/utilities/planar/index.ts +18 -0
  313. package/src/utilities/planarFreehandROITool/index.ts +7 -0
  314. package/src/utilities/planarFreehandROITool/interpolateAnnotation.ts +87 -0
  315. package/src/utilities/planarFreehandROITool/interpolatePoints.ts +214 -0
  316. package/src/utilities/planarFreehandROITool/interpolation/algorithms/bspline.ts +55 -0
  317. package/src/utilities/planarFreehandROITool/interpolation/interpolateSegmentPoints.ts +90 -0
  318. package/src/utilities/pointInShapeCallback.ts +138 -0
  319. package/src/utilities/pointInSurroundingSphereCallback.ts +188 -0
  320. package/src/utilities/rectangleROITool/getBoundsIJKFromRectangleAnnotations.ts +76 -0
  321. package/src/utilities/rectangleROITool/index.ts +3 -0
  322. package/src/utilities/scroll.ts +62 -0
  323. package/src/utilities/segmentation/brushSizeForToolGroup.ts +72 -0
  324. package/src/utilities/segmentation/brushThresholdForToolGroup.ts +65 -0
  325. package/src/utilities/segmentation/createLabelmapVolumeForViewport.ts +74 -0
  326. package/src/utilities/segmentation/createMergedLabelmapForIndex.ts +65 -0
  327. package/src/utilities/segmentation/floodFill.ts +194 -0
  328. package/src/utilities/segmentation/getDefaultRepresentationConfig.ts +20 -0
  329. package/src/utilities/segmentation/index.ts +33 -0
  330. package/src/utilities/segmentation/isValidRepresentationConfig.ts +22 -0
  331. package/src/utilities/segmentation/rectangleROIThresholdVolumeByRange.ts +91 -0
  332. package/src/utilities/segmentation/thresholdSegmentationByRange.ts +129 -0
  333. package/src/utilities/segmentation/thresholdVolumeByRange.ts +150 -0
  334. package/src/utilities/segmentation/triggerSegmentationRender.ts +206 -0
  335. package/src/utilities/segmentation/utilities.ts +116 -0
  336. package/src/utilities/stackPrefetch/index.ts +8 -0
  337. package/src/utilities/stackPrefetch/stackPrefetch.ts +405 -0
  338. package/src/utilities/stackPrefetch/state.ts +17 -0
  339. package/src/utilities/throttle.js +69 -0
  340. package/src/utilities/touch/index.ts +246 -0
  341. package/src/utilities/triggerAnnotationRender.ts +237 -0
  342. package/src/utilities/triggerAnnotationRenderForViewportIds.ts +18 -0
  343. package/src/utilities/viewport/index.ts +5 -0
  344. package/src/utilities/viewport/isViewportPreScaled.ts +24 -0
  345. package/src/utilities/viewport/jumpToSlice.ts +73 -0
  346. package/src/utilities/viewport/jumpToWorld.ts +58 -0
  347. package/src/utilities/viewportFilters/filterViewportsWithFrameOfReferenceUID.ts +28 -0
  348. package/src/utilities/viewportFilters/filterViewportsWithParallelNormals.ts +26 -0
  349. package/src/utilities/viewportFilters/filterViewportsWithSameOrientation.ts +15 -0
  350. package/src/utilities/viewportFilters/filterViewportsWithToolEnabled.ts +72 -0
  351. package/src/utilities/viewportFilters/getViewportIdsWithToolToRender.ts +45 -0
  352. package/src/utilities/viewportFilters/index.ts +11 -0
@@ -0,0 +1,163 @@
1
+ import { eventTarget, triggerEvent } from '@cornerstonejs/core';
2
+ import { Events } from '../../enums';
3
+ import { AnnotationSelectionChangeEventDetail } from '../../types/EventTypes';
4
+ import { getAnnotation } from './annotationState';
5
+
6
+ /*
7
+ * Constants
8
+ */
9
+
10
+ const selectedAnnotationUIDs: Set<string> = new Set();
11
+
12
+ /*
13
+ * Interface (Public API)
14
+ */
15
+
16
+ /**
17
+ * Set a given annotationUID as selected or deselected based on the provided
18
+ * selected value.
19
+ *
20
+ * @param annotationUID - The annotation UID to be selected
21
+ * @param selected - When true, the annotation is selected. When false, the annotation is deselected.
22
+ * @param preserveSelected - When true, preserves existing
23
+ * selections (i.e., the given annotation is appended to the selection set).
24
+ * When false (the default behavior) the currently selected items are discarded
25
+ * (i.e., the given annotation instance replaces the currently selected ones).
26
+ */
27
+ function setAnnotationSelected(
28
+ annotationUID: string,
29
+ selected = true,
30
+ preserveSelected = false
31
+ ): void {
32
+ if (selected) {
33
+ selectAnnotation(annotationUID, preserveSelected);
34
+ } else {
35
+ deselectAnnotation(annotationUID);
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Set a given annotation as selected.
41
+ *
42
+ * @param annotationUID - The annotation UID to be selected
43
+ * @param preserveSelected - When true, preserves existing
44
+ * selections (i.e., the given annotation is appended to the selection set).
45
+ * When false (the default behavior) the currently selected items are discarded
46
+ * (i.e., the given annotation instance replaces the currently selected ones).
47
+ */
48
+ function selectAnnotation(
49
+ annotationUID: string,
50
+ preserveSelected = false
51
+ ): void {
52
+ const detail = makeEventDetail();
53
+ if (!preserveSelected) {
54
+ clearSelectionSet(selectedAnnotationUIDs, detail);
55
+ }
56
+ if (annotationUID && !selectedAnnotationUIDs.has(annotationUID)) {
57
+ selectedAnnotationUIDs.add(annotationUID);
58
+ detail.added.push(annotationUID);
59
+ }
60
+ publish(detail, selectedAnnotationUIDs);
61
+ }
62
+
63
+ /**
64
+ * Deselect one or all annotations.
65
+ *
66
+ * @param annotationUID - If an annotation is provided that instance will be removed from
67
+ * the internal selection set. If none is given, ALL selections will be cleared.
68
+ */
69
+ function deselectAnnotation(annotationUID?: string): void {
70
+ const detail = makeEventDetail();
71
+ if (annotationUID) {
72
+ if (selectedAnnotationUIDs.delete(annotationUID)) {
73
+ detail.removed.push(annotationUID);
74
+ }
75
+ } else {
76
+ clearSelectionSet(selectedAnnotationUIDs, detail);
77
+ }
78
+ publish(detail, selectedAnnotationUIDs);
79
+ }
80
+
81
+ /**
82
+ * Return an array of ALL the selected annotationUIDs
83
+ * @returns An array of Annotation UIDs
84
+ */
85
+ function getAnnotationsSelected(): Array<string> {
86
+ return Array.from(selectedAnnotationUIDs);
87
+ }
88
+
89
+ /**
90
+ * Given a tool name, return ALL the annotationUIDs for that tool that are selected
91
+ * @param toolName - The name of the tool you want to get the selected annotation for
92
+ * @returns An array of annotationUIDs
93
+ */
94
+ function getAnnotationsSelectedByToolName(toolName: string): Array<string> {
95
+ return getAnnotationsSelected().filter((annotationUID) => {
96
+ const annotation = getAnnotation(annotationUID);
97
+ return annotation.metadata.toolName === toolName;
98
+ });
99
+ }
100
+
101
+ /**
102
+ * Given an annotationUID, return true if it is selected, false
103
+ * otherwise.
104
+ * @param annotationUID - Annotation UID
105
+ * @returns A boolean value.
106
+ */
107
+ function isAnnotationSelected(annotationUID: string): boolean {
108
+ return selectedAnnotationUIDs.has(annotationUID);
109
+ }
110
+
111
+ /**
112
+ * Return the number of the selected annotation
113
+ * @returns The size of the selected annotation set
114
+ */
115
+ function getAnnotationsSelectedCount(): number {
116
+ return selectedAnnotationUIDs.size;
117
+ }
118
+
119
+ /*
120
+ * Private Helpers
121
+ */
122
+
123
+ function makeEventDetail(): AnnotationSelectionChangeEventDetail {
124
+ return Object.freeze({
125
+ added: [],
126
+ removed: [],
127
+ selection: [],
128
+ });
129
+ }
130
+
131
+ function clearSelectionSet(
132
+ selectionSet: Set<string>,
133
+ detail: AnnotationSelectionChangeEventDetail
134
+ ): void {
135
+ selectionSet.forEach((value) => {
136
+ if (selectionSet.delete(value)) {
137
+ detail.removed.push(value);
138
+ }
139
+ });
140
+ }
141
+
142
+ function publish(
143
+ detail: AnnotationSelectionChangeEventDetail,
144
+ selectionSet: Set<string>
145
+ ) {
146
+ if (detail.added.length > 0 || detail.removed.length > 0) {
147
+ selectionSet.forEach((item) => void detail.selection.push(item));
148
+ triggerEvent(eventTarget, Events.ANNOTATION_SELECTION_CHANGE, detail);
149
+ }
150
+ }
151
+
152
+ /*
153
+ * Exports
154
+ */
155
+
156
+ export {
157
+ setAnnotationSelected,
158
+ getAnnotationsSelected,
159
+ getAnnotationsSelectedByToolName,
160
+ getAnnotationsSelectedCount,
161
+ deselectAnnotation,
162
+ isAnnotationSelected,
163
+ };
@@ -0,0 +1,180 @@
1
+ import {
2
+ triggerEvent,
3
+ eventTarget,
4
+ utilities as csUtils,
5
+ } from '@cornerstonejs/core';
6
+ import { Events } from '../../enums';
7
+ import { defaultFrameOfReferenceSpecificAnnotationManager } from './FrameOfReferenceSpecificAnnotationManager';
8
+ import { Annotations, Annotation } from '../../types/AnnotationTypes';
9
+ import { AnnotationRemovedEventDetail } from '../../types/EventTypes';
10
+ import { AnnotationGroupSelector } from '../../types';
11
+ import {
12
+ triggerAnnotationAddedForElement,
13
+ triggerAnnotationAddedForFOR,
14
+ } from './helpers/state';
15
+
16
+ // our default annotation manager
17
+ let defaultManager = defaultFrameOfReferenceSpecificAnnotationManager;
18
+
19
+ /**
20
+ * It returns the default annotations manager.
21
+ * @returns the singleton default annotations manager.
22
+ */
23
+ function getAnnotationManager() {
24
+ return defaultManager;
25
+ }
26
+
27
+ /**
28
+ * Set the annotation manager to be used for rendering, adding, removing, etc.
29
+ * @param annotationManager - The annotation manager to be used
30
+ */
31
+ function setAnnotationManager(annotationManager) {
32
+ defaultManager = annotationManager;
33
+ }
34
+
35
+ // set back to default frameOfReferenceSpecificAnnotationManager
36
+ function resetAnnotationManager() {
37
+ defaultManager = defaultFrameOfReferenceSpecificAnnotationManager;
38
+ }
39
+
40
+ /**
41
+ * Returns the annotations for a given tool with the provided options that is
42
+ * used to filter annotations based on the annotation manager.
43
+ *
44
+ * In our default implementation, the options are the element and/or the FrameOfReferenceUID.
45
+ * Hence, the getAnnotations function will return the annotations for the given tool
46
+ * that are associated with the FrameOfReferenceUID.
47
+ *
48
+ * @param toolName - The name of the tool.
49
+ * @param annotationGroupSelector - element or FrameOfReferenceUID that is used
50
+ * to group annotations in the annotation manager.
51
+ * @returns The annotations corresponding to the Frame of Reference and the toolName.
52
+ */
53
+ function getAnnotations(
54
+ toolName: string,
55
+ annotationGroupSelector: AnnotationGroupSelector
56
+ ): Annotations {
57
+ const manager = getAnnotationManager();
58
+ const groupKey = manager.getGroupKey(annotationGroupSelector);
59
+ return manager.getAnnotations(groupKey, toolName) as Annotations;
60
+ }
61
+
62
+ /**
63
+ * Add the annotation to the annotation manager along with the options that is
64
+ * used to filter the annotation manager and the annotation group that
65
+ * the annotation belongs to.
66
+ *
67
+ * As a result, our default implementation will add the annotation to the
68
+ * default manager using the FrameOfReferenceUID as the group key.
69
+ *
70
+ * @param annotation - The annotation that is being added to the annotations manager.
71
+ * @param annotationGroupSelector - element or FrameOfReferenceUID that is used
72
+ * to group annotations in the annotation manager.
73
+ */
74
+ function addAnnotation(
75
+ annotation: Annotation,
76
+ annotationGroupSelector: AnnotationGroupSelector
77
+ ): string {
78
+ if (annotation.annotationUID === undefined) {
79
+ annotation.annotationUID = csUtils.uuidv4() as string;
80
+ }
81
+
82
+ const manager = getAnnotationManager();
83
+ const groupKey = manager.getGroupKey(annotationGroupSelector);
84
+
85
+ manager.addAnnotation(annotation, groupKey);
86
+
87
+ // if the annotation manager selector is an element, trigger the
88
+ // annotation added event for that element.
89
+ if (annotationGroupSelector instanceof HTMLDivElement) {
90
+ triggerAnnotationAddedForElement(annotation, annotationGroupSelector);
91
+ }
92
+
93
+ // if no element is provided, render all viewports that have the
94
+ // same frame of reference.
95
+ // Todo: we should do something else here for other types of annotation managers.
96
+ triggerAnnotationAddedForFOR(annotation);
97
+
98
+ return annotation.annotationUID;
99
+ }
100
+
101
+ /**
102
+ * Get the number of annotations for a given tool with the provided options that is
103
+ * used to filter annotations based on the annotation manager.
104
+ *
105
+ * In our default implementation, the options are the element and/or the FrameOfReferenceUID.
106
+ * Hence, the getNumberOfAnnotations function will return the number of annotations for the given tool
107
+ * that are associated with the FrameOfReferenceUID.
108
+ *
109
+ * @param toolName - The name of the tool
110
+ * @param annotationGroupSelector - element or FrameOfReferenceUID that is used
111
+ * to group annotations in the annotation manager.
112
+ *
113
+ */
114
+ function getNumberOfAnnotations(
115
+ toolName: string,
116
+ annotationGroupSelector: AnnotationGroupSelector
117
+ ): number {
118
+ const manager = getAnnotationManager();
119
+ const groupKey = manager.getGroupKey(annotationGroupSelector);
120
+
121
+ return manager.getNumberOfAnnotations(groupKey, toolName);
122
+ }
123
+
124
+ /**
125
+ * Remove the annotation by UID of the annotation.
126
+ * @param annotationUID - The unique identifier for the annotation.
127
+ */
128
+ function removeAnnotation(annotationUID: string): void {
129
+ const manager = getAnnotationManager();
130
+ const annotation = manager.getAnnotation(annotationUID);
131
+
132
+ // no need to continue in case there is no annotation.
133
+ if (!annotation) {
134
+ return;
135
+ }
136
+
137
+ manager.removeAnnotation(annotationUID);
138
+
139
+ // trigger annotation removed
140
+ const eventType = Events.ANNOTATION_REMOVED;
141
+
142
+ const eventDetail: AnnotationRemovedEventDetail = {
143
+ annotation,
144
+ annotationManagerUID: manager.uid,
145
+ };
146
+
147
+ triggerEvent(eventTarget, eventType, eventDetail);
148
+ }
149
+
150
+ /**
151
+ * Get the Annotation object by its UID
152
+ * @param annotationUID - The unique identifier of the annotation.
153
+ */
154
+ function getAnnotation(annotationUID: string): Annotation {
155
+ const manager = getAnnotationManager();
156
+ const annotation = manager.getAnnotation(annotationUID);
157
+
158
+ return annotation;
159
+ }
160
+
161
+ /**
162
+ * It removes all annotations from the default annotation manager
163
+ */
164
+ function removeAllAnnotations(): void {
165
+ const manager = getAnnotationManager();
166
+ manager.removeAllAnnotations();
167
+ }
168
+
169
+ export {
170
+ getAnnotations,
171
+ getNumberOfAnnotations,
172
+ addAnnotation,
173
+ getAnnotation,
174
+ removeAnnotation,
175
+ removeAllAnnotations,
176
+ // annotation manager
177
+ setAnnotationManager,
178
+ getAnnotationManager,
179
+ resetAnnotationManager,
180
+ };
@@ -0,0 +1,156 @@
1
+ import { eventTarget, triggerEvent } from '@cornerstonejs/core';
2
+ import { getAnnotation } from './annotationState';
3
+ import { Events } from '../../enums';
4
+ import { Annotation } from '../../types';
5
+ import { AnnotationVisibilityChangeEventDetail } from '../../types/EventTypes';
6
+ import {
7
+ isAnnotationSelected,
8
+ deselectAnnotation,
9
+ } from './annotationSelection';
10
+
11
+ /*
12
+ * It stores all hidden annotation uids.
13
+ */
14
+ const globalHiddenAnnotationUIDsSet: Set<string> = new Set();
15
+
16
+ /*
17
+ * Interface (Public API)
18
+ */
19
+
20
+ /**
21
+ * Set the "visible" state of a given annotation instance.
22
+ *
23
+ * @event ANNOTATION_VISIBILITY_CHANGE
24
+ *
25
+ * @param annotationUID - The annotation uid which will have
26
+ * its visible state changed. An event will only be triggered if the visible state
27
+ * of the given annotation instance changed.
28
+ * @param visible - A boolean value indicating if the instance should
29
+ * be visible (true) or not (false)
30
+ */
31
+ function setAnnotationVisibility(annotationUID: string, visible = true): void {
32
+ const detail = makeEventDetail();
33
+ if (annotationUID) {
34
+ if (visible) {
35
+ show(annotationUID, globalHiddenAnnotationUIDsSet, detail);
36
+ } else {
37
+ hide(annotationUID, globalHiddenAnnotationUIDsSet, detail);
38
+ }
39
+ }
40
+ publish(detail);
41
+ }
42
+
43
+ /**
44
+ * Clears all the hidden annotations.
45
+ *
46
+ */
47
+ function showAllAnnotations(): void {
48
+ const detail = makeEventDetail();
49
+ globalHiddenAnnotationUIDsSet.forEach((annotationUID) => {
50
+ show(annotationUID, globalHiddenAnnotationUIDsSet, detail);
51
+ });
52
+ publish(detail);
53
+ }
54
+
55
+ /**
56
+ * Given an annotation UID, return true if it is visible, false if hidden and undefined if does not exist.
57
+ * @param annotationUID - The annotation uid to tell if is visible or not.
58
+ * @returns A boolean value or value if does not exist.
59
+ */
60
+ function isAnnotationVisible(annotationUID: string): boolean | undefined {
61
+ const annotation = getAnnotation(annotationUID);
62
+
63
+ if (annotation) {
64
+ return !globalHiddenAnnotationUIDsSet.has(annotationUID);
65
+ }
66
+ }
67
+ /**
68
+ * It decorates given annotation with isVisible property.
69
+ * It properly initializes the isVisible on annotation(the property will be create if does not exist yet)
70
+ *
71
+ * @param annotation - The annotation object to be checked.
72
+ */
73
+ function checkAndDefineIsVisibleProperty(annotation: Annotation): void {
74
+ if (annotation) {
75
+ const isVisible = annotation.isVisible ?? true;
76
+ if (shouldDefineIsVisibleProperty(annotation)) {
77
+ Object.defineProperty(annotation, 'isVisible', {
78
+ configurable: false,
79
+ enumerable: true,
80
+ set: setIsVisible,
81
+ get: getIsVisible,
82
+ });
83
+ }
84
+ setAnnotationVisibility(annotation.annotationUID, isVisible);
85
+ }
86
+ }
87
+
88
+ /*
89
+ * Private Helpers
90
+ */
91
+ function makeEventDetail(): AnnotationVisibilityChangeEventDetail {
92
+ return Object.freeze({
93
+ lastVisible: [],
94
+ lastHidden: [],
95
+ hidden: [],
96
+ });
97
+ }
98
+
99
+ function show(
100
+ annotationUID: string,
101
+ annotationUIDsSet: Set<string>,
102
+ detail: AnnotationVisibilityChangeEventDetail
103
+ ): void {
104
+ if (annotationUIDsSet.delete(annotationUID)) {
105
+ detail.lastVisible.push(annotationUID);
106
+ }
107
+ }
108
+
109
+ function hide(
110
+ annotationUID: string,
111
+ annotationUIDsSet: Set<string>,
112
+ detail: AnnotationVisibilityChangeEventDetail
113
+ ): void {
114
+ if (!annotationUIDsSet.has(annotationUID)) {
115
+ annotationUIDsSet.add(annotationUID);
116
+ if (isAnnotationSelected(annotationUID)) {
117
+ deselectAnnotation(annotationUID);
118
+ }
119
+ detail.lastHidden.push(annotationUID);
120
+ }
121
+ }
122
+
123
+ function publish(detail: AnnotationVisibilityChangeEventDetail) {
124
+ if (detail.lastHidden.length > 0 || detail.lastVisible.length > 0) {
125
+ globalHiddenAnnotationUIDsSet.forEach(
126
+ (item) => void detail.hidden.push(item)
127
+ );
128
+ triggerEvent(eventTarget, Events.ANNOTATION_VISIBILITY_CHANGE, detail);
129
+ }
130
+ }
131
+
132
+ function shouldDefineIsVisibleProperty(annotation: Annotation): boolean {
133
+ const descriptor = Object.getOwnPropertyDescriptor(annotation, 'isVisible');
134
+ if (descriptor) {
135
+ return (
136
+ descriptor.configurable &&
137
+ (descriptor.set !== setIsVisible || descriptor.get !== getIsVisible)
138
+ );
139
+ }
140
+ return Object.isExtensible(annotation);
141
+ }
142
+
143
+ function setIsVisible(hidden: boolean) {
144
+ setAnnotationVisibility((this as Annotation).annotationUID, hidden);
145
+ }
146
+
147
+ function getIsVisible() {
148
+ return isAnnotationVisible((this as Annotation).annotationUID);
149
+ }
150
+
151
+ export {
152
+ setAnnotationVisibility,
153
+ showAllAnnotations,
154
+ isAnnotationVisible,
155
+ checkAndDefineIsVisibleProperty,
156
+ };