@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,24 @@
1
+ import MouseCursor, { standardCursorNames } from './MouseCursor';
2
+ import ImageMouseCursor from './ImageMouseCursor';
3
+ import SVGMouseCursor from './SVGMouseCursor';
4
+ import * as elementCursor from './elementCursor';
5
+ import setCursorForElement from './setCursorForElement';
6
+ import {
7
+ registerCursor,
8
+ svgCursorNames,
9
+ CursorSVG,
10
+ } from './SVGCursorDescriptor';
11
+
12
+ // Todo: this should be enum
13
+ const CursorNames = [...svgCursorNames, ...standardCursorNames];
14
+
15
+ export {
16
+ MouseCursor,
17
+ ImageMouseCursor,
18
+ SVGMouseCursor,
19
+ elementCursor,
20
+ registerCursor,
21
+ CursorNames,
22
+ CursorSVG,
23
+ setCursorForElement,
24
+ };
@@ -0,0 +1,33 @@
1
+ import { setElementCursor } from './elementCursor';
2
+ import MouseCursor from './MouseCursor';
3
+ import SVGMouseCursor from './SVGMouseCursor';
4
+
5
+ /**
6
+ * Set the cursor for an HTML element. cursorNames can be either
7
+ * cornerstone3DTools cursors or standard cursors.
8
+ *
9
+ * @param element - The element to set the cursor on.
10
+ * @param cursorName - The name of the cursor to set. This can be
11
+ * any cursor name either Cornerstone-specific cursor names or the standard
12
+ * CSS cursor names.
13
+ */
14
+ function setCursorForElement(
15
+ element: HTMLDivElement,
16
+ cursorName: string
17
+ ): void {
18
+ let cursor = SVGMouseCursor.getDefinedCursor(cursorName, true);
19
+ if (!cursor) {
20
+ cursor = MouseCursor.getDefinedCursor(cursorName);
21
+ }
22
+
23
+ if (!cursor) {
24
+ console.log(
25
+ `Cursor ${cursorName} is not defined either as SVG or as a standard cursor.`
26
+ );
27
+ cursor = MouseCursor.getDefinedCursor(cursorName);
28
+ }
29
+
30
+ setElementCursor(element, cursor);
31
+ }
32
+
33
+ export default setCursorForElement;
@@ -0,0 +1,9 @@
1
+ function _getHash(
2
+ annotationUID: string,
3
+ drawingElementType: string,
4
+ nodeUID: string
5
+ ): string {
6
+ return `${annotationUID}::${drawingElementType}::${nodeUID}`;
7
+ }
8
+
9
+ export default _getHash;
@@ -0,0 +1,13 @@
1
+ export function _setAttributesIfNecessary(attributes, svgNode) {
2
+ Object.keys(attributes).forEach((key) => {
3
+ const currentValue = svgNode.getAttribute(key);
4
+ const newValue = attributes[key];
5
+ if (newValue === undefined || newValue === '') {
6
+ svgNode.removeAttribute(key);
7
+ } else if (currentValue !== newValue) {
8
+ svgNode.setAttribute(key, newValue);
9
+ }
10
+ });
11
+ }
12
+
13
+ export default _setAttributesIfNecessary;
@@ -0,0 +1,10 @@
1
+ export function _setNewAttributesIfValid(attributes, svgNode) {
2
+ Object.keys(attributes).forEach((key) => {
3
+ const newValue = attributes[key];
4
+ if (newValue !== undefined && newValue !== '') {
5
+ svgNode.setAttribute(key, newValue);
6
+ }
7
+ });
8
+ }
9
+
10
+ export default _setNewAttributesIfValid;
@@ -0,0 +1,26 @@
1
+ import getSvgDrawingHelper from './getSvgDrawingHelper';
2
+
3
+ /**
4
+ * We are not using it anywhere yet.
5
+ * @param element
6
+ * @param toolType
7
+ * @internal
8
+ */
9
+ function clearByToolType(element: HTMLDivElement, toolType: string): void {
10
+ const svgDrawingHelper = getSvgDrawingHelper(element);
11
+ const nodes = svgDrawingHelper.svgLayerElement.querySelectorAll(
12
+ 'svg > *'
13
+ ) as NodeListOf<SVGElement>;
14
+
15
+ // Todo: check variable namings when this function starts to get utilized
16
+ for (let i = 0; i < nodes.length; i++) {
17
+ const node = nodes[i];
18
+ const toolUID = node.dataset.toolUid;
19
+
20
+ if (toolUID === toolType) {
21
+ svgDrawingHelper.svgLayerElement.removeChild(node);
22
+ }
23
+ }
24
+ }
25
+
26
+ export default clearByToolType;
@@ -0,0 +1,16 @@
1
+ import getSvgDrawingHelper from './getSvgDrawingHelper';
2
+
3
+ function draw(
4
+ element: HTMLDivElement,
5
+ fn: (svgDrawingElement: any) => any
6
+ ): void {
7
+ const svgDrawingHelper = getSvgDrawingHelper(element);
8
+
9
+ // Save...
10
+ fn(svgDrawingHelper);
11
+ // Restore...
12
+
13
+ svgDrawingHelper.clearUntouched();
14
+ }
15
+
16
+ export default draw;
@@ -0,0 +1,82 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+ import { SVGDrawingHelper } from '../types';
3
+ import drawLine from './drawLine';
4
+
5
+ export default function drawArrow(
6
+ svgDrawingHelper: SVGDrawingHelper,
7
+ annotationUID: string,
8
+ arrowUID: string,
9
+ start: Types.Point2,
10
+ end: Types.Point2,
11
+ options = {}
12
+ ): void {
13
+ // if length is NaN return
14
+ if (isNaN(start[0]) || isNaN(start[1]) || isNaN(end[0]) || isNaN(end[1])) {
15
+ return;
16
+ }
17
+
18
+ const { color, width, lineWidth, lineDash } = Object.assign(
19
+ {
20
+ color: 'dodgerblue',
21
+ width: '2',
22
+ lineWidth: undefined,
23
+ lineDash: undefined,
24
+ },
25
+ options
26
+ );
27
+
28
+ // The line itself
29
+ drawLine(svgDrawingHelper, annotationUID, arrowUID, start, end, {
30
+ color,
31
+ width,
32
+ lineWidth,
33
+ lineDash,
34
+ });
35
+
36
+ // Drawing the head arrow with two lines
37
+ // Variables to be used when creating the arrow
38
+ const headLength = 10;
39
+ const angle = Math.atan2(end[1] - start[1], end[0] - start[0]);
40
+
41
+ const firstLine = {
42
+ start: [
43
+ end[0] - headLength * Math.cos(angle - Math.PI / 7),
44
+ end[1] - headLength * Math.sin(angle - Math.PI / 7),
45
+ ] as Types.Point2,
46
+ end: end,
47
+ };
48
+
49
+ const secondLine = {
50
+ start: [
51
+ end[0] - headLength * Math.cos(angle + Math.PI / 7),
52
+ end[1] - headLength * Math.sin(angle + Math.PI / 7),
53
+ ] as Types.Point2,
54
+ end: end,
55
+ };
56
+
57
+ drawLine(
58
+ svgDrawingHelper,
59
+ annotationUID,
60
+ '2',
61
+ firstLine.start,
62
+ firstLine.end,
63
+ {
64
+ color,
65
+ width,
66
+ lineWidth,
67
+ }
68
+ );
69
+
70
+ drawLine(
71
+ svgDrawingHelper,
72
+ annotationUID,
73
+ '3',
74
+ secondLine.start,
75
+ secondLine.end,
76
+ {
77
+ color,
78
+ width,
79
+ lineWidth,
80
+ }
81
+ );
82
+ }
@@ -0,0 +1,62 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+ import { SVGDrawingHelper } from '../types';
3
+
4
+ import _getHash from './_getHash';
5
+
6
+ import _setAttributesIfNecessary from './_setAttributesIfNecessary';
7
+ import _setNewAttributesIfValid from './_setNewAttributesIfValid';
8
+
9
+ function drawCircle(
10
+ svgDrawingHelper: SVGDrawingHelper,
11
+ annotationUID: string,
12
+ circleUID: string,
13
+ center: Types.Point2,
14
+ radius: number,
15
+ options = {},
16
+ dataId = ''
17
+ ): void {
18
+ const { color, fill, width, lineWidth } = Object.assign(
19
+ {
20
+ color: 'dodgerblue',
21
+ fill: 'transparent',
22
+ width: '2',
23
+ lineWidth: undefined,
24
+ },
25
+ options
26
+ );
27
+
28
+ // for supporting both lineWidth and width options
29
+ const strokeWidth = lineWidth || width;
30
+
31
+ // variable for the namespace
32
+ const svgns = 'http://www.w3.org/2000/svg';
33
+ const svgNodeHash = _getHash(annotationUID, 'circle', circleUID);
34
+ const existingCircleElement = svgDrawingHelper.getSvgNode(svgNodeHash);
35
+
36
+ const attributes = {
37
+ cx: `${center[0]}`,
38
+ cy: `${center[1]}`,
39
+ r: `${radius}`,
40
+ stroke: color,
41
+ fill,
42
+ 'stroke-width': strokeWidth,
43
+ };
44
+
45
+ if (existingCircleElement) {
46
+ _setAttributesIfNecessary(attributes, existingCircleElement);
47
+
48
+ svgDrawingHelper.setNodeTouched(svgNodeHash);
49
+ } else {
50
+ const newCircleElement = document.createElementNS(svgns, 'circle');
51
+
52
+ if (dataId !== '') {
53
+ newCircleElement.setAttribute('data-id', dataId);
54
+ }
55
+
56
+ _setNewAttributesIfValid(attributes, newCircleElement);
57
+
58
+ svgDrawingHelper.appendNode(newCircleElement, svgNodeHash);
59
+ }
60
+ }
61
+
62
+ export default drawCircle;
@@ -0,0 +1,71 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+ import { SVGDrawingHelper } from '../types';
3
+
4
+ import _getHash from './_getHash';
5
+ import _setAttributesIfNecessary from './_setAttributesIfNecessary';
6
+ import _setNewAttributesIfValid from './_setNewAttributesIfValid';
7
+
8
+ function drawEllipse(
9
+ svgDrawingHelper: SVGDrawingHelper,
10
+ annotationUID: string,
11
+ ellipseUID: string,
12
+ corner1: Types.Point2,
13
+ corner2: Types.Point2,
14
+ options = {},
15
+ dataId = ''
16
+ ): void {
17
+ const { color, width, lineWidth, lineDash } = Object.assign(
18
+ {
19
+ color: 'dodgerblue',
20
+ width: '2',
21
+ lineWidth: undefined,
22
+ lineDash: undefined,
23
+ },
24
+ options
25
+ );
26
+
27
+ // for supporting both lineWidth and width options
28
+ const strokeWidth = lineWidth || width;
29
+
30
+ const svgns = 'http://www.w3.org/2000/svg';
31
+ const svgNodeHash = _getHash(annotationUID, 'ellipse', ellipseUID);
32
+ const existingEllipse = svgDrawingHelper.getSvgNode(svgNodeHash);
33
+
34
+ const w = Math.abs(corner1[0] - corner2[0]);
35
+ const h = Math.abs(corner1[1] - corner2[1]);
36
+ const xMin = Math.min(corner1[0], corner2[0]);
37
+ const yMin = Math.min(corner1[1], corner2[1]);
38
+
39
+ const center = [xMin + w / 2, yMin + h / 2];
40
+ const radiusX = w / 2;
41
+ const radiusY = h / 2;
42
+
43
+ const attributes = {
44
+ cx: `${center[0]}`,
45
+ cy: `${center[1]}`,
46
+ rx: `${radiusX}`,
47
+ ry: `${radiusY}`,
48
+ stroke: color,
49
+ fill: 'transparent',
50
+ 'stroke-width': strokeWidth,
51
+ 'stroke-dasharray': lineDash,
52
+ };
53
+
54
+ if (existingEllipse) {
55
+ _setAttributesIfNecessary(attributes, existingEllipse);
56
+
57
+ svgDrawingHelper.setNodeTouched(svgNodeHash);
58
+ } else {
59
+ const svgEllipseElement = document.createElementNS(svgns, 'ellipse');
60
+
61
+ if (dataId !== '') {
62
+ svgEllipseElement.setAttribute('data-id', dataId);
63
+ }
64
+
65
+ _setNewAttributesIfValid(attributes, svgEllipseElement);
66
+
67
+ svgDrawingHelper.appendNode(svgEllipseElement, svgNodeHash);
68
+ }
69
+ }
70
+
71
+ export default drawEllipse;
@@ -0,0 +1,87 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+
3
+ import _getHash from './_getHash';
4
+ import _setNewAttributesIfValid from './_setNewAttributesIfValid';
5
+ import _setAttributesIfNecessary from './_setAttributesIfNecessary';
6
+ import { SVGDrawingHelper } from '../types';
7
+
8
+ function drawHandles(
9
+ svgDrawingHelper: SVGDrawingHelper,
10
+ annotationUID: string,
11
+ handleGroupUID: string,
12
+ handlePoints: Array<Types.Point2>,
13
+ options = {}
14
+ ): void {
15
+ const { color, handleRadius, width, lineWidth, fill, type } = Object.assign(
16
+ {
17
+ color: 'dodgerblue',
18
+ handleRadius: '6',
19
+ width: '2',
20
+ lineWidth: undefined,
21
+ fill: 'transparent',
22
+ type: 'circle',
23
+ },
24
+ options
25
+ );
26
+
27
+ // for supporting both lineWidth and width options
28
+ const strokeWidth = lineWidth || width;
29
+
30
+ for (let i = 0; i < handlePoints.length; i++) {
31
+ const handle = handlePoints[i];
32
+
33
+ // variable for the namespace
34
+ const svgns = 'http://www.w3.org/2000/svg';
35
+ const svgNodeHash = _getHash(
36
+ annotationUID,
37
+ 'handle',
38
+ `hg-${handleGroupUID}-index-${i}`
39
+ );
40
+
41
+ let attributes;
42
+ if (type === 'circle') {
43
+ attributes = {
44
+ cx: `${handle[0]}`,
45
+ cy: `${handle[1]}`,
46
+ r: handleRadius,
47
+ stroke: color,
48
+ fill,
49
+ 'stroke-width': strokeWidth,
50
+ };
51
+ } else if (type === 'rect') {
52
+ const handleRadiusFloat = parseFloat(handleRadius);
53
+ const side = handleRadiusFloat * 1.5;
54
+ const x = handle[0] - side * 0.5;
55
+ const y = handle[1] - side * 0.5;
56
+
57
+ attributes = {
58
+ x: `${x}`,
59
+ y: `${y}`,
60
+ width: `${side}`,
61
+ height: `${side}`,
62
+ stroke: color,
63
+ fill,
64
+ 'stroke-width': strokeWidth,
65
+ rx: `${side * 0.1}`,
66
+ };
67
+ } else {
68
+ throw new Error(`Unsupported handle type: ${type}`);
69
+ }
70
+
71
+ const existingHandleElement = svgDrawingHelper.getSvgNode(svgNodeHash);
72
+
73
+ if (existingHandleElement) {
74
+ _setAttributesIfNecessary(attributes, existingHandleElement);
75
+
76
+ svgDrawingHelper.setNodeTouched(svgNodeHash);
77
+ } else {
78
+ const newHandleElement = document.createElementNS(svgns, type);
79
+
80
+ _setNewAttributesIfValid(attributes, newHandleElement);
81
+
82
+ svgDrawingHelper.appendNode(newHandleElement, svgNodeHash);
83
+ }
84
+ }
85
+ }
86
+
87
+ export default drawHandles;
@@ -0,0 +1,70 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+
3
+ import _getHash from './_getHash';
4
+ import _setNewAttributesIfValid from './_setNewAttributesIfValid';
5
+ import _setAttributesIfNecessary from './_setAttributesIfNecessary';
6
+ import { SVGDrawingHelper } from '../types';
7
+
8
+ export default function drawLine(
9
+ svgDrawingHelper: SVGDrawingHelper,
10
+ annotationUID: string,
11
+ lineUID: string,
12
+ start: Types.Point2,
13
+ end: Types.Point2,
14
+ options = {},
15
+ dataId = ''
16
+ ): void {
17
+ // if length is NaN return
18
+ if (isNaN(start[0]) || isNaN(start[1]) || isNaN(end[0]) || isNaN(end[1])) {
19
+ return;
20
+ }
21
+
22
+ const { color, width, lineWidth, lineDash, shadow } = Object.assign(
23
+ {
24
+ color: 'dodgerblue',
25
+ width: '2',
26
+ lineWidth: undefined,
27
+ lineDash: undefined,
28
+ shadow: undefined,
29
+ },
30
+ options
31
+ );
32
+
33
+ // for supporting both lineWidth and width options
34
+ const strokeWidth = lineWidth || width;
35
+
36
+ const svgns = 'http://www.w3.org/2000/svg';
37
+ const svgNodeHash = _getHash(annotationUID, 'line', lineUID);
38
+ const existingLine = svgDrawingHelper.getSvgNode(svgNodeHash);
39
+ const dropShadowStyle = shadow
40
+ ? `filter:url(#shadow-${svgDrawingHelper.svgLayerElement.id});`
41
+ : '';
42
+
43
+ const attributes = {
44
+ x1: `${start[0]}`,
45
+ y1: `${start[1]}`,
46
+ x2: `${end[0]}`,
47
+ y2: `${end[1]}`,
48
+ stroke: color,
49
+ style: dropShadowStyle,
50
+ 'stroke-width': strokeWidth,
51
+ 'stroke-dasharray': lineDash,
52
+ };
53
+
54
+ if (existingLine) {
55
+ // This is run to avoid re-rendering annotations that actually haven't changed
56
+ _setAttributesIfNecessary(attributes, existingLine);
57
+
58
+ svgDrawingHelper.setNodeTouched(svgNodeHash);
59
+ } else {
60
+ const newLine = document.createElementNS(svgns, 'line');
61
+
62
+ if (dataId !== '') {
63
+ newLine.setAttribute('data-id', dataId);
64
+ }
65
+
66
+ _setNewAttributesIfValid(attributes, newLine);
67
+
68
+ svgDrawingHelper.appendNode(newLine, svgNodeHash);
69
+ }
70
+ }
@@ -0,0 +1,76 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+
3
+ import drawLine from './drawLine';
4
+ import findClosestPoint from '../utilities/math/vec2/findClosestPoint';
5
+ import { PlanarBoundingBox, SVGDrawingHelper } from '../types';
6
+
7
+ /**
8
+ * Draw a link between an annotation to a box.
9
+ */
10
+ function drawLink(
11
+ svgDrawingHelper: SVGDrawingHelper,
12
+ annotationUID: string,
13
+ linkUID: string,
14
+ // Find closest point to approx. bounding box
15
+ annotationAnchorPoints: Array<Types.Point2>,
16
+ refPoint: Types.Point2,
17
+ // Find bounding box point that's closest to our identified
18
+ // start point
19
+ boundingBox: PlanarBoundingBox,
20
+ options = {}
21
+ ): void {
22
+ // The closest anchor point (for the annotation) to the
23
+ // text box / bounding box
24
+ const start =
25
+ annotationAnchorPoints.length > 0
26
+ ? findClosestPoint(annotationAnchorPoints, refPoint)
27
+ : refPoint;
28
+
29
+ // Calculate the midpoints of the bounding box
30
+ const boundingBoxPoints = _boundingBoxPoints(boundingBox);
31
+ // Find the closest textBox midpoint to the annotation's anchor/start point
32
+ const end = findClosestPoint(boundingBoxPoints, start);
33
+
34
+ // Finally we draw the dashed linking line
35
+ const mergedOptions = Object.assign(
36
+ {
37
+ color: 'rgb(255, 255, 0)',
38
+ lineWidth: '1',
39
+ lineDash: '2,3',
40
+ },
41
+ options
42
+ );
43
+
44
+ drawLine(
45
+ svgDrawingHelper,
46
+ annotationUID,
47
+ `link-${linkUID}`,
48
+ start,
49
+ end,
50
+ mergedOptions
51
+ );
52
+ }
53
+
54
+ /**
55
+ * Find potential anchor points for a given bounding box. For example, it may
56
+ * look nicer to draw a line from the "middle left" of a bounding box to an
57
+ * annotation (instead of from a corner). This function calculates those points
58
+ *
59
+ * @param boundingBox
60
+ */
61
+ function _boundingBoxPoints(
62
+ boundingBox: PlanarBoundingBox
63
+ ): Array<Types.Point2> {
64
+ const { x: left, y: top, height, width } = boundingBox;
65
+ const halfWidth = width / 2;
66
+ const halfHeight = height / 2;
67
+
68
+ const topMiddle = [left + halfWidth, top] as Types.Point2;
69
+ const leftMiddle = [left, top + halfHeight] as Types.Point2;
70
+ const bottomMiddle = [left + halfWidth, top + height] as Types.Point2;
71
+ const rightMiddle = [left + width, top + halfHeight] as Types.Point2;
72
+
73
+ return [topMiddle, leftMiddle, bottomMiddle, rightMiddle];
74
+ }
75
+
76
+ export default drawLink;
@@ -0,0 +1,64 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+
3
+ import drawTextBox from './drawTextBox';
4
+ import drawLink from './drawLink';
5
+ import { SVGDrawingHelper } from '../types';
6
+
7
+ function drawLinkedTextBox(
8
+ svgDrawingHelper: SVGDrawingHelper,
9
+ annotationUID: string,
10
+ textBoxUID: string,
11
+ //
12
+ textLines: Array<string>,
13
+ textBoxPosition: Types.Point2,
14
+ annotationAnchorPoints: Array<Types.Point2>,
15
+ textBox: unknown,
16
+ options = {}
17
+ // TODO: yCenter as an option
18
+ ): SVGRect {
19
+ const mergedOptions = Object.assign(
20
+ {
21
+ handleRadius: '6',
22
+ centering: {
23
+ x: false,
24
+ y: true, // yCenter,
25
+ },
26
+ },
27
+ options
28
+ );
29
+
30
+ // Draw the text box
31
+ const canvasBoundingBox = drawTextBox(
32
+ svgDrawingHelper,
33
+ annotationUID,
34
+ textBoxUID,
35
+ textLines,
36
+ textBoxPosition,
37
+ mergedOptions
38
+ );
39
+ // if (textBox.hasMoved) {
40
+ // // Draw dashed link line between tool and text
41
+ drawLink(
42
+ svgDrawingHelper,
43
+ annotationUID,
44
+ textBoxUID,
45
+ annotationAnchorPoints, // annotationAnchorPoints
46
+ textBoxPosition, // refPoint (text)
47
+ canvasBoundingBox, // textBoxBoundingBox
48
+ mergedOptions
49
+ );
50
+ // }
51
+
52
+ // const { top, left, width, height } = canvasBoundingBox
53
+
54
+ // textBox.worldBoundingBox = {
55
+ // topLeft: canvasToWorld([left, top]),
56
+ // topRight: canvasToWorld([left + width, top]),
57
+ // bottomLeft: canvasToWorld([left, top + height]),
58
+ // bottomRight: canvasToWorld([left + width, top + height]),
59
+ // }
60
+
61
+ return canvasBoundingBox;
62
+ }
63
+
64
+ export default drawLinkedTextBox;