@cornerstonejs/tools 0.56.1 → 0.56.3

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 (360) hide show
  1. package/dist/cjs/tools/CrosshairsTool.d.ts +1 -0
  2. package/dist/cjs/tools/CrosshairsTool.js +4 -1
  3. package/dist/cjs/tools/CrosshairsTool.js.map +1 -1
  4. package/dist/esm/tools/CrosshairsTool.d.ts +1 -0
  5. package/dist/esm/tools/CrosshairsTool.js +4 -1
  6. package/dist/esm/tools/CrosshairsTool.js.map +1 -1
  7. package/dist/umd/index.js +1 -1
  8. package/dist/umd/index.js.map +1 -1
  9. package/package.json +5 -4
  10. package/src/constants/COLOR_LUT.ts +262 -0
  11. package/src/constants/index.ts +3 -0
  12. package/src/cursors/ImageMouseCursor.ts +39 -0
  13. package/src/cursors/MouseCursor.ts +114 -0
  14. package/src/cursors/SVGCursorDescriptor.ts +462 -0
  15. package/src/cursors/SVGMouseCursor.ts +145 -0
  16. package/src/cursors/elementCursor.ts +69 -0
  17. package/src/cursors/index.ts +24 -0
  18. package/src/cursors/setCursorForElement.ts +33 -0
  19. package/src/drawingSvg/_getHash.ts +9 -0
  20. package/src/drawingSvg/_setAttributesIfNecessary.ts +13 -0
  21. package/src/drawingSvg/_setNewAttributesIfValid.ts +10 -0
  22. package/src/drawingSvg/clearByToolType.ts +26 -0
  23. package/src/drawingSvg/draw.ts +16 -0
  24. package/src/drawingSvg/drawArrow.ts +82 -0
  25. package/src/drawingSvg/drawCircle.ts +62 -0
  26. package/src/drawingSvg/drawEllipse.ts +71 -0
  27. package/src/drawingSvg/drawHandles.ts +87 -0
  28. package/src/drawingSvg/drawLine.ts +70 -0
  29. package/src/drawingSvg/drawLink.ts +76 -0
  30. package/src/drawingSvg/drawLinkedTextBox.ts +64 -0
  31. package/src/drawingSvg/drawPolyline.ts +80 -0
  32. package/src/drawingSvg/drawRect.ts +70 -0
  33. package/src/drawingSvg/drawTextBox.ts +213 -0
  34. package/src/drawingSvg/getSvgDrawingHelper.ts +98 -0
  35. package/src/drawingSvg/index.ts +23 -0
  36. package/src/enums/AnnotationStyleStates.ts +22 -0
  37. package/src/enums/Events.ts +242 -0
  38. package/src/enums/SegmentationRepresentations.ts +12 -0
  39. package/src/enums/ToolBindings.ts +37 -0
  40. package/src/enums/ToolModes.ts +31 -0
  41. package/src/enums/Touch.ts +8 -0
  42. package/src/enums/index.js +16 -0
  43. package/src/eventDispatchers/annotationModifiedEventDispatcher.ts +41 -0
  44. package/src/eventDispatchers/cameraModifiedEventDispatcher.ts +41 -0
  45. package/src/eventDispatchers/imageRenderedEventDispatcher.ts +37 -0
  46. package/src/eventDispatchers/imageSpacingCalibratedEventDispatcher.ts +50 -0
  47. package/src/eventDispatchers/index.js +15 -0
  48. package/src/eventDispatchers/keyboardEventHandlers/index.js +4 -0
  49. package/src/eventDispatchers/keyboardEventHandlers/keyDown.ts +29 -0
  50. package/src/eventDispatchers/keyboardEventHandlers/keyUp.ts +33 -0
  51. package/src/eventDispatchers/keyboardToolEventDispatcher.ts +28 -0
  52. package/src/eventDispatchers/mouseEventHandlers/index.js +19 -0
  53. package/src/eventDispatchers/mouseEventHandlers/mouseClick.ts +13 -0
  54. package/src/eventDispatchers/mouseEventHandlers/mouseDoubleClick.ts +13 -0
  55. package/src/eventDispatchers/mouseEventHandlers/mouseDown.ts +196 -0
  56. package/src/eventDispatchers/mouseEventHandlers/mouseDownActivate.ts +35 -0
  57. package/src/eventDispatchers/mouseEventHandlers/mouseDrag.ts +25 -0
  58. package/src/eventDispatchers/mouseEventHandlers/mouseMove.ts +70 -0
  59. package/src/eventDispatchers/mouseEventHandlers/mouseUp.ts +9 -0
  60. package/src/eventDispatchers/mouseEventHandlers/mouseWheel.ts +13 -0
  61. package/src/eventDispatchers/mouseToolEventDispatcher.ts +64 -0
  62. package/src/eventDispatchers/shared/customCallbackHandler.ts +73 -0
  63. package/src/eventDispatchers/shared/getActiveToolForKeyboardEvent.ts +58 -0
  64. package/src/eventDispatchers/shared/getActiveToolForMouseEvent.ts +61 -0
  65. package/src/eventDispatchers/shared/getActiveToolForTouchEvent.ts +64 -0
  66. package/src/eventDispatchers/shared/getMouseModifier.ts +30 -0
  67. package/src/eventDispatchers/shared/getToolsWithModesForMouseEvent.ts +56 -0
  68. package/src/eventDispatchers/shared/getToolsWithModesForTouchEvent.ts +54 -0
  69. package/src/eventDispatchers/touchEventHandlers/index.js +15 -0
  70. package/src/eventDispatchers/touchEventHandlers/touchDrag.ts +23 -0
  71. package/src/eventDispatchers/touchEventHandlers/touchEnd.ts +9 -0
  72. package/src/eventDispatchers/touchEventHandlers/touchPress.ts +13 -0
  73. package/src/eventDispatchers/touchEventHandlers/touchStart.ts +174 -0
  74. package/src/eventDispatchers/touchEventHandlers/touchStartActivate.ts +36 -0
  75. package/src/eventDispatchers/touchEventHandlers/touchTap.ts +9 -0
  76. package/src/eventDispatchers/touchToolEventDispatcher.ts +51 -0
  77. package/src/eventListeners/annotations/annotationModifiedListener.ts +22 -0
  78. package/src/eventListeners/annotations/annotationSelectionListener.ts +29 -0
  79. package/src/eventListeners/annotations/index.ts +4 -0
  80. package/src/eventListeners/index.ts +28 -0
  81. package/src/eventListeners/keyboard/index.ts +16 -0
  82. package/src/eventListeners/keyboard/keyDownListener.ts +99 -0
  83. package/src/eventListeners/mouse/getMouseEventPoints.ts +66 -0
  84. package/src/eventListeners/mouse/index.ts +55 -0
  85. package/src/eventListeners/mouse/mouseDoubleClickListener.ts +55 -0
  86. package/src/eventListeners/mouse/mouseDownListener.ts +519 -0
  87. package/src/eventListeners/mouse/mouseMoveListener.ts +33 -0
  88. package/src/eventListeners/segmentation/index.ts +11 -0
  89. package/src/eventListeners/segmentation/segmentationDataModifiedEventListener.ts +61 -0
  90. package/src/eventListeners/segmentation/segmentationModifiedEventListener.ts +32 -0
  91. package/src/eventListeners/segmentation/segmentationRepresentationModifiedEventListener.ts +15 -0
  92. package/src/eventListeners/segmentation/segmentationRepresentationRemovedEventListener.ts +16 -0
  93. package/src/eventListeners/touch/getTouchEventPoints.ts +75 -0
  94. package/src/eventListeners/touch/index.ts +37 -0
  95. package/src/eventListeners/touch/preventGhostClick.js +72 -0
  96. package/src/eventListeners/touch/touchStartListener.ts +499 -0
  97. package/src/eventListeners/wheel/index.ts +27 -0
  98. package/src/eventListeners/wheel/normalizeWheel.ts +69 -0
  99. package/src/eventListeners/wheel/wheelListener.ts +51 -0
  100. package/src/index.ts +133 -0
  101. package/src/init.ts +187 -0
  102. package/src/stateManagement/annotation/FrameOfReferenceSpecificAnnotationManager.ts +399 -0
  103. package/src/stateManagement/annotation/annotationLocking.ts +178 -0
  104. package/src/stateManagement/annotation/annotationSelection.ts +163 -0
  105. package/src/stateManagement/annotation/annotationState.ts +180 -0
  106. package/src/stateManagement/annotation/annotationVisibility.ts +156 -0
  107. package/src/stateManagement/annotation/config/ToolStyle.ts +265 -0
  108. package/src/stateManagement/annotation/config/getFont.ts +36 -0
  109. package/src/stateManagement/annotation/config/getState.ts +26 -0
  110. package/src/stateManagement/annotation/config/helpers.ts +55 -0
  111. package/src/stateManagement/annotation/config/index.ts +5 -0
  112. package/src/stateManagement/annotation/helpers/state.ts +83 -0
  113. package/src/stateManagement/annotation/index.ts +15 -0
  114. package/src/stateManagement/index.js +40 -0
  115. package/src/stateManagement/segmentation/SegmentationStateManager.ts +491 -0
  116. package/src/stateManagement/segmentation/activeSegmentation.ts +60 -0
  117. package/src/stateManagement/segmentation/addSegmentationRepresentations.ts +77 -0
  118. package/src/stateManagement/segmentation/addSegmentations.ts +27 -0
  119. package/src/stateManagement/segmentation/config/index.ts +29 -0
  120. package/src/stateManagement/segmentation/config/segmentationColor.ts +132 -0
  121. package/src/stateManagement/segmentation/config/segmentationConfig.ts +195 -0
  122. package/src/stateManagement/segmentation/config/segmentationVisibility.ts +171 -0
  123. package/src/stateManagement/segmentation/helpers/index.ts +3 -0
  124. package/src/stateManagement/segmentation/helpers/normalizeSegmentationInput.ts +35 -0
  125. package/src/stateManagement/segmentation/helpers/validateSegmentationInput.ts +41 -0
  126. package/src/stateManagement/segmentation/index.ts +22 -0
  127. package/src/stateManagement/segmentation/removeSegmentationsFromToolGroup.ts +85 -0
  128. package/src/stateManagement/segmentation/segmentIndex.ts +38 -0
  129. package/src/stateManagement/segmentation/segmentLocking.ts +72 -0
  130. package/src/stateManagement/segmentation/segmentationState.ts +429 -0
  131. package/src/stateManagement/segmentation/triggerSegmentationEvents.ts +157 -0
  132. package/src/store/SynchronizerManager/Synchronizer.ts +344 -0
  133. package/src/store/SynchronizerManager/createSynchronizer.ts +41 -0
  134. package/src/store/SynchronizerManager/destroy.ts +14 -0
  135. package/src/store/SynchronizerManager/destroySynchronizer.ts +25 -0
  136. package/src/store/SynchronizerManager/getAllSynchronizers.ts +12 -0
  137. package/src/store/SynchronizerManager/getSynchronizer.ts +13 -0
  138. package/src/store/SynchronizerManager/getSynchronizersForViewport.ts +44 -0
  139. package/src/store/SynchronizerManager/index.js +15 -0
  140. package/src/store/ToolGroupManager/ToolGroup.ts +679 -0
  141. package/src/store/ToolGroupManager/createToolGroup.ts +33 -0
  142. package/src/store/ToolGroupManager/destroy.ts +24 -0
  143. package/src/store/ToolGroupManager/destroyToolGroup.ts +26 -0
  144. package/src/store/ToolGroupManager/getAllToolGroups.ts +12 -0
  145. package/src/store/ToolGroupManager/getToolGroup.ts +14 -0
  146. package/src/store/ToolGroupManager/getToolGroupForViewport.ts +44 -0
  147. package/src/store/ToolGroupManager/getToolGroupsWithToolName.ts +33 -0
  148. package/src/store/ToolGroupManager/index.ts +17 -0
  149. package/src/store/addEnabledElement.ts +137 -0
  150. package/src/store/addTool.ts +56 -0
  151. package/src/store/cancelActiveManipulations.ts +30 -0
  152. package/src/store/filterMoveableAnnotationTools.ts +61 -0
  153. package/src/store/filterToolsWithAnnotationsForElement.ts +51 -0
  154. package/src/store/filterToolsWithMoveableHandles.ts +51 -0
  155. package/src/store/index.ts +29 -0
  156. package/src/store/removeEnabledElement.ts +132 -0
  157. package/src/store/state.ts +57 -0
  158. package/src/store/svgNodeCache.ts +7 -0
  159. package/src/synchronizers/callbacks/areViewportsCoplanar .ts +12 -0
  160. package/src/synchronizers/callbacks/cameraSyncCallback.ts +33 -0
  161. package/src/synchronizers/callbacks/stackImageSyncCallback.ts +157 -0
  162. package/src/synchronizers/callbacks/voiSyncCallback.ts +51 -0
  163. package/src/synchronizers/callbacks/zoomPanSyncCallback.ts +43 -0
  164. package/src/synchronizers/index.ts +11 -0
  165. package/src/synchronizers/synchronizers/createCameraPositionSynchronizer.ts +25 -0
  166. package/src/synchronizers/synchronizers/createStackImageSynchronizer.ts +25 -0
  167. package/src/synchronizers/synchronizers/createVOISynchronizer.ts +24 -0
  168. package/src/synchronizers/synchronizers/createZoomPanSynchronizer.ts +25 -0
  169. package/src/synchronizers/synchronizers/index.ts +11 -0
  170. package/src/tools/CrosshairsTool.ts +2693 -0
  171. package/src/tools/MIPJumpToClickTool.ts +99 -0
  172. package/src/tools/MagnifyTool.ts +319 -0
  173. package/src/tools/PanTool.ts +58 -0
  174. package/src/tools/PlanarRotateTool.ts +77 -0
  175. package/src/tools/ReferenceCursors.ts +466 -0
  176. package/src/tools/ReferenceLinesTool.ts +279 -0
  177. package/src/tools/ScaleOverlayTool.ts +685 -0
  178. package/src/tools/StackScrollTool.ts +97 -0
  179. package/src/tools/StackScrollToolMouseWheelTool.ts +58 -0
  180. package/src/tools/TrackballRotateTool.ts +141 -0
  181. package/src/tools/VolumeRotateMouseWheelTool.ts +86 -0
  182. package/src/tools/WindowLevelTool.ts +260 -0
  183. package/src/tools/ZoomTool.ts +293 -0
  184. package/src/tools/annotation/AngleTool.ts +835 -0
  185. package/src/tools/annotation/ArrowAnnotateTool.ts +820 -0
  186. package/src/tools/annotation/BidirectionalTool.ts +1350 -0
  187. package/src/tools/annotation/CircleROITool.ts +1070 -0
  188. package/src/tools/annotation/CobbAngleTool.ts +815 -0
  189. package/src/tools/annotation/DragProbeTool.ts +213 -0
  190. package/src/tools/annotation/EllipticalROITool.ts +1223 -0
  191. package/src/tools/annotation/LengthTool.ts +861 -0
  192. package/src/tools/annotation/PlanarFreehandROITool.ts +636 -0
  193. package/src/tools/annotation/ProbeTool.ts +681 -0
  194. package/src/tools/annotation/RectangleROITool.ts +1028 -0
  195. package/src/tools/annotation/planarFreehandROITool/closedContourEditLoop.ts +488 -0
  196. package/src/tools/annotation/planarFreehandROITool/drawLoop.ts +462 -0
  197. package/src/tools/annotation/planarFreehandROITool/editLoopCommon.ts +331 -0
  198. package/src/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.ts +74 -0
  199. package/src/tools/annotation/planarFreehandROITool/openContourEditLoop.ts +612 -0
  200. package/src/tools/annotation/planarFreehandROITool/openContourEndEditLoop.ts +74 -0
  201. package/src/tools/annotation/planarFreehandROITool/renderMethods.ts +407 -0
  202. package/src/tools/base/AnnotationDisplayTool.ts +228 -0
  203. package/src/tools/base/AnnotationTool.ts +307 -0
  204. package/src/tools/base/BaseTool.ts +215 -0
  205. package/src/tools/base/index.ts +4 -0
  206. package/src/tools/displayTools/Contour/addContourToElement.ts +135 -0
  207. package/src/tools/displayTools/Contour/contourDisplay.ts +252 -0
  208. package/src/tools/displayTools/Contour/index.ts +3 -0
  209. package/src/tools/displayTools/Contour/removeContourFromElement.ts +35 -0
  210. package/src/tools/displayTools/Labelmap/addLabelmapToElement.ts +57 -0
  211. package/src/tools/displayTools/Labelmap/index.ts +4 -0
  212. package/src/tools/displayTools/Labelmap/labelmapConfig.ts +37 -0
  213. package/src/tools/displayTools/Labelmap/labelmapDisplay.ts +461 -0
  214. package/src/tools/displayTools/Labelmap/removeLabelmapFromElement.ts +27 -0
  215. package/src/tools/displayTools/Labelmap/validateRepresentationData.ts +30 -0
  216. package/src/tools/displayTools/SegmentationDisplayTool.ts +198 -0
  217. package/src/tools/index.ts +84 -0
  218. package/src/tools/segmentation/BrushTool.ts +474 -0
  219. package/src/tools/segmentation/CircleScissorsTool.ts +365 -0
  220. package/src/tools/segmentation/PaintFillTool.ts +370 -0
  221. package/src/tools/segmentation/RectangleROIStartEndThresholdTool.ts +471 -0
  222. package/src/tools/segmentation/RectangleROIThresholdTool.ts +281 -0
  223. package/src/tools/segmentation/RectangleScissorsTool.ts +382 -0
  224. package/src/tools/segmentation/SphereScissorsTool.ts +368 -0
  225. package/src/tools/segmentation/strategies/eraseCircle.ts +30 -0
  226. package/src/tools/segmentation/strategies/eraseRectangle.ts +81 -0
  227. package/src/tools/segmentation/strategies/eraseSphere.ts +27 -0
  228. package/src/tools/segmentation/strategies/fillCircle.ts +185 -0
  229. package/src/tools/segmentation/strategies/fillRectangle.ts +110 -0
  230. package/src/tools/segmentation/strategies/fillSphere.ts +88 -0
  231. package/src/tools/segmentation/strategies/index.ts +9 -0
  232. package/src/types/AnnotationGroupSelector.ts +7 -0
  233. package/src/types/AnnotationStyle.ts +42 -0
  234. package/src/types/AnnotationTypes.ts +109 -0
  235. package/src/types/BoundsIJK.ts +5 -0
  236. package/src/types/CINETypes.ts +32 -0
  237. package/src/types/ContourTypes.ts +26 -0
  238. package/src/types/CursorTypes.ts +12 -0
  239. package/src/types/EventTypes.ts +657 -0
  240. package/src/types/FloodFillTypes.ts +19 -0
  241. package/src/types/IAnnotationManager.ts +89 -0
  242. package/src/types/IDistance.ts +16 -0
  243. package/src/types/IPoints.ts +18 -0
  244. package/src/types/ISetToolModeOptions.ts +29 -0
  245. package/src/types/ISynchronizerEventHandler.ts +11 -0
  246. package/src/types/IToolClassReference.ts +5 -0
  247. package/src/types/IToolGroup.ts +72 -0
  248. package/src/types/ITouchPoints.ts +14 -0
  249. package/src/types/InteractionTypes.ts +6 -0
  250. package/src/types/InternalToolTypes.ts +19 -0
  251. package/src/types/JumpToSliceOptions.ts +7 -0
  252. package/src/types/LabelmapTypes.ts +41 -0
  253. package/src/types/PlanarBoundingBox.ts +8 -0
  254. package/src/types/SVGDrawingHelper.ts +10 -0
  255. package/src/types/ScrollOptions.ts +9 -0
  256. package/src/types/SegmentationStateTypes.ts +248 -0
  257. package/src/types/ToolHandle.ts +26 -0
  258. package/src/types/ToolProps.ts +16 -0
  259. package/src/types/ToolSpecificAnnotationTypes.ts +311 -0
  260. package/src/types/index.ts +115 -0
  261. package/src/utilities/boundingBox/extend2DBoundingBoxInViewAxis.ts +29 -0
  262. package/src/utilities/boundingBox/getBoundingBoxAroundShape.ts +57 -0
  263. package/src/utilities/boundingBox/index.ts +4 -0
  264. package/src/utilities/calibrateImageSpacing.ts +46 -0
  265. package/src/utilities/cine/events.ts +9 -0
  266. package/src/utilities/cine/index.ts +5 -0
  267. package/src/utilities/cine/playClip.ts +435 -0
  268. package/src/utilities/cine/state.ts +18 -0
  269. package/src/utilities/clip.js +30 -0
  270. package/src/utilities/debounce.js +217 -0
  271. package/src/utilities/drawing/getTextBoxCoordsCanvas.ts +45 -0
  272. package/src/utilities/drawing/index.ts +3 -0
  273. package/src/utilities/dynamicVolume/getDataInTime.ts +110 -0
  274. package/src/utilities/dynamicVolume/index.ts +2 -0
  275. package/src/utilities/getAnnotationNearPoint.ts +130 -0
  276. package/src/utilities/getModalityUnit.ts +11 -0
  277. package/src/utilities/getToolsWithModesForElement.ts +52 -0
  278. package/src/utilities/index.ts +68 -0
  279. package/src/utilities/isObject.js +29 -0
  280. package/src/utilities/math/angle/angleBetweenLines.ts +29 -0
  281. package/src/utilities/math/circle/_types.ts +6 -0
  282. package/src/utilities/math/circle/getCanvasCircleCorners.ts +23 -0
  283. package/src/utilities/math/circle/getCanvasCircleRadius.ts +16 -0
  284. package/src/utilities/math/circle/index.ts +4 -0
  285. package/src/utilities/math/ellipse/getCanvasEllipseCorners.ts +26 -0
  286. package/src/utilities/math/ellipse/index.ts +4 -0
  287. package/src/utilities/math/ellipse/pointInEllipse.ts +38 -0
  288. package/src/utilities/math/ellipse/pointInEllipsoidWithConstraint.ts +35 -0
  289. package/src/utilities/math/index.ts +8 -0
  290. package/src/utilities/math/line/distanceToPoint.ts +24 -0
  291. package/src/utilities/math/line/distanceToPointSquared.ts +44 -0
  292. package/src/utilities/math/line/index.ts +5 -0
  293. package/src/utilities/math/line/intersectLine.ts +92 -0
  294. package/src/utilities/math/midPoint.ts +24 -0
  295. package/src/utilities/math/point/distanceToPoint.ts +22 -0
  296. package/src/utilities/math/point/index.ts +3 -0
  297. package/src/utilities/math/polyline/addCanvasPointsToArray.ts +62 -0
  298. package/src/utilities/math/polyline/calculateAreaOfPoints.ts +23 -0
  299. package/src/utilities/math/polyline/getIntersectionWithPolyline.ts +182 -0
  300. package/src/utilities/math/polyline/getSubPixelSpacingAndXYDirections.ts +99 -0
  301. package/src/utilities/math/polyline/index.ts +19 -0
  302. package/src/utilities/math/polyline/planarFreehandROIInternalTypes.ts +36 -0
  303. package/src/utilities/math/polyline/pointCanProjectOnLine.ts +57 -0
  304. package/src/utilities/math/polyline/pointsAreWithinCloseContourProximity.ts +15 -0
  305. package/src/utilities/math/rectangle/distanceToPoint.ts +82 -0
  306. package/src/utilities/math/rectangle/index.ts +3 -0
  307. package/src/utilities/math/sphere/index.ts +3 -0
  308. package/src/utilities/math/sphere/pointInSphere.ts +31 -0
  309. package/src/utilities/math/vec2/findClosestPoint.ts +40 -0
  310. package/src/utilities/math/vec2/index.ts +4 -0
  311. package/src/utilities/math/vec2/liangBarksyClip.ts +84 -0
  312. package/src/utilities/orientation/getOrientationStringLPS.ts +52 -0
  313. package/src/utilities/orientation/index.ts +4 -0
  314. package/src/utilities/orientation/invertOrientationStringLPS.ts +21 -0
  315. package/src/utilities/planar/filterAnnotationsForDisplay.ts +68 -0
  316. package/src/utilities/planar/filterAnnotationsWithinSlice.ts +85 -0
  317. package/src/utilities/planar/getPointInLineOfSightWithCriteria.ts +104 -0
  318. package/src/utilities/planar/getWorldWidthAndHeightFromCorners.ts +51 -0
  319. package/src/utilities/planar/getWorldWidthAndHeightFromTwoPoints.ts +51 -0
  320. package/src/utilities/planar/index.ts +18 -0
  321. package/src/utilities/planarFreehandROITool/index.ts +7 -0
  322. package/src/utilities/planarFreehandROITool/interpolateAnnotation.ts +87 -0
  323. package/src/utilities/planarFreehandROITool/interpolatePoints.ts +214 -0
  324. package/src/utilities/planarFreehandROITool/interpolation/algorithms/bspline.ts +55 -0
  325. package/src/utilities/planarFreehandROITool/interpolation/interpolateSegmentPoints.ts +90 -0
  326. package/src/utilities/pointInShapeCallback.ts +138 -0
  327. package/src/utilities/pointInSurroundingSphereCallback.ts +188 -0
  328. package/src/utilities/rectangleROITool/getBoundsIJKFromRectangleAnnotations.ts +76 -0
  329. package/src/utilities/rectangleROITool/index.ts +3 -0
  330. package/src/utilities/scroll.ts +62 -0
  331. package/src/utilities/segmentation/brushSizeForToolGroup.ts +72 -0
  332. package/src/utilities/segmentation/brushThresholdForToolGroup.ts +65 -0
  333. package/src/utilities/segmentation/createLabelmapVolumeForViewport.ts +74 -0
  334. package/src/utilities/segmentation/createMergedLabelmapForIndex.ts +65 -0
  335. package/src/utilities/segmentation/floodFill.ts +194 -0
  336. package/src/utilities/segmentation/getDefaultRepresentationConfig.ts +20 -0
  337. package/src/utilities/segmentation/index.ts +33 -0
  338. package/src/utilities/segmentation/isValidRepresentationConfig.ts +22 -0
  339. package/src/utilities/segmentation/rectangleROIThresholdVolumeByRange.ts +91 -0
  340. package/src/utilities/segmentation/thresholdSegmentationByRange.ts +129 -0
  341. package/src/utilities/segmentation/thresholdVolumeByRange.ts +150 -0
  342. package/src/utilities/segmentation/triggerSegmentationRender.ts +206 -0
  343. package/src/utilities/segmentation/utilities.ts +116 -0
  344. package/src/utilities/stackPrefetch/index.ts +8 -0
  345. package/src/utilities/stackPrefetch/stackPrefetch.ts +405 -0
  346. package/src/utilities/stackPrefetch/state.ts +17 -0
  347. package/src/utilities/throttle.js +69 -0
  348. package/src/utilities/touch/index.ts +246 -0
  349. package/src/utilities/triggerAnnotationRender.ts +237 -0
  350. package/src/utilities/triggerAnnotationRenderForViewportIds.ts +18 -0
  351. package/src/utilities/viewport/index.ts +5 -0
  352. package/src/utilities/viewport/isViewportPreScaled.ts +24 -0
  353. package/src/utilities/viewport/jumpToSlice.ts +73 -0
  354. package/src/utilities/viewport/jumpToWorld.ts +58 -0
  355. package/src/utilities/viewportFilters/filterViewportsWithFrameOfReferenceUID.ts +28 -0
  356. package/src/utilities/viewportFilters/filterViewportsWithParallelNormals.ts +26 -0
  357. package/src/utilities/viewportFilters/filterViewportsWithSameOrientation.ts +15 -0
  358. package/src/utilities/viewportFilters/filterViewportsWithToolEnabled.ts +72 -0
  359. package/src/utilities/viewportFilters/getViewportIdsWithToolToRender.ts +45 -0
  360. package/src/utilities/viewportFilters/index.ts +11 -0
