@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,110 @@
1
+ import { ImageVolume, utilities as csUtils } from '@cornerstonejs/core';
2
+ import type { Types } from '@cornerstonejs/core';
3
+
4
+ import { getBoundingBoxAroundShape } from '../../../utilities/boundingBox';
5
+ import { pointInShapeCallback } from '../../../utilities';
6
+ import { triggerSegmentationDataModified } from '../../../stateManagement/segmentation/triggerSegmentationEvents';
7
+
8
+ const { transformWorldToIndex } = csUtils;
9
+
10
+ type OperationData = {
11
+ segmentationId: string;
12
+ points: [Types.Point3, Types.Point3, Types.Point3, Types.Point3];
13
+ volume: ImageVolume;
14
+ constraintFn: (x: [number, number, number]) => boolean;
15
+ segmentIndex: number;
16
+ segmentsLocked: number[];
17
+ };
18
+
19
+ /**
20
+ * For each point in the bounding box around the rectangle, if the point is inside
21
+ * the rectangle, set the scalar value to the segmentIndex
22
+ * @param toolGroupId - string
23
+ * @param operationData - OperationData
24
+ * @param constraintFn - can be used to perform threshold segmentation
25
+ * @param inside - boolean
26
+ */
27
+ // Todo: why we have another constraintFn? in addition to the one in the operationData?
28
+ function fillRectangle(
29
+ enabledElement: Types.IEnabledElement,
30
+ operationData: OperationData,
31
+ inside = true
32
+ ): void {
33
+ const {
34
+ volume: segmentation,
35
+ points,
36
+ segmentsLocked,
37
+ segmentIndex,
38
+ segmentationId,
39
+ constraintFn,
40
+ } = operationData;
41
+ const { imageData, dimensions } = segmentation;
42
+ const scalarData = segmentation.getScalarData();
43
+
44
+ let rectangleCornersIJK = points.map((world) => {
45
+ return transformWorldToIndex(imageData, world);
46
+ });
47
+
48
+ // math round
49
+ rectangleCornersIJK = rectangleCornersIJK.map((point) => {
50
+ return point.map((coord) => {
51
+ return Math.round(coord);
52
+ });
53
+ });
54
+
55
+ const boundsIJK = getBoundingBoxAroundShape(rectangleCornersIJK, dimensions);
56
+
57
+ if (boundsIJK.every(([min, max]) => min !== max)) {
58
+ throw new Error('Oblique segmentation tools are not supported yet');
59
+ }
60
+
61
+ // Since always all points inside the boundsIJK is inside the rectangle...
62
+ const pointInRectangle = () => true;
63
+
64
+ const callback = ({ value, index, pointIJK }) => {
65
+ if (segmentsLocked.includes(value)) {
66
+ return;
67
+ }
68
+
69
+ if (!constraintFn) {
70
+ scalarData[index] = segmentIndex;
71
+ return;
72
+ }
73
+
74
+ if (constraintFn(pointIJK)) {
75
+ scalarData[index] = segmentIndex;
76
+ }
77
+ };
78
+
79
+ pointInShapeCallback(imageData, pointInRectangle, callback, boundsIJK);
80
+
81
+ triggerSegmentationDataModified(segmentationId);
82
+ }
83
+
84
+ /**
85
+ * Fill the inside of a rectangle
86
+ * @param toolGroupId - The unique identifier of the tool group.
87
+ * @param operationData - The data that will be used to create the
88
+ * new rectangle.
89
+ * @param constraintFn - can be used to perform threshold segmentation
90
+ */
91
+ export function fillInsideRectangle(
92
+ enabledElement: Types.IEnabledElement,
93
+ operationData: OperationData
94
+ ): void {
95
+ fillRectangle(enabledElement, operationData, true);
96
+ }
97
+
98
+ /**
99
+ * Fill the area outside of a rectangle for the toolGroupId and segmentationRepresentationUID.
100
+ * @param toolGroupId - The unique identifier of the tool group.
101
+ * @param operationData - The data that will be used to create the
102
+ * new rectangle.
103
+ * @param constraintFn - can be used to perform threshold segmentation
104
+ */
105
+ export function fillOutsideRectangle(
106
+ enabledElement: Types.IEnabledElement,
107
+ operationData: OperationData
108
+ ): void {
109
+ fillRectangle(enabledElement, operationData, false);
110
+ }
@@ -0,0 +1,88 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+
3
+ import { triggerSegmentationDataModified } from '../../../stateManagement/segmentation/triggerSegmentationEvents';
4
+ import { pointInSurroundingSphereCallback } from '../../../utilities';
5
+
6
+ type OperationData = {
7
+ points: [Types.Point3, Types.Point3, Types.Point3, Types.Point3];
8
+ volume: Types.IImageVolume;
9
+ segmentIndex: number;
10
+ segmentationId: string;
11
+ segmentsLocked: number[];
12
+ viewPlaneNormal: Types.Point3;
13
+ viewUp: Types.Point3;
14
+ constraintFn: () => boolean;
15
+ };
16
+
17
+ function fillSphere(
18
+ enabledElement: Types.IEnabledElement,
19
+ operationData: OperationData,
20
+ _inside = true
21
+ ): void {
22
+ const { viewport } = enabledElement;
23
+ const {
24
+ volume: segmentation,
25
+ segmentsLocked,
26
+ segmentIndex,
27
+ segmentationId,
28
+ points,
29
+ } = operationData;
30
+
31
+ const { imageData, dimensions } = segmentation;
32
+ const scalarData = segmentation.getScalarData();
33
+ const scalarIndex = [];
34
+
35
+ const callback = ({ index, value }) => {
36
+ if (segmentsLocked.includes(value)) {
37
+ return;
38
+ }
39
+ scalarData[index] = segmentIndex;
40
+ scalarIndex.push(index);
41
+ };
42
+
43
+ pointInSurroundingSphereCallback(
44
+ imageData,
45
+ [points[0], points[1]],
46
+ callback,
47
+ viewport as Types.IVolumeViewport
48
+ );
49
+
50
+ // Since the scalar indexes start from the top left corner of the cube, the first
51
+ // slice that needs to be rendered can be calculated from the first mask coordinate
52
+ // divided by the zMultiple, as well as the last slice for the last coordinate
53
+ const zMultiple = dimensions[0] * dimensions[1];
54
+ const minSlice = Math.floor(scalarIndex[0] / zMultiple);
55
+ const maxSlice = Math.floor(scalarIndex[scalarIndex.length - 1] / zMultiple);
56
+ const sliceArray = Array.from(
57
+ { length: maxSlice - minSlice + 1 },
58
+ (v, k) => k + minSlice
59
+ );
60
+
61
+ triggerSegmentationDataModified(segmentationId, sliceArray);
62
+ }
63
+
64
+ /**
65
+ * Fill inside a sphere with the given segment index in the given operation data. The
66
+ * operation data contains the sphere required points.
67
+ * @param enabledElement - The element that is enabled and selected.
68
+ * @param operationData - OperationData
69
+ */
70
+ export function fillInsideSphere(
71
+ enabledElement: Types.IEnabledElement,
72
+ operationData: OperationData
73
+ ): void {
74
+ fillSphere(enabledElement, operationData, true);
75
+ }
76
+
77
+ /**
78
+ * Fill outside a sphere with the given segment index in the given operation data. The
79
+ * operation data contains the sphere required points.
80
+ * @param enabledElement - The element that is enabled and selected.
81
+ * @param operationData - OperationData
82
+ */
83
+ export function fillOutsideSphere(
84
+ enabledElement: Types.IEnabledElement,
85
+ operationData: OperationData
86
+ ): void {
87
+ fillSphere(enabledElement, operationData, false);
88
+ }
@@ -0,0 +1,9 @@
1
+ import { fillInsideRectangle, fillOutsideRectangle } from './fillRectangle';
2
+ import { fillInsideCircle, fillOutsideCircle } from './fillCircle';
3
+
4
+ export {
5
+ fillInsideRectangle,
6
+ fillOutsideRectangle,
7
+ fillInsideCircle,
8
+ fillOutsideCircle,
9
+ };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * AnnotationGroupSelector is a type that can be used to specify the
3
+ * group of annotations to which an annotation should be added.
4
+ */
5
+ type AnnotationGroupSelector = HTMLDivElement | string;
6
+
7
+ export default AnnotationGroupSelector;
@@ -0,0 +1,42 @@
1
+ type Modes = '' | 'Active' | 'Passive' | 'Enabled';
2
+ type States = '' | 'Highlighted' | 'Selected' | 'Locked';
3
+
4
+ type Properties =
5
+ | 'color'
6
+ | 'lineWidth'
7
+ | 'lineDash'
8
+ | 'textBoxFontFamily'
9
+ | 'textBoxFontSize'
10
+ | 'textBoxColor'
11
+ | 'textBoxBackground'
12
+ | 'textBoxLinkLineWidth'
13
+ | 'textBoxLinkLineDash';
14
+
15
+ export type AnnotationStyle = {
16
+ [key in `${Properties}${States}${Modes}`]?: string;
17
+ };
18
+
19
+ export type ToolStyleConfig = {
20
+ [toolName: string]: AnnotationStyle;
21
+ global?: AnnotationStyle;
22
+ };
23
+
24
+ export type StyleConfig = {
25
+ annotations?: {
26
+ [annotationUID: string]: AnnotationStyle;
27
+ };
28
+ viewports?: {
29
+ [viewportId: string]: ToolStyleConfig;
30
+ };
31
+ toolGroups?: {
32
+ [toolGroupId: string]: ToolStyleConfig;
33
+ };
34
+ default: ToolStyleConfig;
35
+ };
36
+
37
+ export type StyleSpecifier = {
38
+ viewportId?: string;
39
+ toolGroupId?: string;
40
+ toolName?: string;
41
+ annotationUID?: string;
42
+ };
@@ -0,0 +1,109 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+
3
+ type Annotation = {
4
+ /** A unique identifier for this annotation */
5
+ annotationUID?: string;
6
+ /** If the annotation is being hovered over and is highlighted */
7
+ highlighted?: boolean;
8
+ /** If the annotation is locked for manipulation */
9
+ isLocked?: boolean;
10
+ /** If the annotation is visible for manipulation */
11
+ isVisible?: boolean;
12
+ /** Has annotation data been invalidated (e.g., as a result of mouse interactions) */
13
+ invalidated?: boolean;
14
+ /** Metadata for annotation */
15
+ metadata: {
16
+ /**
17
+ * The position of the camera in world space
18
+ */
19
+ cameraPosition?: Types.Point3;
20
+ /**
21
+ * The focal point of the camera in world space
22
+ */
23
+ cameraFocalPoint?: Types.Point3;
24
+ /**
25
+ * The normal on which the tool was drawn
26
+ */
27
+ viewPlaneNormal?: Types.Point3;
28
+ /**
29
+ * The viewUp on which the tool was drawn.
30
+ */
31
+ viewUp?: Types.Point3;
32
+ /**
33
+ * The FrameOfReferenceUID
34
+ */
35
+ FrameOfReferenceUID: string;
36
+ /**
37
+ * The registered name of the tool
38
+ */
39
+ toolName: string;
40
+ /**
41
+ * An optional property used when annotating on a slice in a StackViewport,
42
+ * or when annotating in a VolumeViewport on a viewPlane that corresponds to
43
+ * original slice-based image data.
44
+ */
45
+ referencedImageId?: string;
46
+ /**
47
+ * VolumeId of the volume that the tool was configured to work on.
48
+ */
49
+ volumeId?: string;
50
+ };
51
+ /**
52
+ * Data for annotation, Derivatives need to define their own data types.
53
+ */
54
+ data: {
55
+ /** Annotation handles that are grabbable for manipulation */
56
+ handles?: {
57
+ /** world location of the handles in the space */
58
+ points?: Types.Point3[];
59
+ /** index of the active handle being manipulated */
60
+ activeHandleIndex?: number | null;
61
+ /** annotation text box information */
62
+ textBox?: {
63
+ /** whether the text box has moved */
64
+ hasMoved: boolean;
65
+ /** the world location of the text box */
66
+ worldPosition: Types.Point3;
67
+ /** text box bounding box information */
68
+ worldBoundingBox: {
69
+ /** Top left location of the text box in the world space */
70
+ topLeft: Types.Point3;
71
+ /** Top right location of the text box in the world space */
72
+ topRight: Types.Point3;
73
+ /** Bottom left location of the text box in the world space */
74
+ bottomLeft: Types.Point3;
75
+ /** Bottom right location of the text box in the world space */
76
+ bottomRight: Types.Point3;
77
+ };
78
+ };
79
+ [key: string]: any;
80
+ };
81
+ [key: string]: any;
82
+ /** Cached Annotation statistics which is specific to the tool */
83
+ cachedStats?: unknown;
84
+ };
85
+ };
86
+
87
+ /** Array of annotations */
88
+ type Annotations = Array<Annotation>;
89
+
90
+ type GroupSpecificAnnotations = {
91
+ /** Each tool annotations */
92
+ [toolName: string]: Annotations;
93
+ };
94
+
95
+ /**
96
+ * All frame of reference specific annotations for all tools.
97
+ */
98
+ type AnnotationState = {
99
+ /**
100
+ * A string representing the key that can be used
101
+ * to retrieve the key-specific annotations. For instance, our default
102
+ * annotation state key is the FrameOfReferenceUID which is for our default
103
+ * frameOfReferenceAnnotationManager. You can write your own annotation manager
104
+ * that works for a different use case and use a different key.
105
+ */
106
+ [key: string]: GroupSpecificAnnotations;
107
+ };
108
+
109
+ export { Annotation, Annotations, GroupSpecificAnnotations, AnnotationState };
@@ -0,0 +1,5 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+
3
+ type BoundsIJK = [Types.Point2, Types.Point2, Types.Point2];
4
+
5
+ export default BoundsIJK;
@@ -0,0 +1,32 @@
1
+ import { Types } from '@cornerstonejs/core';
2
+
3
+ type PlayClipOptions = {
4
+ framesPerSecond?: number;
5
+ frameTimeVector?: number[];
6
+ reverse?: boolean;
7
+ loop?: boolean;
8
+ dynamicCineEnabled?: boolean;
9
+ frameTimeVectorSpeedMultiplier?: number;
10
+ };
11
+
12
+ interface ToolData {
13
+ intervalId: number | undefined;
14
+ framesPerSecond: number;
15
+ lastFrameTimeStamp: number | undefined;
16
+ frameTimeVector: number[] | undefined;
17
+ ignoreFrameTimeVector: boolean;
18
+ usingFrameTimeVector: boolean;
19
+ speed: number;
20
+ reverse: boolean;
21
+ loop: boolean;
22
+ dynamicCineEnabled?: boolean;
23
+ }
24
+
25
+ type CinePlayContext = {
26
+ get numScrollSteps(): number;
27
+ get currentStepIndex(): number;
28
+ get frameTimeVectorEnabled(): boolean;
29
+ scroll(delta: number): void;
30
+ };
31
+
32
+ export type { PlayClipOptions, ToolData, CinePlayContext };
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Label map config for the label map representation
3
+ */
4
+ export type ContourConfig = {
5
+ /** thickness of the outline when segmentation is active */
6
+ outlineWidthActive?: number;
7
+ /** thickness of the outline when segmentation is inactive */
8
+ outlineWidthInactive?: number;
9
+ /** alpha of outline for active segmentation */
10
+ outlineOpacity?: number;
11
+ /** alpha of outline for inactive segmentation */
12
+ outlineOpacityInactive?: number;
13
+ };
14
+
15
+ /**
16
+ * Labelmap representation type
17
+ */
18
+ export type ContourRenderingConfig = {
19
+ // not much here yet
20
+ };
21
+
22
+ export type ContourSegmentationData = {
23
+ // Ids of the contourSets that are part of this segmentation
24
+ // in the cache
25
+ geometryIds: string[];
26
+ };
@@ -0,0 +1,12 @@
1
+ export type SVGPoint = {
2
+ x: number;
3
+ y: number;
4
+ };
5
+
6
+ export type SVGCursorDescriptor = {
7
+ iconContent: string;
8
+ iconSize: number;
9
+ viewBox: SVGPoint;
10
+ mousePoint: SVGPoint;
11
+ mousePointerGroupString: string;
12
+ };