@cornerstonejs/tools 2.0.0-beta.1 → 2.0.0-beta.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 (565) hide show
  1. package/dist/cjs/drawingSvg/drawCircle.js +9 -5
  2. package/dist/cjs/drawingSvg/drawCircle.js.map +1 -1
  3. package/dist/cjs/drawingSvg/drawEllipse.js +4 -4
  4. package/dist/cjs/drawingSvg/drawEllipse.js.map +1 -1
  5. package/dist/cjs/drawingSvg/drawHandles.js +4 -4
  6. package/dist/cjs/drawingSvg/drawHandles.js.map +1 -1
  7. package/dist/cjs/drawingSvg/drawLine.js +4 -4
  8. package/dist/cjs/drawingSvg/drawLine.js.map +1 -1
  9. package/dist/cjs/drawingSvg/drawPolyline.js +4 -4
  10. package/dist/cjs/drawingSvg/drawPolyline.js.map +1 -1
  11. package/dist/cjs/drawingSvg/drawRect.js +4 -4
  12. package/dist/cjs/drawingSvg/drawRect.js.map +1 -1
  13. package/dist/cjs/drawingSvg/drawTextBox.js +4 -4
  14. package/dist/cjs/drawingSvg/drawTextBox.js.map +1 -1
  15. package/dist/cjs/drawingSvg/getSvgDrawingHelper.js +1 -1
  16. package/dist/cjs/drawingSvg/getSvgDrawingHelper.js.map +1 -1
  17. package/dist/cjs/drawingSvg/index.d.ts +3 -1
  18. package/dist/cjs/drawingSvg/index.js +5 -1
  19. package/dist/cjs/drawingSvg/index.js.map +1 -1
  20. package/dist/cjs/drawingSvg/setAttributesIfNecessary.d.ts +2 -0
  21. package/dist/cjs/drawingSvg/{_setAttributesIfNecessary.js → setAttributesIfNecessary.js} +5 -5
  22. package/dist/cjs/drawingSvg/setAttributesIfNecessary.js.map +1 -0
  23. package/dist/cjs/drawingSvg/setNewAttributesIfValid.d.ts +2 -0
  24. package/dist/cjs/drawingSvg/{_setNewAttributesIfValid.js → setNewAttributesIfValid.js} +5 -5
  25. package/dist/cjs/drawingSvg/setNewAttributesIfValid.js.map +1 -0
  26. package/dist/cjs/enums/Events.d.ts +2 -0
  27. package/dist/cjs/enums/Events.js +2 -0
  28. package/dist/cjs/enums/Events.js.map +1 -1
  29. package/dist/cjs/eventDispatchers/mouseEventHandlers/mouseDown.js +6 -1
  30. package/dist/cjs/eventDispatchers/mouseEventHandlers/mouseDown.js.map +1 -1
  31. package/dist/cjs/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.d.ts +2 -0
  32. package/dist/cjs/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.js +41 -0
  33. package/dist/cjs/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.js.map +1 -0
  34. package/dist/cjs/eventDispatchers/shared/getMouseModifier.js +10 -5
  35. package/dist/cjs/eventDispatchers/shared/getMouseModifier.js.map +1 -1
  36. package/dist/cjs/eventDispatchers/shared/getToolsWithActionsForMouseEvent.d.ts +3 -0
  37. package/dist/cjs/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js +39 -0
  38. package/dist/cjs/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js.map +1 -0
  39. package/dist/cjs/eventListeners/keyboard/keyDownListener.js +8 -0
  40. package/dist/cjs/eventListeners/keyboard/keyDownListener.js.map +1 -1
  41. package/dist/cjs/eventListeners/mouse/mouseDownListener.js +7 -2
  42. package/dist/cjs/eventListeners/mouse/mouseDownListener.js.map +1 -1
  43. package/dist/cjs/eventListeners/mouse/mouseMoveListener.js +5 -1
  44. package/dist/cjs/eventListeners/mouse/mouseMoveListener.js.map +1 -1
  45. package/dist/cjs/eventListeners/touch/touchStartListener.js +10 -5
  46. package/dist/cjs/eventListeners/touch/touchStartListener.js.map +1 -1
  47. package/dist/cjs/index.d.ts +2 -2
  48. package/dist/cjs/index.js +6 -2
  49. package/dist/cjs/index.js.map +1 -1
  50. package/dist/cjs/stateManagement/annotation/config/ToolStyle.js +1 -0
  51. package/dist/cjs/stateManagement/annotation/config/ToolStyle.js.map +1 -1
  52. package/dist/cjs/stateManagement/annotation/config/getState.js +6 -3
  53. package/dist/cjs/stateManagement/annotation/config/getState.js.map +1 -1
  54. package/dist/cjs/stateManagement/annotation/config/helpers.js +4 -2
  55. package/dist/cjs/stateManagement/annotation/config/helpers.js.map +1 -1
  56. package/dist/cjs/store/SynchronizerManager/Synchronizer.js +10 -2
  57. package/dist/cjs/store/SynchronizerManager/Synchronizer.js.map +1 -1
  58. package/dist/cjs/store/ToolGroupManager/ToolGroup.d.ts +5 -3
  59. package/dist/cjs/store/ToolGroupManager/ToolGroup.js +44 -2
  60. package/dist/cjs/store/ToolGroupManager/ToolGroup.js.map +1 -1
  61. package/dist/cjs/store/ToolGroupManager/getToolGroupsWithToolName.js +2 -1
  62. package/dist/cjs/store/ToolGroupManager/getToolGroupsWithToolName.js.map +1 -1
  63. package/dist/cjs/synchronizers/callbacks/stackImageSyncCallback.js +25 -22
  64. package/dist/cjs/synchronizers/callbacks/stackImageSyncCallback.js.map +1 -1
  65. package/dist/cjs/synchronizers/callbacks/voiSyncCallback.js +1 -1
  66. package/dist/cjs/synchronizers/callbacks/voiSyncCallback.js.map +1 -1
  67. package/dist/cjs/tools/AdvancedMagnifyTool.d.ts +36 -0
  68. package/dist/cjs/tools/AdvancedMagnifyTool.js +448 -0
  69. package/dist/cjs/tools/AdvancedMagnifyTool.js.map +1 -0
  70. package/dist/cjs/tools/AdvancedMagnifyViewport.d.ts +76 -0
  71. package/dist/cjs/tools/AdvancedMagnifyViewport.js +352 -0
  72. package/dist/cjs/tools/AdvancedMagnifyViewport.js.map +1 -0
  73. package/dist/cjs/tools/AdvancedMagnifyViewportManager.d.ts +36 -0
  74. package/dist/cjs/tools/AdvancedMagnifyViewportManager.js +133 -0
  75. package/dist/cjs/tools/AdvancedMagnifyViewportManager.js.map +1 -0
  76. package/dist/cjs/tools/MIPJumpToClickTool.js +4 -2
  77. package/dist/cjs/tools/MIPJumpToClickTool.js.map +1 -1
  78. package/dist/cjs/tools/MagnifyTool.js +2 -2
  79. package/dist/cjs/tools/MagnifyTool.js.map +1 -1
  80. package/dist/cjs/tools/OrientationMarkerTool.d.ts +88 -0
  81. package/dist/cjs/tools/OrientationMarkerTool.js +193 -0
  82. package/dist/cjs/tools/OrientationMarkerTool.js.map +1 -0
  83. package/dist/cjs/tools/OverlayGridTool.d.ts +31 -0
  84. package/dist/cjs/tools/OverlayGridTool.js +170 -0
  85. package/dist/cjs/tools/OverlayGridTool.js.map +1 -0
  86. package/dist/cjs/tools/PlanarRotateTool.js +2 -1
  87. package/dist/cjs/tools/PlanarRotateTool.js.map +1 -1
  88. package/dist/cjs/tools/ReferenceCursors.js +58 -29
  89. package/dist/cjs/tools/ReferenceCursors.js.map +1 -1
  90. package/dist/cjs/tools/ReferenceLinesTool.d.ts +3 -0
  91. package/dist/cjs/tools/ReferenceLinesTool.js +71 -2
  92. package/dist/cjs/tools/ReferenceLinesTool.js.map +1 -1
  93. package/dist/cjs/tools/ScaleOverlayTool.js +2 -1
  94. package/dist/cjs/tools/ScaleOverlayTool.js.map +1 -1
  95. package/dist/cjs/tools/annotation/AngleTool.d.ts +0 -1
  96. package/dist/cjs/tools/annotation/AngleTool.js +33 -15
  97. package/dist/cjs/tools/annotation/AngleTool.js.map +1 -1
  98. package/dist/cjs/tools/annotation/ArrowAnnotateTool.js +15 -1
  99. package/dist/cjs/tools/annotation/ArrowAnnotateTool.js.map +1 -1
  100. package/dist/cjs/tools/annotation/BidirectionalTool.d.ts +0 -1
  101. package/dist/cjs/tools/annotation/BidirectionalTool.js +30 -15
  102. package/dist/cjs/tools/annotation/BidirectionalTool.js.map +1 -1
  103. package/dist/cjs/tools/annotation/CircleROITool.d.ts +1 -3
  104. package/dist/cjs/tools/annotation/CircleROITool.js +63 -60
  105. package/dist/cjs/tools/annotation/CircleROITool.js.map +1 -1
  106. package/dist/cjs/tools/annotation/CobbAngleTool.d.ts +31 -6
  107. package/dist/cjs/tools/annotation/CobbAngleTool.js +294 -82
  108. package/dist/cjs/tools/annotation/CobbAngleTool.js.map +1 -1
  109. package/dist/cjs/tools/annotation/DragProbeTool.js +17 -4
  110. package/dist/cjs/tools/annotation/DragProbeTool.js.map +1 -1
  111. package/dist/cjs/tools/annotation/EllipticalROITool.d.ts +2 -4
  112. package/dist/cjs/tools/annotation/EllipticalROITool.js +67 -61
  113. package/dist/cjs/tools/annotation/EllipticalROITool.js.map +1 -1
  114. package/dist/cjs/tools/annotation/LengthTool.d.ts +0 -1
  115. package/dist/cjs/tools/annotation/LengthTool.js +27 -12
  116. package/dist/cjs/tools/annotation/LengthTool.js.map +1 -1
  117. package/dist/cjs/tools/annotation/PlanarFreehandROITool.d.ts +1 -3
  118. package/dist/cjs/tools/annotation/PlanarFreehandROITool.js +72 -60
  119. package/dist/cjs/tools/annotation/PlanarFreehandROITool.js.map +1 -1
  120. package/dist/cjs/tools/annotation/ProbeTool.d.ts +1 -3
  121. package/dist/cjs/tools/annotation/ProbeTool.js +28 -22
  122. package/dist/cjs/tools/annotation/ProbeTool.js.map +1 -1
  123. package/dist/cjs/tools/annotation/RectangleROITool.d.ts +1 -2
  124. package/dist/cjs/tools/annotation/RectangleROITool.js +55 -57
  125. package/dist/cjs/tools/annotation/RectangleROITool.js.map +1 -1
  126. package/dist/cjs/tools/base/AnnotationDisplayTool.js +4 -0
  127. package/dist/cjs/tools/base/AnnotationDisplayTool.js.map +1 -1
  128. package/dist/cjs/tools/base/AnnotationTool.d.ts +3 -2
  129. package/dist/cjs/tools/base/AnnotationTool.js +27 -16
  130. package/dist/cjs/tools/base/AnnotationTool.js.map +1 -1
  131. package/dist/cjs/tools/base/index.d.ts +2 -1
  132. package/dist/cjs/tools/base/index.js +3 -1
  133. package/dist/cjs/tools/base/index.js.map +1 -1
  134. package/dist/cjs/tools/displayTools/Contour/contourDisplay.js +3 -0
  135. package/dist/cjs/tools/displayTools/Contour/contourDisplay.js.map +1 -1
  136. package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.js +1 -1
  137. package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
  138. package/dist/cjs/tools/displayTools/Labelmap/removeLabelmapFromElement.js +3 -0
  139. package/dist/cjs/tools/displayTools/Labelmap/removeLabelmapFromElement.js.map +1 -1
  140. package/dist/cjs/tools/displayTools/SegmentationDisplayTool.js +5 -6
  141. package/dist/cjs/tools/displayTools/SegmentationDisplayTool.js.map +1 -1
  142. package/dist/cjs/tools/index.d.ts +5 -2
  143. package/dist/cjs/tools/index.js +8 -1
  144. package/dist/cjs/tools/index.js.map +1 -1
  145. package/dist/cjs/tools/segmentation/BrushTool.js +24 -17
  146. package/dist/cjs/tools/segmentation/BrushTool.js.map +1 -1
  147. package/dist/cjs/tools/segmentation/PaintFillTool.js +4 -2
  148. package/dist/cjs/tools/segmentation/PaintFillTool.js.map +1 -1
  149. package/dist/cjs/tools/segmentation/strategies/eraseSphere.d.ts +2 -0
  150. package/dist/cjs/tools/segmentation/strategies/eraseSphere.js.map +1 -1
  151. package/dist/cjs/tools/segmentation/strategies/fillCircle.js +5 -7
  152. package/dist/cjs/tools/segmentation/strategies/fillCircle.js.map +1 -1
  153. package/dist/cjs/tools/segmentation/strategies/fillSphere.d.ts +3 -0
  154. package/dist/cjs/tools/segmentation/strategies/fillSphere.js +38 -10
  155. package/dist/cjs/tools/segmentation/strategies/fillSphere.js.map +1 -1
  156. package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.d.ts +3 -0
  157. package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.js +10 -0
  158. package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.js.map +1 -0
  159. package/dist/cjs/types/CINETypes.d.ts +2 -0
  160. package/dist/cjs/types/CalculatorTypes.d.ts +6 -0
  161. package/dist/cjs/types/CalculatorTypes.js +3 -0
  162. package/dist/cjs/types/CalculatorTypes.js.map +1 -0
  163. package/dist/cjs/types/EventTypes.d.ts +16 -1
  164. package/dist/cjs/types/ISetToolModeOptions.d.ts +2 -2
  165. package/dist/cjs/types/IToolGroup.d.ts +6 -2
  166. package/dist/cjs/types/ToolAction.d.ts +8 -0
  167. package/dist/cjs/types/ToolAction.js +3 -0
  168. package/dist/cjs/types/ToolAction.js.map +1 -0
  169. package/dist/cjs/types/ToolProps.d.ts +5 -1
  170. package/dist/cjs/types/ToolSpecificAnnotationTypes.d.ts +55 -0
  171. package/dist/cjs/types/index.d.ts +4 -2
  172. package/dist/cjs/utilities/cine/playClip.js +13 -3
  173. package/dist/cjs/utilities/cine/playClip.js.map +1 -1
  174. package/dist/cjs/utilities/dynamicVolume/getDataInTime.js +7 -4
  175. package/dist/cjs/utilities/dynamicVolume/getDataInTime.js.map +1 -1
  176. package/dist/cjs/utilities/getCalibratedUnits.js +10 -5
  177. package/dist/cjs/utilities/getCalibratedUnits.js.map +1 -1
  178. package/dist/cjs/utilities/getModalityUnit.js +5 -2
  179. package/dist/cjs/utilities/getModalityUnit.js.map +1 -1
  180. package/dist/cjs/utilities/index.d.ts +2 -2
  181. package/dist/cjs/utilities/index.js +4 -3
  182. package/dist/cjs/utilities/index.js.map +1 -1
  183. package/dist/cjs/utilities/math/angle/angleBetweenLines.d.ts +3 -1
  184. package/dist/cjs/utilities/math/angle/angleBetweenLines.js +18 -1
  185. package/dist/cjs/utilities/math/angle/angleBetweenLines.js.map +1 -1
  186. package/dist/cjs/utilities/math/basic/BasicStatsCalculator.d.ts +14 -0
  187. package/dist/cjs/utilities/math/basic/BasicStatsCalculator.js +44 -0
  188. package/dist/cjs/utilities/math/basic/BasicStatsCalculator.js.map +1 -0
  189. package/dist/cjs/utilities/math/basic/Calculator.d.ts +8 -0
  190. package/dist/cjs/utilities/math/basic/Calculator.js +6 -0
  191. package/dist/cjs/utilities/math/basic/Calculator.js.map +1 -0
  192. package/dist/cjs/utilities/math/basic/index.d.ts +3 -0
  193. package/dist/cjs/utilities/math/basic/index.js +11 -0
  194. package/dist/cjs/utilities/math/basic/index.js.map +1 -0
  195. package/dist/cjs/utilities/math/index.d.ts +2 -1
  196. package/dist/cjs/utilities/math/index.js +3 -1
  197. package/dist/cjs/utilities/math/index.js.map +1 -1
  198. package/dist/cjs/utilities/math/midPoint.js +2 -1
  199. package/dist/cjs/utilities/math/midPoint.js.map +1 -1
  200. package/dist/cjs/utilities/math/polyline/pointInPolyline.js +2 -1
  201. package/dist/cjs/utilities/math/polyline/pointInPolyline.js.map +1 -1
  202. package/dist/cjs/utilities/math/vec2/liangBarksyClip.d.ts +1 -1
  203. package/dist/cjs/utilities/math/vec2/liangBarksyClip.js +10 -5
  204. package/dist/cjs/utilities/math/vec2/liangBarksyClip.js.map +1 -1
  205. package/dist/cjs/utilities/pointInShapeCallback.d.ts +7 -1
  206. package/dist/cjs/utilities/pointInShapeCallback.js +6 -1
  207. package/dist/cjs/utilities/pointInShapeCallback.js.map +1 -1
  208. package/dist/cjs/utilities/roundNumber.js +4 -2
  209. package/dist/cjs/utilities/roundNumber.js.map +1 -1
  210. package/dist/cjs/utilities/segmentation/brushSizeForToolGroup.d.ts +2 -2
  211. package/dist/cjs/utilities/segmentation/brushSizeForToolGroup.js +4 -4
  212. package/dist/cjs/utilities/segmentation/brushSizeForToolGroup.js.map +1 -1
  213. package/dist/cjs/utilities/segmentation/thresholdVolumeByRange.js +2 -1
  214. package/dist/cjs/utilities/segmentation/thresholdVolumeByRange.js.map +1 -1
  215. package/dist/cjs/utilities/segmentation/utilities.d.ts +1 -2
  216. package/dist/cjs/utilities/segmentation/utilities.js +4 -1
  217. package/dist/cjs/utilities/segmentation/utilities.js.map +1 -1
  218. package/dist/cjs/utilities/stackPrefetch/index.d.ts +3 -2
  219. package/dist/cjs/utilities/stackPrefetch/index.js +8 -6
  220. package/dist/cjs/utilities/stackPrefetch/index.js.map +1 -1
  221. package/dist/cjs/utilities/stackPrefetch/stackContextPrefetch.d.ts +16 -0
  222. package/dist/cjs/utilities/stackPrefetch/stackContextPrefetch.js +227 -0
  223. package/dist/cjs/utilities/stackPrefetch/stackContextPrefetch.js.map +1 -0
  224. package/dist/cjs/utilities/stackPrefetch/stackPrefetch.d.ts +7 -1
  225. package/dist/cjs/utilities/stackPrefetch/stackPrefetch.js +25 -95
  226. package/dist/cjs/utilities/stackPrefetch/stackPrefetch.js.map +1 -1
  227. package/dist/cjs/utilities/stackPrefetch/stackPrefetchUtils.d.ts +14 -0
  228. package/dist/cjs/utilities/stackPrefetch/stackPrefetchUtils.js +85 -0
  229. package/dist/cjs/utilities/stackPrefetch/stackPrefetchUtils.js.map +1 -0
  230. package/dist/esm/drawingSvg/drawCircle.js +9 -5
  231. package/dist/esm/drawingSvg/drawCircle.js.map +1 -1
  232. package/dist/esm/drawingSvg/drawEllipse.js +4 -4
  233. package/dist/esm/drawingSvg/drawEllipse.js.map +1 -1
  234. package/dist/esm/drawingSvg/drawHandles.js +4 -4
  235. package/dist/esm/drawingSvg/drawHandles.js.map +1 -1
  236. package/dist/esm/drawingSvg/drawLine.js +4 -4
  237. package/dist/esm/drawingSvg/drawLine.js.map +1 -1
  238. package/dist/esm/drawingSvg/drawPolyline.js +4 -4
  239. package/dist/esm/drawingSvg/drawPolyline.js.map +1 -1
  240. package/dist/esm/drawingSvg/drawRect.js +4 -4
  241. package/dist/esm/drawingSvg/drawRect.js.map +1 -1
  242. package/dist/esm/drawingSvg/drawTextBox.js +4 -4
  243. package/dist/esm/drawingSvg/drawTextBox.js.map +1 -1
  244. package/dist/esm/drawingSvg/getSvgDrawingHelper.js +1 -1
  245. package/dist/esm/drawingSvg/getSvgDrawingHelper.js.map +1 -1
  246. package/dist/esm/drawingSvg/index.d.ts +3 -1
  247. package/dist/esm/drawingSvg/index.js +3 -1
  248. package/dist/esm/drawingSvg/index.js.map +1 -1
  249. package/dist/esm/drawingSvg/setAttributesIfNecessary.d.ts +2 -0
  250. package/dist/esm/drawingSvg/{_setAttributesIfNecessary.js → setAttributesIfNecessary.js} +3 -3
  251. package/dist/esm/drawingSvg/setAttributesIfNecessary.js.map +1 -0
  252. package/dist/esm/drawingSvg/setNewAttributesIfValid.d.ts +2 -0
  253. package/dist/esm/drawingSvg/{_setNewAttributesIfValid.js → setNewAttributesIfValid.js} +3 -3
  254. package/dist/esm/drawingSvg/setNewAttributesIfValid.js.map +1 -0
  255. package/dist/esm/enums/Events.d.ts +2 -0
  256. package/dist/esm/enums/Events.js +2 -0
  257. package/dist/esm/enums/Events.js.map +1 -1
  258. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDown.js +6 -1
  259. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDown.js.map +1 -1
  260. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.d.ts +2 -0
  261. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.js +35 -0
  262. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.js.map +1 -0
  263. package/dist/esm/eventDispatchers/shared/getMouseModifier.js +10 -5
  264. package/dist/esm/eventDispatchers/shared/getMouseModifier.js.map +1 -1
  265. package/dist/esm/eventDispatchers/shared/getToolsWithActionsForMouseEvent.d.ts +3 -0
  266. package/dist/esm/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js +32 -0
  267. package/dist/esm/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js.map +1 -0
  268. package/dist/esm/eventListeners/keyboard/keyDownListener.js +8 -0
  269. package/dist/esm/eventListeners/keyboard/keyDownListener.js.map +1 -1
  270. package/dist/esm/eventListeners/mouse/mouseDownListener.js +7 -2
  271. package/dist/esm/eventListeners/mouse/mouseDownListener.js.map +1 -1
  272. package/dist/esm/eventListeners/mouse/mouseMoveListener.js +5 -1
  273. package/dist/esm/eventListeners/mouse/mouseMoveListener.js.map +1 -1
  274. package/dist/esm/eventListeners/touch/touchStartListener.js +10 -5
  275. package/dist/esm/eventListeners/touch/touchStartListener.js.map +1 -1
  276. package/dist/esm/index.d.ts +2 -2
  277. package/dist/esm/index.js +2 -2
  278. package/dist/esm/index.js.map +1 -1
  279. package/dist/esm/stateManagement/annotation/config/ToolStyle.js +1 -0
  280. package/dist/esm/stateManagement/annotation/config/ToolStyle.js.map +1 -1
  281. package/dist/esm/stateManagement/annotation/config/getState.js +6 -3
  282. package/dist/esm/stateManagement/annotation/config/getState.js.map +1 -1
  283. package/dist/esm/stateManagement/annotation/config/helpers.js +4 -2
  284. package/dist/esm/stateManagement/annotation/config/helpers.js.map +1 -1
  285. package/dist/esm/store/SynchronizerManager/Synchronizer.js +10 -2
  286. package/dist/esm/store/SynchronizerManager/Synchronizer.js.map +1 -1
  287. package/dist/esm/store/ToolGroupManager/ToolGroup.d.ts +5 -3
  288. package/dist/esm/store/ToolGroupManager/ToolGroup.js +45 -4
  289. package/dist/esm/store/ToolGroupManager/ToolGroup.js.map +1 -1
  290. package/dist/esm/store/ToolGroupManager/getToolGroupsWithToolName.js +2 -1
  291. package/dist/esm/store/ToolGroupManager/getToolGroupsWithToolName.js.map +1 -1
  292. package/dist/esm/synchronizers/callbacks/stackImageSyncCallback.js +26 -23
  293. package/dist/esm/synchronizers/callbacks/stackImageSyncCallback.js.map +1 -1
  294. package/dist/esm/synchronizers/callbacks/voiSyncCallback.js +1 -1
  295. package/dist/esm/synchronizers/callbacks/voiSyncCallback.js.map +1 -1
  296. package/dist/esm/tools/AdvancedMagnifyTool.d.ts +36 -0
  297. package/dist/esm/tools/AdvancedMagnifyTool.js +440 -0
  298. package/dist/esm/tools/AdvancedMagnifyTool.js.map +1 -0
  299. package/dist/esm/tools/AdvancedMagnifyViewport.d.ts +76 -0
  300. package/dist/esm/tools/AdvancedMagnifyViewport.js +346 -0
  301. package/dist/esm/tools/AdvancedMagnifyViewport.js.map +1 -0
  302. package/dist/esm/tools/AdvancedMagnifyViewportManager.d.ts +36 -0
  303. package/dist/esm/tools/AdvancedMagnifyViewportManager.js +128 -0
  304. package/dist/esm/tools/AdvancedMagnifyViewportManager.js.map +1 -0
  305. package/dist/esm/tools/MIPJumpToClickTool.js +4 -2
  306. package/dist/esm/tools/MIPJumpToClickTool.js.map +1 -1
  307. package/dist/esm/tools/MagnifyTool.js +2 -2
  308. package/dist/esm/tools/MagnifyTool.js.map +1 -1
  309. package/dist/esm/tools/OrientationMarkerTool.d.ts +88 -0
  310. package/dist/esm/tools/OrientationMarkerTool.js +185 -0
  311. package/dist/esm/tools/OrientationMarkerTool.js.map +1 -0
  312. package/dist/esm/tools/OverlayGridTool.d.ts +31 -0
  313. package/dist/esm/tools/OverlayGridTool.js +165 -0
  314. package/dist/esm/tools/OverlayGridTool.js.map +1 -0
  315. package/dist/esm/tools/PlanarRotateTool.js +2 -1
  316. package/dist/esm/tools/PlanarRotateTool.js.map +1 -1
  317. package/dist/esm/tools/ReferenceCursors.js +58 -29
  318. package/dist/esm/tools/ReferenceCursors.js.map +1 -1
  319. package/dist/esm/tools/ReferenceLinesTool.d.ts +3 -0
  320. package/dist/esm/tools/ReferenceLinesTool.js +71 -2
  321. package/dist/esm/tools/ReferenceLinesTool.js.map +1 -1
  322. package/dist/esm/tools/ScaleOverlayTool.js +2 -1
  323. package/dist/esm/tools/ScaleOverlayTool.js.map +1 -1
  324. package/dist/esm/tools/annotation/AngleTool.d.ts +0 -1
  325. package/dist/esm/tools/annotation/AngleTool.js +33 -15
  326. package/dist/esm/tools/annotation/AngleTool.js.map +1 -1
  327. package/dist/esm/tools/annotation/ArrowAnnotateTool.js +15 -1
  328. package/dist/esm/tools/annotation/ArrowAnnotateTool.js.map +1 -1
  329. package/dist/esm/tools/annotation/BidirectionalTool.d.ts +0 -1
  330. package/dist/esm/tools/annotation/BidirectionalTool.js +30 -15
  331. package/dist/esm/tools/annotation/BidirectionalTool.js.map +1 -1
  332. package/dist/esm/tools/annotation/CircleROITool.d.ts +1 -3
  333. package/dist/esm/tools/annotation/CircleROITool.js +62 -60
  334. package/dist/esm/tools/annotation/CircleROITool.js.map +1 -1
  335. package/dist/esm/tools/annotation/CobbAngleTool.d.ts +31 -6
  336. package/dist/esm/tools/annotation/CobbAngleTool.js +301 -83
  337. package/dist/esm/tools/annotation/CobbAngleTool.js.map +1 -1
  338. package/dist/esm/tools/annotation/DragProbeTool.js +17 -4
  339. package/dist/esm/tools/annotation/DragProbeTool.js.map +1 -1
  340. package/dist/esm/tools/annotation/EllipticalROITool.d.ts +2 -4
  341. package/dist/esm/tools/annotation/EllipticalROITool.js +66 -61
  342. package/dist/esm/tools/annotation/EllipticalROITool.js.map +1 -1
  343. package/dist/esm/tools/annotation/LengthTool.d.ts +0 -1
  344. package/dist/esm/tools/annotation/LengthTool.js +27 -12
  345. package/dist/esm/tools/annotation/LengthTool.js.map +1 -1
  346. package/dist/esm/tools/annotation/PlanarFreehandROITool.d.ts +1 -3
  347. package/dist/esm/tools/annotation/PlanarFreehandROITool.js +71 -60
  348. package/dist/esm/tools/annotation/PlanarFreehandROITool.js.map +1 -1
  349. package/dist/esm/tools/annotation/ProbeTool.d.ts +1 -3
  350. package/dist/esm/tools/annotation/ProbeTool.js +28 -22
  351. package/dist/esm/tools/annotation/ProbeTool.js.map +1 -1
  352. package/dist/esm/tools/annotation/RectangleROITool.d.ts +1 -2
  353. package/dist/esm/tools/annotation/RectangleROITool.js +54 -57
  354. package/dist/esm/tools/annotation/RectangleROITool.js.map +1 -1
  355. package/dist/esm/tools/base/AnnotationDisplayTool.js +3 -0
  356. package/dist/esm/tools/base/AnnotationDisplayTool.js.map +1 -1
  357. package/dist/esm/tools/base/AnnotationTool.d.ts +3 -2
  358. package/dist/esm/tools/base/AnnotationTool.js +26 -16
  359. package/dist/esm/tools/base/AnnotationTool.js.map +1 -1
  360. package/dist/esm/tools/base/index.d.ts +2 -1
  361. package/dist/esm/tools/base/index.js +2 -1
  362. package/dist/esm/tools/base/index.js.map +1 -1
  363. package/dist/esm/tools/displayTools/Contour/contourDisplay.js +4 -1
  364. package/dist/esm/tools/displayTools/Contour/contourDisplay.js.map +1 -1
  365. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +1 -1
  366. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
  367. package/dist/esm/tools/displayTools/Labelmap/removeLabelmapFromElement.js +4 -1
  368. package/dist/esm/tools/displayTools/Labelmap/removeLabelmapFromElement.js.map +1 -1
  369. package/dist/esm/tools/displayTools/SegmentationDisplayTool.js +5 -6
  370. package/dist/esm/tools/displayTools/SegmentationDisplayTool.js.map +1 -1
  371. package/dist/esm/tools/index.d.ts +5 -2
  372. package/dist/esm/tools/index.js +5 -2
  373. package/dist/esm/tools/index.js.map +1 -1
  374. package/dist/esm/tools/segmentation/BrushTool.js +25 -18
  375. package/dist/esm/tools/segmentation/BrushTool.js.map +1 -1
  376. package/dist/esm/tools/segmentation/PaintFillTool.js +4 -2
  377. package/dist/esm/tools/segmentation/PaintFillTool.js.map +1 -1
  378. package/dist/esm/tools/segmentation/strategies/eraseSphere.d.ts +2 -0
  379. package/dist/esm/tools/segmentation/strategies/eraseSphere.js.map +1 -1
  380. package/dist/esm/tools/segmentation/strategies/fillCircle.js +1 -6
  381. package/dist/esm/tools/segmentation/strategies/fillCircle.js.map +1 -1
  382. package/dist/esm/tools/segmentation/strategies/fillSphere.d.ts +3 -0
  383. package/dist/esm/tools/segmentation/strategies/fillSphere.js +33 -9
  384. package/dist/esm/tools/segmentation/strategies/fillSphere.js.map +1 -1
  385. package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.d.ts +3 -0
  386. package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.js +8 -0
  387. package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.js.map +1 -0
  388. package/dist/esm/types/CINETypes.d.ts +2 -0
  389. package/dist/esm/types/CalculatorTypes.d.ts +6 -0
  390. package/dist/esm/types/CalculatorTypes.js +2 -0
  391. package/dist/esm/types/CalculatorTypes.js.map +1 -0
  392. package/dist/esm/types/EventTypes.d.ts +16 -1
  393. package/dist/esm/types/ISetToolModeOptions.d.ts +2 -2
  394. package/dist/esm/types/IToolGroup.d.ts +6 -2
  395. package/dist/esm/types/ToolAction.d.ts +8 -0
  396. package/dist/esm/types/ToolAction.js +2 -0
  397. package/dist/esm/types/ToolAction.js.map +1 -0
  398. package/dist/esm/types/ToolProps.d.ts +5 -1
  399. package/dist/esm/types/ToolSpecificAnnotationTypes.d.ts +55 -0
  400. package/dist/esm/types/index.d.ts +4 -2
  401. package/dist/esm/utilities/cine/playClip.js +13 -4
  402. package/dist/esm/utilities/cine/playClip.js.map +1 -1
  403. package/dist/esm/utilities/dynamicVolume/getDataInTime.js +7 -4
  404. package/dist/esm/utilities/dynamicVolume/getDataInTime.js.map +1 -1
  405. package/dist/esm/utilities/getCalibratedUnits.js +10 -5
  406. package/dist/esm/utilities/getCalibratedUnits.js.map +1 -1
  407. package/dist/esm/utilities/getModalityUnit.js +5 -2
  408. package/dist/esm/utilities/getModalityUnit.js.map +1 -1
  409. package/dist/esm/utilities/index.d.ts +2 -2
  410. package/dist/esm/utilities/index.js +2 -2
  411. package/dist/esm/utilities/index.js.map +1 -1
  412. package/dist/esm/utilities/math/angle/angleBetweenLines.d.ts +3 -1
  413. package/dist/esm/utilities/math/angle/angleBetweenLines.js +19 -2
  414. package/dist/esm/utilities/math/angle/angleBetweenLines.js.map +1 -1
  415. package/dist/esm/utilities/math/basic/BasicStatsCalculator.d.ts +14 -0
  416. package/dist/esm/utilities/math/basic/BasicStatsCalculator.js +36 -0
  417. package/dist/esm/utilities/math/basic/BasicStatsCalculator.js.map +1 -0
  418. package/dist/esm/utilities/math/basic/Calculator.d.ts +8 -0
  419. package/dist/esm/utilities/math/basic/Calculator.js +4 -0
  420. package/dist/esm/utilities/math/basic/Calculator.js.map +1 -0
  421. package/dist/esm/utilities/math/basic/index.d.ts +3 -0
  422. package/dist/esm/utilities/math/basic/index.js +4 -0
  423. package/dist/esm/utilities/math/basic/index.js.map +1 -0
  424. package/dist/esm/utilities/math/index.d.ts +2 -1
  425. package/dist/esm/utilities/math/index.js +2 -1
  426. package/dist/esm/utilities/math/index.js.map +1 -1
  427. package/dist/esm/utilities/math/midPoint.js +2 -1
  428. package/dist/esm/utilities/math/midPoint.js.map +1 -1
  429. package/dist/esm/utilities/math/polyline/pointInPolyline.js +2 -1
  430. package/dist/esm/utilities/math/polyline/pointInPolyline.js.map +1 -1
  431. package/dist/esm/utilities/math/vec2/liangBarksyClip.d.ts +1 -1
  432. package/dist/esm/utilities/math/vec2/liangBarksyClip.js +10 -5
  433. package/dist/esm/utilities/math/vec2/liangBarksyClip.js.map +1 -1
  434. package/dist/esm/utilities/pointInShapeCallback.d.ts +7 -1
  435. package/dist/esm/utilities/pointInShapeCallback.js +6 -1
  436. package/dist/esm/utilities/pointInShapeCallback.js.map +1 -1
  437. package/dist/esm/utilities/roundNumber.js +4 -2
  438. package/dist/esm/utilities/roundNumber.js.map +1 -1
  439. package/dist/esm/utilities/segmentation/brushSizeForToolGroup.d.ts +2 -2
  440. package/dist/esm/utilities/segmentation/brushSizeForToolGroup.js +4 -4
  441. package/dist/esm/utilities/segmentation/brushSizeForToolGroup.js.map +1 -1
  442. package/dist/esm/utilities/segmentation/thresholdVolumeByRange.js +2 -1
  443. package/dist/esm/utilities/segmentation/thresholdVolumeByRange.js.map +1 -1
  444. package/dist/esm/utilities/segmentation/utilities.d.ts +1 -2
  445. package/dist/esm/utilities/segmentation/utilities.js +4 -1
  446. package/dist/esm/utilities/segmentation/utilities.js.map +1 -1
  447. package/dist/esm/utilities/stackPrefetch/index.d.ts +3 -2
  448. package/dist/esm/utilities/stackPrefetch/index.js +3 -2
  449. package/dist/esm/utilities/stackPrefetch/index.js.map +1 -1
  450. package/dist/esm/utilities/stackPrefetch/stackContextPrefetch.d.ts +16 -0
  451. package/dist/esm/utilities/stackPrefetch/stackContextPrefetch.js +220 -0
  452. package/dist/esm/utilities/stackPrefetch/stackContextPrefetch.js.map +1 -0
  453. package/dist/esm/utilities/stackPrefetch/stackPrefetch.d.ts +7 -1
  454. package/dist/esm/utilities/stackPrefetch/stackPrefetch.js +14 -81
  455. package/dist/esm/utilities/stackPrefetch/stackPrefetch.js.map +1 -1
  456. package/dist/esm/utilities/stackPrefetch/stackPrefetchUtils.d.ts +14 -0
  457. package/dist/esm/utilities/stackPrefetch/stackPrefetchUtils.js +77 -0
  458. package/dist/esm/utilities/stackPrefetch/stackPrefetchUtils.js.map +1 -0
  459. package/dist/umd/index.js +1 -1
  460. package/dist/umd/index.js.map +1 -1
  461. package/package.json +3 -3
  462. package/src/drawingSvg/drawCircle.ts +17 -5
  463. package/src/drawingSvg/drawEllipse.ts +4 -4
  464. package/src/drawingSvg/drawHandles.ts +4 -4
  465. package/src/drawingSvg/drawLine.ts +4 -4
  466. package/src/drawingSvg/drawPolyline.ts +4 -4
  467. package/src/drawingSvg/drawRect.ts +4 -4
  468. package/src/drawingSvg/drawTextBox.ts +4 -4
  469. package/src/drawingSvg/getSvgDrawingHelper.ts +4 -1
  470. package/src/drawingSvg/index.ts +4 -0
  471. package/src/drawingSvg/{_setAttributesIfNecessary.ts → setAttributesIfNecessary.ts} +2 -2
  472. package/src/drawingSvg/{_setNewAttributesIfValid.ts → setNewAttributesIfValid.ts} +2 -2
  473. package/src/enums/Events.ts +22 -0
  474. package/src/eventDispatchers/mouseEventHandlers/mouseDown.ts +11 -2
  475. package/src/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.ts +72 -0
  476. package/src/eventDispatchers/shared/getMouseModifier.ts +15 -5
  477. package/src/eventDispatchers/shared/getToolsWithActionsForMouseEvent.ts +66 -0
  478. package/src/eventListeners/keyboard/keyDownListener.ts +13 -0
  479. package/src/eventListeners/mouse/mouseDownListener.ts +10 -2
  480. package/src/eventListeners/mouse/mouseMoveListener.ts +7 -1
  481. package/src/eventListeners/touch/touchStartListener.ts +15 -5
  482. package/src/index.ts +8 -0
  483. package/src/stateManagement/annotation/config/ToolStyle.ts +1 -0
  484. package/src/stateManagement/annotation/config/getState.ts +7 -3
  485. package/src/stateManagement/annotation/config/helpers.ts +6 -2
  486. package/src/store/SynchronizerManager/Synchronizer.ts +16 -8
  487. package/src/store/ToolGroupManager/ToolGroup.ts +99 -6
  488. package/src/store/ToolGroupManager/getToolGroupsWithToolName.ts +3 -1
  489. package/src/synchronizers/callbacks/stackImageSyncCallback.ts +63 -68
  490. package/src/synchronizers/callbacks/voiSyncCallback.ts +1 -1
  491. package/src/tools/AdvancedMagnifyTool.ts +725 -0
  492. package/src/tools/AdvancedMagnifyViewport.ts +624 -0
  493. package/src/tools/AdvancedMagnifyViewportManager.ts +291 -0
  494. package/src/tools/MIPJumpToClickTool.ts +6 -2
  495. package/src/tools/MagnifyTool.ts +2 -2
  496. package/src/tools/OrientationMarkerTool.ts +235 -0
  497. package/src/tools/OverlayGridTool.ts +357 -0
  498. package/src/tools/PlanarRotateTool.ts +3 -1
  499. package/src/tools/ReferenceCursors.ts +85 -29
  500. package/src/tools/ReferenceLinesTool.ts +131 -3
  501. package/src/tools/ScaleOverlayTool.ts +3 -1
  502. package/src/tools/annotation/AngleTool.ts +42 -20
  503. package/src/tools/annotation/ArrowAnnotateTool.ts +16 -1
  504. package/src/tools/annotation/BidirectionalTool.ts +38 -24
  505. package/src/tools/annotation/CircleROITool.ts +94 -107
  506. package/src/tools/annotation/CobbAngleTool.ts +452 -114
  507. package/src/tools/annotation/DragProbeTool.ts +25 -14
  508. package/src/tools/annotation/EllipticalROITool.ts +88 -97
  509. package/src/tools/annotation/LengthTool.ts +33 -18
  510. package/src/tools/annotation/PlanarFreehandROITool.ts +90 -78
  511. package/src/tools/annotation/ProbeTool.ts +43 -49
  512. package/src/tools/annotation/RectangleROITool.ts +80 -92
  513. package/src/tools/base/AnnotationDisplayTool.ts +4 -0
  514. package/src/tools/base/AnnotationTool.ts +41 -18
  515. package/src/tools/base/index.ts +2 -1
  516. package/src/tools/displayTools/Contour/contourDisplay.ts +8 -0
  517. package/src/tools/displayTools/Labelmap/labelmapDisplay.ts +4 -1
  518. package/src/tools/displayTools/Labelmap/removeLabelmapFromElement.ts +6 -1
  519. package/src/tools/displayTools/SegmentationDisplayTool.ts +12 -18
  520. package/src/tools/index.ts +8 -1
  521. package/src/tools/segmentation/BrushTool.ts +42 -19
  522. package/src/tools/segmentation/PaintFillTool.ts +10 -3
  523. package/src/tools/segmentation/strategies/eraseSphere.ts +2 -0
  524. package/src/tools/segmentation/strategies/fillCircle.ts +1 -13
  525. package/src/tools/segmentation/strategies/fillSphere.ts +56 -8
  526. package/src/tools/segmentation/strategies/utils/isWithinThreshold.ts +16 -0
  527. package/src/types/CINETypes.ts +8 -2
  528. package/src/types/CalculatorTypes.ts +7 -0
  529. package/src/types/EventTypes.ts +43 -0
  530. package/src/types/ISetToolModeOptions.ts +2 -2
  531. package/src/types/IToolGroup.ts +13 -3
  532. package/src/types/ToolAction.ts +54 -0
  533. package/src/types/ToolProps.ts +7 -1
  534. package/src/types/ToolSpecificAnnotationTypes.ts +58 -0
  535. package/src/types/index.ts +11 -1
  536. package/src/utilities/cine/playClip.ts +20 -3
  537. package/src/utilities/dynamicVolume/getDataInTime.ts +9 -6
  538. package/src/utilities/getCalibratedUnits.ts +15 -5
  539. package/src/utilities/getModalityUnit.ts +8 -2
  540. package/src/utilities/index.ts +2 -1
  541. package/src/utilities/math/angle/angleBetweenLines.ts +39 -9
  542. package/src/utilities/math/basic/BasicStatsCalculator.ts +60 -0
  543. package/src/utilities/math/basic/Calculator.ts +8 -0
  544. package/src/utilities/math/basic/index.ts +4 -0
  545. package/src/utilities/math/index.ts +10 -1
  546. package/src/utilities/math/midPoint.ts +3 -1
  547. package/src/utilities/math/polyline/pointInPolyline.ts +3 -1
  548. package/src/utilities/math/vec2/liangBarksyClip.ts +15 -5
  549. package/src/utilities/pointInShapeCallback.ts +15 -3
  550. package/src/utilities/roundNumber.ts +6 -2
  551. package/src/utilities/segmentation/brushSizeForToolGroup.ts +22 -4
  552. package/src/utilities/segmentation/thresholdVolumeByRange.ts +3 -1
  553. package/src/utilities/segmentation/utilities.ts +8 -1
  554. package/src/utilities/stackPrefetch/index.ts +3 -7
  555. package/src/utilities/stackPrefetch/stackContextPrefetch.ts +380 -0
  556. package/src/utilities/stackPrefetch/stackPrefetch.ts +37 -153
  557. package/src/utilities/stackPrefetch/stackPrefetchUtils.ts +114 -0
  558. package/dist/cjs/drawingSvg/_setAttributesIfNecessary.d.ts +0 -2
  559. package/dist/cjs/drawingSvg/_setAttributesIfNecessary.js.map +0 -1
  560. package/dist/cjs/drawingSvg/_setNewAttributesIfValid.d.ts +0 -2
  561. package/dist/cjs/drawingSvg/_setNewAttributesIfValid.js.map +0 -1
  562. package/dist/esm/drawingSvg/_setAttributesIfNecessary.d.ts +0 -2
  563. package/dist/esm/drawingSvg/_setAttributesIfNecessary.js.map +0 -1
  564. package/dist/esm/drawingSvg/_setNewAttributesIfValid.d.ts +0 -2
  565. package/dist/esm/drawingSvg/_setNewAttributesIfValid.js.map +0 -1