@@ -0,0 +1,405 @@
1
+ import {
2
+ getEnabledElement,
3
+ StackViewport,
4
+ imageLoader,
5
+ Enums,
6
+ eventTarget,
7
+ imageLoadPoolManager,
8
+ cache,
9
+ getConfiguration as getCoreConfiguration,
10
+ } from '@cornerstonejs/core';
11
+ import { addToolState, getToolState } from './state';
12
+
13
+ const requestType = Enums.RequestType.Prefetch;
14
+ const priority = 0;
15
+ const addToBeginning = true;
16
+
17
+ let configuration = {
18
+ maxImagesToPrefetch: Infinity,
19
+ preserveExistingPool: false,
20
+ };
21
+
22
+ let resetPrefetchTimeout;
23
+ const resetPrefetchDelay = 10;
24
+
25
+ function range(lowEnd, highEnd) {
26
+ // Javascript version of Python's range function
27
+ // http://stackoverflow.com/questions/3895478/does-javascript-have-a-method-like-range-to-generate-an-array-based-on-suppl
28
+ lowEnd = Math.round(lowEnd) || 0;
29
+ highEnd = Math.round(highEnd) || 0;
30
+
31
+ const arr = [];
32
+ let c = highEnd - lowEnd + 1;
33
+
34
+ if (c <= 0) {
35
+ return arr;
36
+ }
37
+
38
+ while (c--) {
39
+ arr[c] = highEnd--;
40
+ }
41
+
42
+ return arr;
43
+ }
44
+
45
+ function nearestIndex(arr, x) {
46
+ // Return index of nearest values in array
47
+ // http://stackoverflow.com/questions/25854212/return-index-of-nearest-values-in-an-array
48
+ let low = 0;
49
+ let high = arr.length - 1;
50
+
51
+ arr.forEach((v, idx) => {
52
+ if (v < x) {
53
+ low = Math.max(idx, low);
54
+ } else if (v > x) {
55
+ high = Math.min(idx, high);
56
+ }
57
+ });
58
+
59
+ return { low, high };
60
+ }
61
+
62
+ function getStackData(element) {
63
+ const enabledElement = getEnabledElement(element);
64
+
65
+ if (!enabledElement) {
66
+ throw new Error(
67
+ 'stackPrefetch: element must be a valid Cornerstone enabled element'
68
+ );
69
+ }
70
+
71
+ const { viewport } = enabledElement;
72
+
73
+ if (!(viewport instanceof StackViewport)) {
74
+ throw new Error(
75
+ 'stackPrefetch: element must be a StackViewport, VolumeViewport stackPrefetch not yet implemented'
76
+ );
77
+ }
78
+
79
+ return {
80
+ currentImageIdIndex: viewport.getCurrentImageIdIndex(),
81
+ imageIds: viewport.getImageIds(),
82
+ };
83
+ }
84
+
85
+ function prefetch(element) {
86
+ // Get the stackPrefetch tool data
87
+ const stackPrefetchData = getToolState(element);
88
+
89
+ if (!stackPrefetchData) {
90
+ return;
91
+ }
92
+
93
+ const stackPrefetch = stackPrefetchData || {};
94
+ const stack = getStackData(element);
95
+
96
+ if (!stack || !stack.imageIds || stack.imageIds.length === 0) {
97
+ console.warn('CornerstoneTools.stackPrefetch: No images in stack.');
98
+ return;
99
+ }
100
+
101
+ // If all the requests are complete, disable the stackPrefetch tool
102
+ if (
103
+ !stackPrefetch.indicesToRequest ||
104
+ !stackPrefetch.indicesToRequest.length
105
+ ) {
106
+ stackPrefetch.enabled = false;
107
+ }
108
+
109
+ // Make sure the tool is still enabled
110
+ if (stackPrefetch.enabled === false) {
111
+ return;
112
+ }
113
+
114
+ // Remove an imageIdIndex from the list of indices to request
115
+ // This fires when the individual image loading deferred is resolved
116
+ function removeFromList(imageIdIndex) {
117
+ const index = stackPrefetch.indicesToRequest.indexOf(imageIdIndex);
118
+
119
+ if (index > -1) {
120
+ // Don't remove last element if imageIdIndex not found
121
+ stackPrefetch.indicesToRequest.splice(index, 1);
122
+ }
123
+ }
124
+
125
+ // Remove all already cached images from the
126
+ // IndicesToRequest array
127
+ stackPrefetchData.indicesToRequest.sort((a, b) => a - b);
128
+ const indicesToRequestCopy = stackPrefetch.indicesToRequest.slice();
129
+
130
+ indicesToRequestCopy.forEach(function (imageIdIndex) {
131
+ const imageId = stack.imageIds[imageIdIndex];
132
+
133
+ if (!imageId) {
134
+ return;
135
+ }
136
+
137
+ const imageLoadObject = cache.getImageLoadObject(imageId);
138
+
139
+ if (imageLoadObject) {
140
+ removeFromList(imageIdIndex);
141
+ }
142
+ });
143
+
144
+ // Stop here if there are no images left to request
145
+ // After those in the cache have been removed
146
+ if (!stackPrefetch.indicesToRequest.length) {
147
+ return;
148
+ }
149
+
150
+ // Clear the requestPool of prefetch requests, if needed.
151
+ if (!configuration.preserveExistingPool) {
152
+ imageLoadPoolManager.clearRequestStack(requestType);
153
+ }
154
+
155
+ // Identify the nearest imageIdIndex to the currentImageIdIndex
156
+ const nearest = nearestIndex(
157
+ stackPrefetch.indicesToRequest,
158
+ stack.currentImageIdIndex
159
+ );
160
+
161
+ let imageId;
162
+ let nextImageIdIndex;
163
+ const preventCache = false;
164
+
165
+ function doneCallback(image) {
166
+ console.log('prefetch done: %s', image.imageId);
167
+ const imageIdIndex = stack.imageIds.indexOf(image.imageId);
168
+
169
+ removeFromList(imageIdIndex);
170
+
171
+ // triggerEvent(element, EVENTS.STACK_PREFETCH_IMAGE_LOADED, {
172
+ // element,
173
+ // imageId: image.imageId,
174
+ // imageIndex: imageIdIndex,
175
+ // stackPrefetch,
176
+ // stack,
177
+ // });
178
+
179
+ // If there are no more images to fetch
180
+ // if (
181
+ // !(
182
+ // stackPrefetch.indicesToRequest &&
183
+ // stackPrefetch.indicesToRequest.length > 0
184
+ // )
185
+ // ) {
186
+ // triggerEvent(element, EVENTS.STACK_PREFETCH_DONE, {
187
+ // element,
188
+ // stackPrefetch,
189
+ // stack,
190
+ // });
191
+ // }
192
+ }
193
+
194
+ // Retrieve the errorLoadingHandler if one exists
195
+ // const errorLoadingHandler =
196
+ // loadHandlerManager.getErrorLoadingHandler(element);
197
+
198
+ // function failCallback(error) {
199
+ // logger.log('prefetch errored: %o', error);
200
+ // if (errorLoadingHandler) {
201
+ // errorLoadingHandler(element, imageId, error, 'stackPrefetch');
202
+ // }
203
+ // }
204
+
205
+ // Prefetch images around the current image (before and after)
206
+ let lowerIndex = nearest.low;
207
+ let higherIndex = nearest.high;
208
+ const imageIdsToPrefetch = [];
209
+
210
+ while (
211
+ lowerIndex >= 0 ||
212
+ higherIndex < stackPrefetch.indicesToRequest.length
213
+ ) {
214
+ const currentIndex = stack.currentImageIdIndex;
215
+ const shouldSkipLower =
216
+ currentIndex - stackPrefetch.indicesToRequest[lowerIndex] >
217
+ configuration.maxImagesToPrefetch;
218
+ const shouldSkipHigher =
219
+ stackPrefetch.indicesToRequest[higherIndex] - currentIndex >
220
+ configuration.maxImagesToPrefetch;
221
+
222
+ const shouldLoadLower = !shouldSkipLower && lowerIndex >= 0;
223
+ const shouldLoadHigher =
224
+ !shouldSkipHigher && higherIndex < stackPrefetch.indicesToRequest.length;
225
+
226
+ if (!shouldLoadHigher && !shouldLoadLower) {
227
+ break;
228
+ }
229
+
230
+ if (shouldLoadLower) {
231
+ nextImageIdIndex = stackPrefetch.indicesToRequest[lowerIndex--];
232
+ imageId = stack.imageIds[nextImageIdIndex];
233
+ imageIdsToPrefetch.push(imageId);
234
+ }
235
+
236
+ if (shouldLoadHigher) {
237
+ nextImageIdIndex = stackPrefetch.indicesToRequest[higherIndex++];
238
+ imageId = stack.imageIds[nextImageIdIndex];
239
+ imageIdsToPrefetch.push(imageId);
240
+ }
241
+ }
242
+
243
+ const requestFn = (imageId, options) =>
244
+ imageLoader.loadAndCacheImage(imageId, options);
245
+
246
+ const { useNorm16Texture } = getCoreConfiguration().rendering;
247
+
248
+ imageIdsToPrefetch.forEach((imageId) => {
249
+ // IMPORTANT: Request type should be passed if not the 'interaction'
250
+ // highest priority will be used for the request type in the imageRetrievalPool
251
+ const options = {
252
+ targetBuffer: {
253
+ type: useNorm16Texture ? undefined : 'Float32Array',
254
+ },
255
+ preScale: {
256
+ enabled: true,
257
+ },
258
+ requestType,
259
+ };
260
+
261
+ imageLoadPoolManager.addRequest(
262
+ requestFn.bind(null, imageId, options),
263
+ requestType,
264
+ // Additional details
265
+ {
266
+ imageId,
267
+ },
268
+ priority
269
+ // addToBeginning
270
+ );
271
+ });
272
+ }
273
+
274
+ function getPromiseRemovedHandler(element) {
275
+ return function (e) {
276
+ const eventData = e.detail;
277
+
278
+ // When an imagePromise has been pushed out of the cache, re-add its index
279
+ // It to the indicesToRequest list so that it will be retrieved later if the
280
+ // CurrentImageIdIndex is changed to an image nearby
281
+ let stackData;
282
+
283
+ try {
284
+ // It will throw an exception in some cases (eg: thumbnails)
285
+ stackData = getStackData(element);
286
+ } catch (error) {
287
+ return;
288
+ }
289
+
290
+ if (!stackData || !stackData.imageIds || stackData.imageIds.length === 0) {
291
+ return;
292
+ }
293
+
294
+ const stack = stackData;
295
+ const imageIdIndex = stack.imageIds.indexOf(eventData.imageId);
296
+
297
+ // Make sure the image that was removed is actually in this stack
298
+ // Before adding it to the indicesToRequest array
299
+ if (imageIdIndex < 0) {
300
+ return;
301
+ }
302
+
303
+ const stackPrefetchData = getToolState(element);
304
+
305
+ if (
306
+ !stackPrefetchData ||
307
+ !stackPrefetchData.data ||
308
+ !stackPrefetchData.data.length
309
+ ) {
310
+ return;
311
+ }
312
+
313
+ stackPrefetchData.indicesToRequest.push(imageIdIndex);
314
+ };
315
+ }
316
+
317
+ function onImageUpdated(e) {
318
+ // Start prefetching again (after a delay)
319
+ // When the user has scrolled to a new image
320
+ clearTimeout(resetPrefetchTimeout);
321
+ resetPrefetchTimeout = setTimeout(function () {
322
+ const element = e.target;
323
+
324
+ // If playClip is enabled and the user loads a different series in the viewport
325
+ // An exception will be thrown because the element will not be enabled anymore
326
+ try {
327
+ prefetch(element);
328
+ } catch (error) {
329
+ return;
330
+ }
331
+ }, resetPrefetchDelay);
332
+ }
333
+
334
+ function enable(element) {
335
+ const stack = getStackData(element);
336
+
337
+ if (!stack || !stack.imageIds || stack.imageIds.length === 0) {
338
+ console.warn('CornerstoneTools.stackPrefetch: No images in stack.');
339
+ return;
340
+ }
341
+
342
+ // Use the currentImageIdIndex from the stack as the initialImageIdIndex
343
+ const stackPrefetchData = {
344
+ indicesToRequest: range(0, stack.imageIds.length - 1),
345
+ enabled: true,
346
+ direction: 1,
347
+ };
348
+
349
+ // Remove the currentImageIdIndex from the list to request
350
+ const indexOfCurrentImage = stackPrefetchData.indicesToRequest.indexOf(
351
+ stack.currentImageIdIndex
352
+ );
353
+
354
+ stackPrefetchData.indicesToRequest.splice(indexOfCurrentImage, 1);
355
+
356
+ addToolState(element, stackPrefetchData);
357
+
358
+ prefetch(element);
359
+
360
+ element.removeEventListener(Enums.Events.STACK_NEW_IMAGE, onImageUpdated);
361
+ element.addEventListener(Enums.Events.STACK_NEW_IMAGE, onImageUpdated);
362
+
363
+ const promiseRemovedHandler = getPromiseRemovedHandler(element);
364
+
365
+ eventTarget.removeEventListener(
366
+ Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,
367
+ promiseRemovedHandler
368
+ );
369
+ eventTarget.addEventListener(
370
+ Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,
371
+ promiseRemovedHandler
372
+ );
373
+ }
374
+
375
+ function disable(element) {
376
+ clearTimeout(resetPrefetchTimeout);
377
+ element.removeEventListener(Enums.Events.STACK_NEW_IMAGE, onImageUpdated);
378
+
379
+ const promiseRemovedHandler = getPromiseRemovedHandler(element);
380
+
381
+ eventTarget.removeEventListener(
382
+ Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,
383
+ promiseRemovedHandler
384
+ );
385
+
386
+ const stackPrefetchData = getToolState(element);
387
+ // If there is actually something to disable, disable it
388
+
389
+ if (stackPrefetchData && stackPrefetchData.data.length) {
390
+ stackPrefetchData.enabled = false;
391
+
392
+ // Clear current prefetch requests from the requestPool
393
+ imageLoadPoolManager.clearRequestStack(requestType);
394
+ }
395
+ }
396
+
397
+ function getConfiguration() {
398
+ return configuration;
399
+ }
400
+
401
+ function setConfiguration(config) {
402
+ configuration = config;
403
+ }
404
+
405
+ export { enable, disable, getConfiguration, setConfiguration };
@@ -0,0 +1,17 @@
1
+ import { getEnabledElement } from '@cornerstonejs/core';
2
+
3
+ const state: Record<number, any> = {};
4
+
5
+ function addToolState(element: HTMLDivElement, data): void {
6
+ const enabledElement = getEnabledElement(element);
7
+ const { viewportId } = enabledElement;
8
+ state[viewportId] = data;
9
+ }
10
+
11
+ function getToolState(element: HTMLDivElement): any {
12
+ const enabledElement = getEnabledElement(element);
13
+ const { viewportId } = enabledElement;
14
+ return state[viewportId];
15
+ }
16
+
17
+ export { addToolState, getToolState };
@@ -0,0 +1,69 @@
1
+ import debounce from './debounce';
2
+ import isObject from './isObject';
3
+
4
+ /**
5
+ * Creates a throttled function that only invokes `func` at most once per
6
+ * every `wait` milliseconds (or once per browser frame). The throttled function
7
+ * comes with a `cancel` method to cancel delayed `func` invocations and a
8
+ * `flush` method to immediately invoke them. Provide `options` to indicate
9
+ * whether `func` should be invoked on the leading and/or trailing edge of the
10
+ * `wait` timeout. The `func` is invoked with the last arguments provided to the
11
+ * throttled function. Subsequent calls to the throttled function return the
12
+ * result of the last `func` invocation.
13
+ *
14
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is
15
+ * invoked on the trailing edge of the timeout only if the throttled function
16
+ * is invoked more than once during the `wait` timeout.
17
+ *
18
+ * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
19
+ * until the next tick, similar to `setTimeout` with a timeout of `0`.
20
+ *
21
+ * If `wait` is omitted in an environment with `requestAnimationFrame`, `func`
22
+ * invocation will be deferred until the next frame is drawn (typically about
23
+ * 16ms).
24
+ *
25
+ * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
26
+ * for details over the differences between `throttle` and `debounce`.
27
+ *
28
+ * @param {Function} func The function to throttle.
29
+ * @param {number} [wait=0]
30
+ * The number of milliseconds to throttle invocations to; if omitted,
31
+ * `requestAnimationFrame` is used (if available).
32
+ * @param {Object} [options={}] The options object.
33
+ * @param {boolean} [options.leading=true]
34
+ * Specify invoking on the leading edge of the timeout.
35
+ * @param {boolean} [options.trailing=true]
36
+ * Specify invoking on the trailing edge of the timeout.
37
+ * @returns {Function} Returns the new throttled function.
38
+ * @example
39
+ *
40
+ * // Avoid excessively updating the position while scrolling.
41
+ * jQuery(window).on('scroll', throttle(updatePosition, 100))
42
+ *
43
+ * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
44
+ * const throttled = throttle(renewToken, 300000, { 'trailing': false })
45
+ * jQuery(element).on('click', throttled)
46
+ *
47
+ * // Cancel the trailing throttled invocation.
48
+ * jQuery(window).on('popstate', throttled.cancel)
49
+ */
50
+ function throttle(func, wait, options) {
51
+ let leading = true;
52
+ let trailing = true;
53
+
54
+ if (typeof func !== 'function') {
55
+ throw new TypeError('Expected a function');
56
+ }
57
+ if (isObject(options)) {
58
+ leading = 'leading' in options ? Boolean(options.leading) : leading;
59
+ trailing = 'trailing' in options ? Boolean(options.trailing) : trailing;
60
+ }
61
+
62
+ return debounce(func, wait, {
63
+ leading,
64
+ trailing,
65
+ maxWait: wait,
66
+ });
67
+ }
68
+
69
+ export default throttle;