@@ -23,6 +23,7 @@ import {
23
23
  drawHandles as drawHandlesSvg,
24
24
  drawLine as drawLineSvg,
25
25
  drawLinkedTextBox as drawLinkedTextBoxSvg,
26
+ drawTextBox as drawTextBoxSvg,
26
27
  } from '../../drawingSvg';
27
28
  import { state } from '../../store';
28
29
  import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters';
@@ -47,7 +48,7 @@ import {
47
48
  InteractionTypes,
48
49
  SVGDrawingHelper,
49
50
  } from '../../types';
50
- import { AngleAnnotation } from '../../types/ToolSpecificAnnotationTypes';
51
+ import { CobbAngleAnnotation } from '../../types/ToolSpecificAnnotationTypes';
51
52
  import { StyleSpecifier } from '../../types/AnnotationStyle';
52
53
 
53
54
  class CobbAngleTool extends AnnotationTool {
@@ -64,6 +65,8 @@ class CobbAngleTool extends AnnotationTool {
64
65
  movingTextBox?: boolean;
65
66
  newAnnotation?: boolean;
66
67
  hasMoved?: boolean;
68
+ isNearFirstLine?: boolean;
69
+ isNearSecondLine?: boolean;
67
70
  } | null;
68
71
  isDrawing: boolean;
69
72
  isHandleOutsideImage: boolean;
@@ -75,6 +78,7 @@ class CobbAngleTool extends AnnotationTool {
75
78
  configuration: {
76
79
  shadow: true,
77
80
  preventHandleOutsideImage: false,
81
+ getTextLines: defaultGetTextLines,
78
82
  },
79
83
  }
80
84
  ) {
@@ -82,7 +86,7 @@ class CobbAngleTool extends AnnotationTool {
82
86
 
83
87
  this._throttledCalculateCachedStats = throttle(
84
88
  this._calculateCachedStats,
85
- 100,
89
+ 25,
86
90
  { trailing: true }
87
91
  );
88
92
  }
@@ -97,7 +101,7 @@ class CobbAngleTool extends AnnotationTool {
97
101
  */
98
102
  addNewAnnotation = (
99
103
  evt: EventTypes.MouseDownActivateEventType
100
- ): AngleAnnotation => {
104
+ ): CobbAngleAnnotation => {
101
105
  if (this.angleStartedNotYetCompleted) {
102
106
  return;
103
107
  }
@@ -191,52 +195,20 @@ class CobbAngleTool extends AnnotationTool {
191
195
  */
192
196
  isPointNearTool = (
193
197
  element: HTMLDivElement,
194
- annotation: AngleAnnotation,
198
+ annotation: CobbAngleAnnotation,
195
199
  canvasCoords: Types.Point2,
196
200
  proximity: number
197
201
  ): boolean => {
198
202
  const enabledElement = getEnabledElement(element);
199
203
  const { viewport } = enabledElement;
200
204
  const { data } = annotation;
201
- const [point1, point2, point3, point4] = data.handles.points;
202
- const canvasPoint1 = viewport.worldToCanvas(point1);
203
- const canvasPoint2 = viewport.worldToCanvas(point2);
204
- const canvasPoint3 = viewport.worldToCanvas(point3);
205
- const canvasPoint4 = viewport.worldToCanvas(point4);
206
-
207
- const line1 = {
208
- start: {
209
- x: canvasPoint1[0],
210
- y: canvasPoint1[1],
211
- },
212
- end: {
213
- x: canvasPoint2[0],
214
- y: canvasPoint2[1],
215
- },
216
- };
217
-
218
- const line2 = {
219
- start: {
220
- x: canvasPoint3[0],
221
- y: canvasPoint3[1],
222
- },
223
- end: {
224
- x: canvasPoint4[0],
225
- y: canvasPoint4[1],
226
- },
227
- };
228
205
 
229
- const distanceToPoint = lineSegment.distanceToPoint(
230
- [line1.start.x, line1.start.y],
231
- [line1.end.x, line1.end.y],
232
- [canvasCoords[0], canvasCoords[1]]
233
- );
234
-
235
- const distanceToPoint2 = lineSegment.distanceToPoint(
236
- [line2.start.x, line2.start.y],
237
- [line2.end.x, line2.end.y],
238
- [canvasCoords[0], canvasCoords[1]]
239
- );
206
+ const { distanceToPoint, distanceToPoint2 } = this.distanceToLines({
207
+ viewport,
208
+ points: data.handles.points,
209
+ canvasCoords,
210
+ proximity,
211
+ });
240
212
 
241
213
  if (distanceToPoint <= proximity || distanceToPoint2 <= proximity) {
242
214
  return true;
@@ -247,8 +219,10 @@ class CobbAngleTool extends AnnotationTool {
247
219
 
248
220
  toolSelectedCallback = (
249
221
  evt: EventTypes.MouseDownEventType,
250
- annotation: AngleAnnotation,
251
- interactionType: InteractionTypes
222
+ annotation: CobbAngleAnnotation,
223
+ interactionType: InteractionTypes,
224
+ canvasCoords: Types.Point2,
225
+ proximity = 6
252
226
  ): void => {
253
227
  const eventDetail = evt.detail;
254
228
  const { element } = eventDetail;
@@ -260,19 +234,28 @@ class CobbAngleTool extends AnnotationTool {
260
234
  this.getToolName()
261
235
  );
262
236
 
237
+ const enabledElement = getEnabledElement(element);
238
+ const { renderingEngine, viewport } = enabledElement;
239
+
240
+ const { isNearFirstLine, isNearSecondLine } = this.distanceToLines({
241
+ viewport,
242
+ points: annotation.data.handles.points,
243
+ canvasCoords,
244
+ proximity,
245
+ });
246
+
263
247
  this.editData = {
264
248
  annotation,
265
249
  viewportIdsToRender,
266
250
  movingTextBox: false,
251
+ isNearFirstLine,
252
+ isNearSecondLine,
267
253
  };
268
254
 
269
255
  this._activateModify(element);
270
256
 
271
257
  hideElementCursor(element);
272
258
 
273
- const enabledElement = getEnabledElement(element);
274
- const { renderingEngine } = enabledElement;
275
-
276
259
  triggerAnnotationRenderForViewportIds(renderingEngine, viewportIdsToRender);
277
260
 
278
261
  evt.preventDefault();
@@ -280,7 +263,7 @@ class CobbAngleTool extends AnnotationTool {
280
263
 
281
264
  handleSelectedCallback(
282
265
  evt: EventTypes.MouseDownEventType,
283
- annotation: AngleAnnotation,
266
+ annotation: CobbAngleAnnotation,
284
267
  handle: ToolHandle,
285
268
  interactionType = 'mouse'
286
269
  ): void {
@@ -435,8 +418,14 @@ class CobbAngleTool extends AnnotationTool {
435
418
  const eventDetail = evt.detail;
436
419
  const { element } = eventDetail;
437
420
 
438
- const { annotation, viewportIdsToRender, handleIndex, movingTextBox } =
439
- this.editData;
421
+ const {
422
+ annotation,
423
+ viewportIdsToRender,
424
+ handleIndex,
425
+ movingTextBox,
426
+ isNearFirstLine,
427
+ isNearSecondLine,
428
+ } = this.editData;
440
429
  const { data } = annotation;
441
430
 
442
431
  if (movingTextBox) {
@@ -452,21 +441,35 @@ class CobbAngleTool extends AnnotationTool {
452
441
  worldPosition[2] += worldPosDelta[2];
453
442
 
454
443
  textBox.hasMoved = true;
455
- } else if (handleIndex === undefined) {
456
- // Drag mode - moving handle
444
+ } else if (
445
+ handleIndex === undefined &&
446
+ (isNearFirstLine || isNearSecondLine)
447
+ ) {
448
+ // select tool mode - moving annotation
457
449
  const { deltaPoints } = eventDetail as EventTypes.MouseDragEventDetail;
458
450
  const worldPosDelta = deltaPoints.world;
459
-
460
451
  const points = data.handles.points;
461
452
 
462
- points.forEach((point) => {
463
- point[0] += worldPosDelta[0];
464
- point[1] += worldPosDelta[1];
465
- point[2] += worldPosDelta[2];
466
- });
453
+ // separate the logic for moving handles to move them separately
454
+ if (isNearFirstLine) {
455
+ const firstLinePoints = [points[0], points[1]];
456
+ firstLinePoints.forEach((point) => {
457
+ point[0] += worldPosDelta[0];
458
+ point[1] += worldPosDelta[1];
459
+ point[2] += worldPosDelta[2];
460
+ });
461
+ } else if (isNearSecondLine) {
462
+ const secondLinePoints = [points[2], points[3]];
463
+ secondLinePoints.forEach((point) => {
464
+ point[0] += worldPosDelta[0];
465
+ point[1] += worldPosDelta[1];
466
+ point[2] += worldPosDelta[2];
467
+ });
468
+ }
469
+
467
470
  annotation.invalidated = true;
468
471
  } else {
469
- // Move mode - after double click, and mouse move to draw
472
+ // Drag handle mode - after double click, and mouse move to draw
470
473
  const { currentPoints } = eventDetail;
471
474
  const worldPos = currentPoints.world;
472
475
 
@@ -484,40 +487,44 @@ class CobbAngleTool extends AnnotationTool {
484
487
 
485
488
  cancel = (element: HTMLDivElement) => {
486
489
  // If it is mid-draw or mid-modify
487
- if (this.isDrawing) {
488
- this.isDrawing = false;
489
- this._deactivateDraw(element);
490
- this._deactivateModify(element);
491
- resetElementCursor(element);
490
+ if (!this.isDrawing) {
491
+ return;
492
+ }
492
493
 
493
- const { annotation, viewportIdsToRender, newAnnotation } = this.editData;
494
- const { data } = annotation;
494
+ this.isDrawing = false;
495
+ this._deactivateDraw(element);
496
+ this._deactivateModify(element);
497
+ resetElementCursor(element);
495
498
 
496
- annotation.highlighted = false;
497
- data.handles.activeHandleIndex = null;
499
+ const { annotation, viewportIdsToRender, newAnnotation } = this.editData;
500
+ const { data } = annotation;
498
501
 
499
- const enabledElement = getEnabledElement(element);
500
- const { renderingEngine } = enabledElement;
502
+ if (data.handles.points.length < 4) {
503
+ // If it is mid-draw
504
+ removeAnnotation(annotation.annotationUID);
505
+ }
501
506
 
502
- triggerAnnotationRenderForViewportIds(
503
- renderingEngine,
504
- viewportIdsToRender
505
- );
507
+ annotation.highlighted = false;
508
+ data.handles.activeHandleIndex = null;
506
509
 
507
- if (newAnnotation) {
508
- const eventType = Events.ANNOTATION_COMPLETED;
510
+ const enabledElement = getEnabledElement(element);
511
+ const { renderingEngine } = enabledElement;
509
512
 
510
- const eventDetail: AnnotationCompletedEventDetail = {
511
- annotation,
512
- };
513
+ triggerAnnotationRenderForViewportIds(renderingEngine, viewportIdsToRender);
513
514
 
514
- triggerEvent(eventTarget, eventType, eventDetail);
515
- }
515
+ if (newAnnotation) {
516
+ const eventType = Events.ANNOTATION_COMPLETED;
516
517
 
517
- this.editData = null;
518
- this.angleStartedNotYetCompleted = false;
519
- return annotation.annotationUID;
518
+ const eventDetail: AnnotationCompletedEventDetail = {
519
+ annotation,
520
+ };
521
+
522
+ triggerEvent(eventTarget, eventType, eventDetail);
520
523
  }
524
+
525
+ this.editData = null;
526
+ this.angleStartedNotYetCompleted = false;
527
+ return annotation.annotationUID;
521
528
  };
522
529
 
523
530
  _activateModify = (element: HTMLDivElement) => {
@@ -660,7 +667,7 @@ class CobbAngleTool extends AnnotationTool {
660
667
 
661
668
  // Draw SVG
662
669
  for (let i = 0; i < annotations.length; i++) {
663
- const annotation = annotations[i] as AngleAnnotation;
670
+ const annotation = annotations[i] as CobbAngleAnnotation;
664
671
  const { annotationUID, data } = annotation;
665
672
  const { points, activeHandleIndex } = data.handles;
666
673
 
@@ -673,9 +680,32 @@ class CobbAngleTool extends AnnotationTool {
673
680
  const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p));
674
681
 
675
682
  // WE HAVE TO CACHE STATS BEFORE FETCHING TEXT
676
- if (!data.cachedStats[targetId]) {
683
+ if (
684
+ !data.cachedStats[targetId] ||
685
+ data.cachedStats[targetId].angle == null
686
+ ) {
677
687
  data.cachedStats[targetId] = {
678
688
  angle: null,
689
+ arc1Angle: null,
690
+ arc2Angle: null,
691
+ points: {
692
+ world: {
693
+ arc1Start: null,
694
+ arc1End: null,
695
+ arc2Start: null,
696
+ arc2End: null,
697
+ arc1Angle: null,
698
+ arc2Angle: null,
699
+ },
700
+ canvas: {
701
+ arc1Start: null,
702
+ arc1End: null,
703
+ arc2Start: null,
704
+ arc2End: null,
705
+ arc1Angle: null,
706
+ arc2Angle: null,
707
+ },
708
+ },
679
709
  };
680
710
 
681
711
  this._calculateCachedStats(annotation, renderingEngine, enabledElement);
@@ -720,13 +750,22 @@ class CobbAngleTool extends AnnotationTool {
720
750
  );
721
751
  }
722
752
 
723
- let lineUID = '1';
753
+ const firstLine = [canvasCoordinates[0], canvasCoordinates[1]] as [
754
+ Types.Point2,
755
+ Types.Point2
756
+ ];
757
+ const secondLine = [canvasCoordinates[2], canvasCoordinates[3]] as [
758
+ Types.Point2,
759
+ Types.Point2
760
+ ];
761
+
762
+ let lineUID = 'line1';
724
763
  drawLineSvg(
725
764
  svgDrawingHelper,
726
765
  annotationUID,
727
766
  lineUID,
728
- canvasCoordinates[0],
729
- canvasCoordinates[1],
767
+ firstLine[0],
768
+ firstLine[1],
730
769
  {
731
770
  color,
732
771
  width: lineWidth,
@@ -736,19 +775,19 @@ class CobbAngleTool extends AnnotationTool {
736
775
 
737
776
  renderStatus = true;
738
777
 
739
- // Don't add textBox until annotation has 4 anchor points
778
+ // Don't add the stats until annotation has 4 anchor points
740
779
  if (canvasCoordinates.length < 4) {
741
780
  return renderStatus;
742
781
  }
743
782
 
744
- lineUID = '2';
783
+ lineUID = 'line2';
745
784
 
746
785
  drawLineSvg(
747
786
  svgDrawingHelper,
748
787
  annotationUID,
749
788
  lineUID,
750
- canvasCoordinates[2],
751
- canvasCoordinates[3],
789
+ secondLine[0],
790
+ secondLine[1],
752
791
  {
753
792
  color,
754
793
  width: lineWidth,
@@ -756,20 +795,69 @@ class CobbAngleTool extends AnnotationTool {
756
795
  }
757
796
  );
758
797
 
759
- lineUID = '3';
760
- const mid1 = midPoint2(canvasCoordinates[0], canvasCoordinates[1]);
761
- const mid2 = midPoint2(canvasCoordinates[2], canvasCoordinates[3]);
798
+ lineUID = 'linkLine';
799
+ const mid1 = midPoint2(firstLine[0], firstLine[1]);
800
+ const mid2 = midPoint2(secondLine[0], secondLine[1]);
762
801
  drawLineSvg(svgDrawingHelper, annotationUID, lineUID, mid1, mid2, {
763
802
  color,
764
803
  lineWidth: '1',
765
804
  lineDash: '1,4',
766
805
  });
767
806
 
807
+ // Calculating the arcs
808
+
809
+ const { arc1Start, arc1End, arc2End, arc2Start } =
810
+ data.cachedStats[targetId].points.canvas;
811
+ const { arc1Angle, arc2Angle } = data.cachedStats[targetId];
812
+
813
+ lineUID = 'arc1';
814
+
815
+ drawLineSvg(
816
+ svgDrawingHelper,
817
+ annotationUID,
818
+ lineUID,
819
+ arc1Start as Types.Point2,
820
+ arc1End as Types.Point2,
821
+ {
822
+ color,
823
+ lineWidth: '1',
824
+ }
825
+ );
826
+
827
+ lineUID = 'arc2';
828
+
829
+ drawLineSvg(
830
+ svgDrawingHelper,
831
+ annotationUID,
832
+ lineUID,
833
+ arc2Start as Types.Point2,
834
+ arc2End as Types.Point2,
835
+ {
836
+ color,
837
+ lineWidth: '1',
838
+ }
839
+ );
840
+
768
841
  if (!data.cachedStats[targetId]?.angle) {
769
842
  continue;
770
843
  }
771
844
 
772
- const textLines = this._getTextLines(data, targetId);
845
+ const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation);
846
+ if (!options.visibility) {
847
+ data.handles.textBox = {
848
+ hasMoved: false,
849
+ worldPosition: <Types.Point3>[0, 0, 0],
850
+ worldBoundingBox: {
851
+ topLeft: <Types.Point3>[0, 0, 0],
852
+ topRight: <Types.Point3>[0, 0, 0],
853
+ bottomLeft: <Types.Point3>[0, 0, 0],
854
+ bottomRight: <Types.Point3>[0, 0, 0],
855
+ },
856
+ };
857
+ continue;
858
+ }
859
+
860
+ const textLines = this.configuration.getTextLines(data, targetId);
773
861
 
774
862
  if (!data.handles.textBox.hasMoved) {
775
863
  const canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCoordinates);
@@ -782,7 +870,7 @@ class CobbAngleTool extends AnnotationTool {
782
870
  data.handles.textBox.worldPosition
783
871
  );
784
872
 
785
- const textBoxUID = '1';
873
+ const textBoxUID = 'cobbAngleText';
786
874
  const boundingBox = drawLinkedTextBoxSvg(
787
875
  svgDrawingHelper,
788
876
  annotationUID,
@@ -791,7 +879,7 @@ class CobbAngleTool extends AnnotationTool {
791
879
  textBoxPosition,
792
880
  canvasCoordinates,
793
881
  {},
794
- this.getLinkedTextBoxStyle(styleSpecifier, annotation)
882
+ options
795
883
  );
796
884
 
797
885
  const { x: left, y: top, width, height } = boundingBox;
@@ -802,24 +890,50 @@ class CobbAngleTool extends AnnotationTool {
802
890
  bottomLeft: viewport.canvasToWorld([left, top + height]),
803
891
  bottomRight: viewport.canvasToWorld([left + width, top + height]),
804
892
  };
805
- }
806
893
 
807
- return renderStatus;
808
- };
894
+ const arc1TextBoxUID = 'arcAngle1';
809
895
 
810
- // text line for the current active angle annotation
811
- _getTextLines(data, targetId) {
812
- const cachedVolumeStats = data.cachedStats[targetId];
813
- const { angle } = cachedVolumeStats;
896
+ const arc1TextLine = [
897
+ `${arc1Angle.toFixed(2)} ${String.fromCharCode(176)}`,
898
+ ];
814
899
 
815
- if (angle === undefined) {
816
- return;
817
- }
900
+ const arch1TextPosCanvas = midPoint2(arc1Start, arc1End);
818
901
 
819
- const textLines = [`${angle.toFixed(2)} ${String.fromCharCode(176)}`];
902
+ drawTextBoxSvg(
903
+ svgDrawingHelper,
904
+ annotationUID,
905
+ arc1TextBoxUID,
906
+ arc1TextLine,
907
+ arch1TextPosCanvas,
908
+ {
909
+ ...options,
910
+ padding: 3,
911
+ }
912
+ );
820
913
 
821
- return textLines;
822
- }
914
+ const arc2TextBoxUID = 'arcAngle2';
915
+
916
+ const arc2TextLine = [
917
+ `${arc2Angle.toFixed(2)} ${String.fromCharCode(176)}`,
918
+ ];
919
+
920
+ const arch2TextPosCanvas = midPoint2(arc2Start, arc2End);
921
+
922
+ drawTextBoxSvg(
923
+ svgDrawingHelper,
924
+ annotationUID,
925
+ arc2TextBoxUID,
926
+ arc2TextLine,
927
+ arch2TextPosCanvas,
928
+ {
929
+ ...options,
930
+ padding: 3,
931
+ }
932
+ );
933
+ }
934
+
935
+ return renderStatus;
936
+ };
823
937
 
824
938
  _calculateCachedStats(annotation, renderingEngine, enabledElement) {
825
939
  const data = annotation.data;
@@ -857,16 +971,56 @@ class CobbAngleTool extends AnnotationTool {
857
971
  }
858
972
  }
859
973
  }
974
+ const { viewport } = enabledElement;
975
+
976
+ const canvasPoints = data.handles.points.map((p) =>
977
+ viewport.worldToCanvas(p)
978
+ );
979
+
980
+ const firstLine = [canvasPoints[0], canvasPoints[1]] as [
981
+ Types.Point2,
982
+ Types.Point2
983
+ ];
984
+ const secondLine = [canvasPoints[2], canvasPoints[3]] as [
985
+ Types.Point2,
986
+ Types.Point2
987
+ ];
988
+
989
+ const mid1 = midPoint2(firstLine[0], firstLine[1]);
990
+ const mid2 = midPoint2(secondLine[0], secondLine[1]);
991
+
992
+ const { arc1Start, arc1End, arc2End, arc2Start, arc1Angle, arc2Angle } =
993
+ this.getArcsStartEndPoints({
994
+ firstLine,
995
+ secondLine,
996
+ mid1,
997
+ mid2,
998
+ });
860
999
 
861
1000
  const { cachedStats } = data;
862
1001
  const targetIds = Object.keys(cachedStats);
863
1002
 
864
1003
  for (let i = 0; i < targetIds.length; i++) {
865
1004
  const targetId = targetIds[i];
866
- const angle = angleBetweenLines(seg1, seg2);
867
1005
 
868
1006
  cachedStats[targetId] = {
869
- angle,
1007
+ angle: angleBetweenLines(seg1, seg2),
1008
+ arc1Angle,
1009
+ arc2Angle,
1010
+ points: {
1011
+ canvas: {
1012
+ arc1Start,
1013
+ arc1End,
1014
+ arc2End,
1015
+ arc2Start,
1016
+ },
1017
+ world: {
1018
+ arc1Start: viewport.canvasToWorld(arc1Start),
1019
+ arc1End: viewport.canvasToWorld(arc1End),
1020
+ arc2End: viewport.canvasToWorld(arc2End),
1021
+ arc2Start: viewport.canvasToWorld(arc2Start),
1022
+ },
1023
+ },
870
1024
  };
871
1025
  }
872
1026
 
@@ -884,6 +1038,190 @@ class CobbAngleTool extends AnnotationTool {
884
1038
 
885
1039
  return cachedStats;
886
1040
  }
1041
+
1042
+ distanceToLines = ({ viewport, points, canvasCoords, proximity }) => {
1043
+ const [point1, point2, point3, point4] = points;
1044
+ const canvasPoint1 = viewport.worldToCanvas(point1);
1045
+ const canvasPoint2 = viewport.worldToCanvas(point2);
1046
+ const canvasPoint3 = viewport.worldToCanvas(point3);
1047
+ const canvasPoint4 = viewport.worldToCanvas(point4);
1048
+
1049
+ const line1 = {
1050
+ start: {
1051
+ x: canvasPoint1[0],
1052
+ y: canvasPoint1[1],
1053
+ },
1054
+ end: {
1055
+ x: canvasPoint2[0],
1056
+ y: canvasPoint2[1],
1057
+ },
1058
+ };
1059
+
1060
+ const line2 = {
1061
+ start: {
1062
+ x: canvasPoint3[0],
1063
+ y: canvasPoint3[1],
1064
+ },
1065
+ end: {
1066
+ x: canvasPoint4[0],
1067
+ y: canvasPoint4[1],
1068
+ },
1069
+ };
1070
+
1071
+ const distanceToPoint = lineSegment.distanceToPoint(
1072
+ [line1.start.x, line1.start.y],
1073
+ [line1.end.x, line1.end.y],
1074
+ [canvasCoords[0], canvasCoords[1]]
1075
+ );
1076
+
1077
+ const distanceToPoint2 = lineSegment.distanceToPoint(
1078
+ [line2.start.x, line2.start.y],
1079
+ [line2.end.x, line2.end.y],
1080
+ [canvasCoords[0], canvasCoords[1]]
1081
+ );
1082
+
1083
+ let isNearFirstLine = false;
1084
+ let isNearSecondLine = false;
1085
+
1086
+ if (distanceToPoint <= proximity) {
1087
+ isNearFirstLine = true;
1088
+ } else if (distanceToPoint2 <= proximity) {
1089
+ isNearSecondLine = true;
1090
+ }
1091
+ return {
1092
+ distanceToPoint,
1093
+ distanceToPoint2,
1094
+ isNearFirstLine,
1095
+ isNearSecondLine,
1096
+ };
1097
+ };
1098
+
1099
+ getArcsStartEndPoints = ({
1100
+ firstLine,
1101
+ secondLine,
1102
+ mid1,
1103
+ mid2,
1104
+ }): {
1105
+ arc1Start: Types.Point2;
1106
+ arc1End: Types.Point2;
1107
+ arc2Start: Types.Point2;
1108
+ arc2End: Types.Point2;
1109
+ arc1Angle: number;
1110
+ arc2Angle: number;
1111
+ } => {
1112
+ const linkLine = [mid1, mid2] as [Types.Point2, Types.Point2];
1113
+
1114
+ const arc1Angle = angleBetweenLines(firstLine, linkLine);
1115
+ const arc2Angle = angleBetweenLines(secondLine, linkLine);
1116
+
1117
+ const arc1Side = arc1Angle > 90 ? 1 : 0;
1118
+ const arc2Side = arc2Angle > 90 ? 0 : 1;
1119
+
1120
+ const midLinkLine = midPoint2(linkLine[0], linkLine[1]);
1121
+
1122
+ const linkLineLength = Math.sqrt(
1123
+ (linkLine[1][0] - linkLine[0][0]) ** 2 +
1124
+ (linkLine[1][1] - linkLine[0][1]) ** 2
1125
+ );
1126
+ const ratio = 0.1; // 10% of the line length
1127
+
1128
+ const midFirstLine = midPoint2(firstLine[0], firstLine[1]);
1129
+ const midSecondLine = midPoint2(secondLine[0], secondLine[1]);
1130
+
1131
+ // For arc1Start
1132
+ const directionVectorStartArc1 = [
1133
+ firstLine[arc1Side][0] - midFirstLine[0],
1134
+ firstLine[arc1Side][1] - midFirstLine[1],
1135
+ ];
1136
+ const magnitudeStartArc1 = Math.sqrt(
1137
+ directionVectorStartArc1[0] ** 2 + directionVectorStartArc1[1] ** 2
1138
+ );
1139
+ const normalizedDirectionStartArc1 = [
1140
+ directionVectorStartArc1[0] / magnitudeStartArc1,
1141
+ directionVectorStartArc1[1] / magnitudeStartArc1,
1142
+ ];
1143
+ const arc1Start = [
1144
+ midFirstLine[0] +
1145
+ normalizedDirectionStartArc1[0] * linkLineLength * ratio,
1146
+ midFirstLine[1] +
1147
+ normalizedDirectionStartArc1[1] * linkLineLength * ratio,
1148
+ ] as Types.Point2;
1149
+
1150
+ // Existing logic for arc1End
1151
+ const directionVectorEndArc1 = [
1152
+ midLinkLine[0] - mid1[0],
1153
+ midLinkLine[1] - mid1[1],
1154
+ ];
1155
+ const magnitudeEndArc1 = Math.sqrt(
1156
+ directionVectorEndArc1[0] ** 2 + directionVectorEndArc1[1] ** 2
1157
+ );
1158
+ const normalizedDirectionEndArc1 = [
1159
+ directionVectorEndArc1[0] / magnitudeEndArc1,
1160
+ directionVectorEndArc1[1] / magnitudeEndArc1,
1161
+ ];
1162
+ const arc1End = [
1163
+ mid1[0] + normalizedDirectionEndArc1[0] * linkLineLength * ratio,
1164
+ mid1[1] + normalizedDirectionEndArc1[1] * linkLineLength * ratio,
1165
+ ] as Types.Point2;
1166
+
1167
+ // Similar logic for arc2Start
1168
+ const directionVectorStartArc2 = [
1169
+ secondLine[arc2Side][0] - midSecondLine[0],
1170
+ secondLine[arc2Side][1] - midSecondLine[1],
1171
+ ];
1172
+ const magnitudeStartArc2 = Math.sqrt(
1173
+ directionVectorStartArc2[0] ** 2 + directionVectorStartArc2[1] ** 2
1174
+ );
1175
+ const normalizedDirectionStartArc2 = [
1176
+ directionVectorStartArc2[0] / magnitudeStartArc2,
1177
+ directionVectorStartArc2[1] / magnitudeStartArc2,
1178
+ ];
1179
+ const arc2Start = [
1180
+ midSecondLine[0] +
1181
+ normalizedDirectionStartArc2[0] * linkLineLength * ratio,
1182
+ midSecondLine[1] +
1183
+ normalizedDirectionStartArc2[1] * linkLineLength * ratio,
1184
+ ] as Types.Point2;
1185
+
1186
+ // Similar logic for arc2End
1187
+ const directionVectorEndArc2 = [
1188
+ midLinkLine[0] - mid2[0],
1189
+ midLinkLine[1] - mid2[1],
1190
+ ];
1191
+ const magnitudeEndArc2 = Math.sqrt(
1192
+ directionVectorEndArc2[0] ** 2 + directionVectorEndArc2[1] ** 2
1193
+ );
1194
+ const normalizedDirectionEndArc2 = [
1195
+ directionVectorEndArc2[0] / magnitudeEndArc2,
1196
+ directionVectorEndArc2[1] / magnitudeEndArc2,
1197
+ ];
1198
+ const arc2End = [
1199
+ mid2[0] + normalizedDirectionEndArc2[0] * linkLineLength * ratio,
1200
+ mid2[1] + normalizedDirectionEndArc2[1] * linkLineLength * ratio,
1201
+ ] as Types.Point2;
1202
+
1203
+ return {
1204
+ arc1Start,
1205
+ arc1End,
1206
+ arc2Start,
1207
+ arc2End,
1208
+ arc1Angle: arc1Angle > 90 ? 180 - arc1Angle : arc1Angle,
1209
+ arc2Angle: arc2Angle > 90 ? 180 - arc2Angle : arc2Angle,
1210
+ };
1211
+ };
1212
+ }
1213
+
1214
+ function defaultGetTextLines(data, targetId): string[] {
1215
+ const cachedVolumeStats = data.cachedStats[targetId];
1216
+ const { angle } = cachedVolumeStats;
1217
+
1218
+ if (angle === undefined) {
1219
+ return;
1220
+ }
1221
+
1222
+ const textLines = [`${angle.toFixed(2)} ${String.fromCharCode(176)}`];
1223
+
1224
+ return textLines;
887
1225
  }
888
1226
 
889
1227
  CobbAngleTool.toolName = 'CobbAngle';