@cornerstonejs/tools 1.42.0 → 1.43.0

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 (333) hide show
  1. package/dist/cjs/eventListeners/segmentation/imageChangeEventListener.js +18 -5
  2. package/dist/cjs/eventListeners/segmentation/imageChangeEventListener.js.map +1 -1
  3. package/dist/cjs/index.d.ts +2 -2
  4. package/dist/cjs/index.js +2 -1
  5. package/dist/cjs/index.js.map +1 -1
  6. package/dist/cjs/stateManagement/segmentation/activeSegmentation.d.ts +2 -1
  7. package/dist/cjs/stateManagement/segmentation/activeSegmentation.js +10 -1
  8. package/dist/cjs/stateManagement/segmentation/activeSegmentation.js.map +1 -1
  9. package/dist/cjs/stateManagement/segmentation/convertStackToVolumeSegmentation.d.ts +10 -0
  10. package/dist/cjs/stateManagement/segmentation/convertStackToVolumeSegmentation.js +65 -0
  11. package/dist/cjs/stateManagement/segmentation/convertStackToVolumeSegmentation.js.map +1 -0
  12. package/dist/cjs/stateManagement/segmentation/convertVolumeToStackSegmentation.d.ts +8 -0
  13. package/dist/cjs/stateManagement/segmentation/convertVolumeToStackSegmentation.js +92 -0
  14. package/dist/cjs/stateManagement/segmentation/convertVolumeToStackSegmentation.js.map +1 -0
  15. package/dist/cjs/stateManagement/segmentation/index.d.ts +3 -1
  16. package/dist/cjs/stateManagement/segmentation/index.js +5 -1
  17. package/dist/cjs/stateManagement/segmentation/index.js.map +1 -1
  18. package/dist/cjs/stateManagement/segmentation/segmentIndex.js +5 -0
  19. package/dist/cjs/stateManagement/segmentation/segmentIndex.js.map +1 -1
  20. package/dist/cjs/stateManagement/segmentation/segmentationState.d.ts +2 -1
  21. package/dist/cjs/stateManagement/segmentation/segmentationState.js +8 -1
  22. package/dist/cjs/stateManagement/segmentation/segmentationState.js.map +1 -1
  23. package/dist/cjs/store/ToolGroupManager/ToolGroup.js +3 -0
  24. package/dist/cjs/store/ToolGroupManager/ToolGroup.js.map +1 -1
  25. package/dist/cjs/tools/annotation/AngleTool.js +2 -2
  26. package/dist/cjs/tools/annotation/AngleTool.js.map +1 -1
  27. package/dist/cjs/tools/annotation/BidirectionalTool.js +2 -2
  28. package/dist/cjs/tools/annotation/BidirectionalTool.js.map +1 -1
  29. package/dist/cjs/tools/annotation/CircleROITool.js +8 -8
  30. package/dist/cjs/tools/annotation/CircleROITool.js.map +1 -1
  31. package/dist/cjs/tools/annotation/EllipticalROITool.js +7 -7
  32. package/dist/cjs/tools/annotation/EllipticalROITool.js.map +1 -1
  33. package/dist/cjs/tools/annotation/LengthTool.js +2 -2
  34. package/dist/cjs/tools/annotation/LengthTool.js.map +1 -1
  35. package/dist/cjs/tools/annotation/PlanarFreehandROITool.js +5 -5
  36. package/dist/cjs/tools/annotation/PlanarFreehandROITool.js.map +1 -1
  37. package/dist/cjs/tools/annotation/ProbeTool.js +3 -3
  38. package/dist/cjs/tools/annotation/ProbeTool.js.map +1 -1
  39. package/dist/cjs/tools/annotation/RectangleROITool.js +7 -7
  40. package/dist/cjs/tools/annotation/RectangleROITool.js.map +1 -1
  41. package/dist/cjs/tools/displayTools/Labelmap/labelmapConfig.js +2 -0
  42. package/dist/cjs/tools/displayTools/Labelmap/labelmapConfig.js.map +1 -1
  43. package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.js +20 -4
  44. package/dist/cjs/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
  45. package/dist/cjs/tools/index.d.ts +2 -1
  46. package/dist/cjs/tools/index.js +3 -1
  47. package/dist/cjs/tools/index.js.map +1 -1
  48. package/dist/cjs/tools/segmentation/BrushTool.d.ts +1 -0
  49. package/dist/cjs/tools/segmentation/BrushTool.js +40 -19
  50. package/dist/cjs/tools/segmentation/BrushTool.js.map +1 -1
  51. package/dist/cjs/tools/segmentation/CircleScissorsTool.js +5 -0
  52. package/dist/cjs/tools/segmentation/CircleScissorsTool.js.map +1 -1
  53. package/dist/cjs/tools/segmentation/RectangleScissorsTool.js +5 -0
  54. package/dist/cjs/tools/segmentation/RectangleScissorsTool.js.map +1 -1
  55. package/dist/cjs/tools/segmentation/SegmentSelectTool.d.ts +15 -0
  56. package/dist/cjs/tools/segmentation/SegmentSelectTool.js +105 -0
  57. package/dist/cjs/tools/segmentation/SegmentSelectTool.js.map +1 -0
  58. package/dist/cjs/tools/segmentation/SphereScissorsTool.js +5 -0
  59. package/dist/cjs/tools/segmentation/SphereScissorsTool.js.map +1 -1
  60. package/dist/cjs/tools/segmentation/strategies/BrushStrategy.d.ts +2 -1
  61. package/dist/cjs/tools/segmentation/strategies/BrushStrategy.js.map +1 -1
  62. package/dist/cjs/tools/segmentation/strategies/fillCircle.js +12 -15
  63. package/dist/cjs/tools/segmentation/strategies/fillCircle.js.map +1 -1
  64. package/dist/cjs/tools/segmentation/strategies/fillRectangle.js +30 -3
  65. package/dist/cjs/tools/segmentation/strategies/fillRectangle.js.map +1 -1
  66. package/dist/cjs/tools/segmentation/strategies/fillSphere.js +3 -20
  67. package/dist/cjs/tools/segmentation/strategies/fillSphere.js.map +1 -1
  68. package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.d.ts +1 -1
  69. package/dist/cjs/tools/segmentation/strategies/utils/isWithinThreshold.js.map +1 -1
  70. package/dist/cjs/types/LabelmapTypes.d.ts +1 -0
  71. package/dist/cjs/utilities/boundingBox/getBoundingBoxAroundShape.d.ts +4 -2
  72. package/dist/cjs/utilities/boundingBox/getBoundingBoxAroundShape.js +45 -23
  73. package/dist/cjs/utilities/boundingBox/getBoundingBoxAroundShape.js.map +1 -1
  74. package/dist/cjs/utilities/boundingBox/index.d.ts +2 -2
  75. package/dist/cjs/utilities/boundingBox/index.js +5 -3
  76. package/dist/cjs/utilities/boundingBox/index.js.map +1 -1
  77. package/dist/cjs/utilities/getSphereBoundsInfo.d.ts +11 -0
  78. package/dist/cjs/utilities/getSphereBoundsInfo.js +45 -0
  79. package/dist/cjs/utilities/getSphereBoundsInfo.js.map +1 -0
  80. package/dist/cjs/utilities/index.d.ts +4 -3
  81. package/dist/cjs/utilities/index.js +8 -7
  82. package/dist/cjs/utilities/index.js.map +1 -1
  83. package/dist/cjs/utilities/pointInShapeCallback.d.ts +1 -1
  84. package/dist/cjs/utilities/pointInShapeCallback.js +1 -1
  85. package/dist/cjs/utilities/pointInShapeCallback.js.map +1 -1
  86. package/dist/cjs/utilities/rectangleROITool/getBoundsIJKFromRectangleAnnotations.js +2 -2
  87. package/dist/cjs/utilities/rectangleROITool/getBoundsIJKFromRectangleAnnotations.js.map +1 -1
  88. package/dist/cjs/utilities/rectangleROITool/index.d.ts +2 -1
  89. package/dist/cjs/utilities/rectangleROITool/index.js +3 -1
  90. package/dist/cjs/utilities/rectangleROITool/index.js.map +1 -1
  91. package/dist/cjs/utilities/rectangleROITool/isAxisAlignedRectangle.d.ts +2 -0
  92. package/dist/cjs/utilities/rectangleROITool/isAxisAlignedRectangle.js +26 -0
  93. package/dist/cjs/utilities/rectangleROITool/isAxisAlignedRectangle.js.map +1 -0
  94. package/dist/cjs/utilities/segmentation/createImageIdReferenceMap.d.ts +2 -0
  95. package/dist/cjs/utilities/segmentation/createImageIdReferenceMap.js +11 -0
  96. package/dist/cjs/utilities/segmentation/createImageIdReferenceMap.js.map +1 -0
  97. package/dist/cjs/utilities/segmentation/createLabelmapVolumeForViewport.js +1 -1
  98. package/dist/cjs/utilities/segmentation/createLabelmapVolumeForViewport.js.map +1 -1
  99. package/dist/cjs/utilities/segmentation/index.d.ts +3 -1
  100. package/dist/cjs/utilities/segmentation/index.js +5 -1
  101. package/dist/cjs/utilities/segmentation/index.js.map +1 -1
  102. package/dist/cjs/utilities/segmentation/invalidateBrushCursor.d.ts +1 -0
  103. package/dist/cjs/utilities/segmentation/invalidateBrushCursor.js +31 -0
  104. package/dist/cjs/utilities/segmentation/invalidateBrushCursor.js.map +1 -0
  105. package/dist/cjs/utilities/segmentation/thresholdSegmentationByRange.js.map +1 -1
  106. package/dist/cjs/utilities/segmentation/triggerSegmentationRender.js +8 -4
  107. package/dist/cjs/utilities/segmentation/triggerSegmentationRender.js.map +1 -1
  108. package/dist/cjs/utilities/segmentation/utilities.d.ts +1 -1
  109. package/dist/cjs/utilities/segmentation/utilities.js +2 -2
  110. package/dist/cjs/utilities/segmentation/utilities.js.map +1 -1
  111. package/dist/cjs/utilities/stackPrefetch/stackContextPrefetch.js +2 -5
  112. package/dist/cjs/utilities/stackPrefetch/stackContextPrefetch.js.map +1 -1
  113. package/dist/cjs/utilities/stackPrefetch/stackPrefetchUtils.js +2 -1
  114. package/dist/cjs/utilities/stackPrefetch/stackPrefetchUtils.js.map +1 -1
  115. package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js +18 -5
  116. package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js.map +1 -1
  117. package/dist/esm/index.js +2 -2
  118. package/dist/esm/index.js.map +1 -1
  119. package/dist/esm/stateManagement/segmentation/activeSegmentation.js +10 -2
  120. package/dist/esm/stateManagement/segmentation/activeSegmentation.js.map +1 -1
  121. package/dist/esm/stateManagement/segmentation/convertStackToVolumeSegmentation.js +47 -0
  122. package/dist/esm/stateManagement/segmentation/convertStackToVolumeSegmentation.js.map +1 -0
  123. package/dist/esm/stateManagement/segmentation/convertVolumeToStackSegmentation.js +72 -0
  124. package/dist/esm/stateManagement/segmentation/convertVolumeToStackSegmentation.js.map +1 -0
  125. package/dist/esm/stateManagement/segmentation/index.js +3 -1
  126. package/dist/esm/stateManagement/segmentation/index.js.map +1 -1
  127. package/dist/esm/stateManagement/segmentation/segmentIndex.js +6 -1
  128. package/dist/esm/stateManagement/segmentation/segmentIndex.js.map +1 -1
  129. package/dist/esm/stateManagement/segmentation/segmentationState.js +7 -1
  130. package/dist/esm/stateManagement/segmentation/segmentationState.js.map +1 -1
  131. package/dist/esm/store/ToolGroupManager/ToolGroup.js +3 -0
  132. package/dist/esm/store/ToolGroupManager/ToolGroup.js.map +1 -1
  133. package/dist/esm/tools/annotation/AngleTool.js +1 -1
  134. package/dist/esm/tools/annotation/AngleTool.js.map +1 -1
  135. package/dist/esm/tools/annotation/BidirectionalTool.js +1 -1
  136. package/dist/esm/tools/annotation/BidirectionalTool.js.map +1 -1
  137. package/dist/esm/tools/annotation/CircleROITool.js +1 -1
  138. package/dist/esm/tools/annotation/CircleROITool.js.map +1 -1
  139. package/dist/esm/tools/annotation/EllipticalROITool.js +1 -1
  140. package/dist/esm/tools/annotation/EllipticalROITool.js.map +1 -1
  141. package/dist/esm/tools/annotation/LengthTool.js +1 -1
  142. package/dist/esm/tools/annotation/LengthTool.js.map +1 -1
  143. package/dist/esm/tools/annotation/PlanarFreehandROITool.js +1 -1
  144. package/dist/esm/tools/annotation/PlanarFreehandROITool.js.map +1 -1
  145. package/dist/esm/tools/annotation/ProbeTool.js +1 -1
  146. package/dist/esm/tools/annotation/ProbeTool.js.map +1 -1
  147. package/dist/esm/tools/annotation/RectangleROITool.js +1 -1
  148. package/dist/esm/tools/annotation/RectangleROITool.js.map +1 -1
  149. package/dist/esm/tools/displayTools/Labelmap/labelmapConfig.js +2 -0
  150. package/dist/esm/tools/displayTools/Labelmap/labelmapConfig.js.map +1 -1
  151. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +21 -5
  152. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js.map +1 -1
  153. package/dist/esm/tools/index.js +2 -1
  154. package/dist/esm/tools/index.js.map +1 -1
  155. package/dist/esm/tools/segmentation/BrushTool.js +39 -19
  156. package/dist/esm/tools/segmentation/BrushTool.js.map +1 -1
  157. package/dist/esm/tools/segmentation/CircleScissorsTool.js +5 -0
  158. package/dist/esm/tools/segmentation/CircleScissorsTool.js.map +1 -1
  159. package/dist/esm/tools/segmentation/RectangleScissorsTool.js +5 -0
  160. package/dist/esm/tools/segmentation/RectangleScissorsTool.js.map +1 -1
  161. package/dist/esm/tools/segmentation/SegmentSelectTool.js +100 -0
  162. package/dist/esm/tools/segmentation/SegmentSelectTool.js.map +1 -0
  163. package/dist/esm/tools/segmentation/SphereScissorsTool.js +5 -0
  164. package/dist/esm/tools/segmentation/SphereScissorsTool.js.map +1 -1
  165. package/dist/esm/tools/segmentation/strategies/BrushStrategy.js.map +1 -1
  166. package/dist/esm/tools/segmentation/strategies/fillCircle.js +12 -15
  167. package/dist/esm/tools/segmentation/strategies/fillCircle.js.map +1 -1
  168. package/dist/esm/tools/segmentation/strategies/fillRectangle.js +32 -5
  169. package/dist/esm/tools/segmentation/strategies/fillRectangle.js.map +1 -1
  170. package/dist/esm/tools/segmentation/strategies/fillSphere.js +3 -20
  171. package/dist/esm/tools/segmentation/strategies/fillSphere.js.map +1 -1
  172. package/dist/esm/tools/segmentation/strategies/utils/isWithinThreshold.js.map +1 -1
  173. package/dist/esm/utilities/boundingBox/getBoundingBoxAroundShape.js +40 -23
  174. package/dist/esm/utilities/boundingBox/getBoundingBoxAroundShape.js.map +1 -1
  175. package/dist/esm/utilities/boundingBox/index.js +2 -2
  176. package/dist/esm/utilities/boundingBox/index.js.map +1 -1
  177. package/dist/esm/utilities/getSphereBoundsInfo.js +42 -0
  178. package/dist/esm/utilities/getSphereBoundsInfo.js.map +1 -0
  179. package/dist/esm/utilities/index.js +4 -3
  180. package/dist/esm/utilities/index.js.map +1 -1
  181. package/dist/esm/utilities/pointInShapeCallback.js +1 -1
  182. package/dist/esm/utilities/pointInShapeCallback.js.map +1 -1
  183. package/dist/esm/utilities/rectangleROITool/getBoundsIJKFromRectangleAnnotations.js +2 -2
  184. package/dist/esm/utilities/rectangleROITool/getBoundsIJKFromRectangleAnnotations.js.map +1 -1
  185. package/dist/esm/utilities/rectangleROITool/index.js +2 -1
  186. package/dist/esm/utilities/rectangleROITool/index.js.map +1 -1
  187. package/dist/esm/utilities/rectangleROITool/isAxisAlignedRectangle.js +23 -0
  188. package/dist/esm/utilities/rectangleROITool/isAxisAlignedRectangle.js.map +1 -0
  189. package/dist/esm/utilities/segmentation/createImageIdReferenceMap.js +8 -0
  190. package/dist/esm/utilities/segmentation/createImageIdReferenceMap.js.map +1 -0
  191. package/dist/esm/utilities/segmentation/createLabelmapVolumeForViewport.js +1 -1
  192. package/dist/esm/utilities/segmentation/createLabelmapVolumeForViewport.js.map +1 -1
  193. package/dist/esm/utilities/segmentation/index.js +3 -1
  194. package/dist/esm/utilities/segmentation/index.js.map +1 -1
  195. package/dist/esm/utilities/segmentation/invalidateBrushCursor.js +24 -0
  196. package/dist/esm/utilities/segmentation/invalidateBrushCursor.js.map +1 -0
  197. package/dist/esm/utilities/segmentation/thresholdSegmentationByRange.js.map +1 -1
  198. package/dist/esm/utilities/segmentation/triggerSegmentationRender.js +8 -4
  199. package/dist/esm/utilities/segmentation/triggerSegmentationRender.js.map +1 -1
  200. package/dist/esm/utilities/segmentation/utilities.js +2 -2
  201. package/dist/esm/utilities/segmentation/utilities.js.map +1 -1
  202. package/dist/esm/utilities/stackPrefetch/stackContextPrefetch.js +1 -1
  203. package/dist/esm/utilities/stackPrefetch/stackContextPrefetch.js.map +1 -1
  204. package/dist/esm/utilities/stackPrefetch/stackPrefetchUtils.js +2 -1
  205. package/dist/esm/utilities/stackPrefetch/stackPrefetchUtils.js.map +1 -1
  206. package/dist/types/eventListeners/segmentation/imageChangeEventListener.d.ts.map +1 -1
  207. package/dist/types/index.d.ts +2 -2
  208. package/dist/types/index.d.ts.map +1 -1
  209. package/dist/types/stateManagement/segmentation/activeSegmentation.d.ts +2 -1
  210. package/dist/types/stateManagement/segmentation/activeSegmentation.d.ts.map +1 -1
  211. package/dist/types/stateManagement/segmentation/convertStackToVolumeSegmentation.d.ts +11 -0
  212. package/dist/types/stateManagement/segmentation/convertStackToVolumeSegmentation.d.ts.map +1 -0
  213. package/dist/types/stateManagement/segmentation/convertVolumeToStackSegmentation.d.ts +9 -0
  214. package/dist/types/stateManagement/segmentation/convertVolumeToStackSegmentation.d.ts.map +1 -0
  215. package/dist/types/stateManagement/segmentation/index.d.ts +3 -1
  216. package/dist/types/stateManagement/segmentation/index.d.ts.map +1 -1
  217. package/dist/types/stateManagement/segmentation/segmentIndex.d.ts.map +1 -1
  218. package/dist/types/stateManagement/segmentation/segmentationState.d.ts +2 -1
  219. package/dist/types/stateManagement/segmentation/segmentationState.d.ts.map +1 -1
  220. package/dist/types/store/ToolGroupManager/ToolGroup.d.ts.map +1 -1
  221. package/dist/types/tools/annotation/AngleTool.d.ts.map +1 -1
  222. package/dist/types/tools/annotation/PlanarFreehandROITool.d.ts.map +1 -1
  223. package/dist/types/tools/displayTools/Labelmap/labelmapConfig.d.ts.map +1 -1
  224. package/dist/types/tools/displayTools/Labelmap/labelmapDisplay.d.ts.map +1 -1
  225. package/dist/types/tools/index.d.ts +2 -1
  226. package/dist/types/tools/index.d.ts.map +1 -1
  227. package/dist/types/tools/segmentation/BrushTool.d.ts +1 -0
  228. package/dist/types/tools/segmentation/BrushTool.d.ts.map +1 -1
  229. package/dist/types/tools/segmentation/CircleScissorsTool.d.ts.map +1 -1
  230. package/dist/types/tools/segmentation/RectangleScissorsTool.d.ts.map +1 -1
  231. package/dist/types/tools/segmentation/SegmentSelectTool.d.ts +16 -0
  232. package/dist/types/tools/segmentation/SegmentSelectTool.d.ts.map +1 -0
  233. package/dist/types/tools/segmentation/SphereScissorsTool.d.ts.map +1 -1
  234. package/dist/types/tools/segmentation/strategies/BrushStrategy.d.ts +2 -1
  235. package/dist/types/tools/segmentation/strategies/BrushStrategy.d.ts.map +1 -1
  236. package/dist/types/tools/segmentation/strategies/fillCircle.d.ts.map +1 -1
  237. package/dist/types/tools/segmentation/strategies/fillRectangle.d.ts.map +1 -1
  238. package/dist/types/tools/segmentation/strategies/fillSphere.d.ts.map +1 -1
  239. package/dist/types/tools/segmentation/strategies/utils/isWithinThreshold.d.ts +1 -1
  240. package/dist/types/tools/segmentation/strategies/utils/isWithinThreshold.d.ts.map +1 -1
  241. package/dist/types/types/LabelmapTypes.d.ts +1 -0
  242. package/dist/types/types/LabelmapTypes.d.ts.map +1 -1
  243. package/dist/types/utilities/boundingBox/getBoundingBoxAroundShape.d.ts +4 -2
  244. package/dist/types/utilities/boundingBox/getBoundingBoxAroundShape.d.ts.map +1 -1
  245. package/dist/types/utilities/boundingBox/index.d.ts +2 -2
  246. package/dist/types/utilities/boundingBox/index.d.ts.map +1 -1
  247. package/dist/types/utilities/getSphereBoundsInfo.d.ts +12 -0
  248. package/dist/types/utilities/getSphereBoundsInfo.d.ts.map +1 -0
  249. package/dist/types/utilities/index.d.ts +4 -3
  250. package/dist/types/utilities/index.d.ts.map +1 -1
  251. package/dist/types/utilities/pointInShapeCallback.d.ts +1 -1
  252. package/dist/types/utilities/rectangleROITool/getBoundsIJKFromRectangleAnnotations.d.ts.map +1 -1
  253. package/dist/types/utilities/rectangleROITool/index.d.ts +2 -1
  254. package/dist/types/utilities/rectangleROITool/index.d.ts.map +1 -1
  255. package/dist/types/utilities/rectangleROITool/isAxisAlignedRectangle.d.ts +3 -0
  256. package/dist/types/utilities/rectangleROITool/isAxisAlignedRectangle.d.ts.map +1 -0
  257. package/dist/types/utilities/segmentation/createImageIdReferenceMap.d.ts +3 -0
  258. package/dist/types/utilities/segmentation/createImageIdReferenceMap.d.ts.map +1 -0
  259. package/dist/types/utilities/segmentation/index.d.ts +3 -1
  260. package/dist/types/utilities/segmentation/index.d.ts.map +1 -1
  261. package/dist/types/utilities/segmentation/invalidateBrushCursor.d.ts +2 -0
  262. package/dist/types/utilities/segmentation/invalidateBrushCursor.d.ts.map +1 -0
  263. package/dist/types/utilities/segmentation/triggerSegmentationRender.d.ts.map +1 -1
  264. package/dist/types/utilities/segmentation/utilities.d.ts +1 -1
  265. package/dist/types/utilities/segmentation/utilities.d.ts.map +1 -1
  266. package/dist/types/utilities/stackPrefetch/stackPrefetchUtils.d.ts.map +1 -1
  267. package/dist/umd/index.js +1 -1
  268. package/dist/umd/index.js.map +1 -1
  269. package/package.json +4 -4
  270. package/src/eventListeners/segmentation/imageChangeEventListener.ts +42 -6
  271. package/src/index.ts +2 -0
  272. package/src/stateManagement/segmentation/activeSegmentation.ts +24 -1
  273. package/src/stateManagement/segmentation/convertStackToVolumeSegmentation.ts +98 -0
  274. package/src/stateManagement/segmentation/convertVolumeToStackSegmentation.ts +153 -0
  275. package/src/stateManagement/segmentation/index.ts +4 -0
  276. package/src/stateManagement/segmentation/segmentIndex.ts +15 -2
  277. package/src/stateManagement/segmentation/segmentationState.ts +17 -0
  278. package/src/store/ToolGroupManager/ToolGroup.ts +4 -0
  279. package/src/tools/annotation/AngleTool.ts +1 -2
  280. package/src/tools/annotation/BidirectionalTool.ts +1 -1
  281. package/src/tools/annotation/CircleROITool.ts +1 -1
  282. package/src/tools/annotation/EllipticalROITool.ts +1 -1
  283. package/src/tools/annotation/LengthTool.ts +1 -1
  284. package/src/tools/annotation/PlanarFreehandROITool.ts +1 -2
  285. package/src/tools/annotation/ProbeTool.ts +1 -1
  286. package/src/tools/annotation/RectangleROITool.ts +1 -1
  287. package/src/tools/displayTools/Labelmap/labelmapConfig.ts +2 -0
  288. package/src/tools/displayTools/Labelmap/labelmapDisplay.ts +39 -14
  289. package/src/tools/index.ts +2 -0
  290. package/src/tools/segmentation/BrushTool.ts +64 -33
  291. package/src/tools/segmentation/CircleScissorsTool.ts +9 -0
  292. package/src/tools/segmentation/RectangleScissorsTool.ts +10 -1
  293. package/src/tools/segmentation/SegmentSelectTool.ts +182 -0
  294. package/src/tools/segmentation/SphereScissorsTool.ts +9 -0
  295. package/src/tools/segmentation/strategies/BrushStrategy.ts +2 -1
  296. package/src/tools/segmentation/strategies/fillCircle.ts +19 -21
  297. package/src/tools/segmentation/strategies/fillRectangle.ts +51 -6
  298. package/src/tools/segmentation/strategies/fillSphere.ts +10 -38
  299. package/src/tools/segmentation/strategies/utils/isWithinThreshold.ts +1 -1
  300. package/src/types/LabelmapTypes.ts +7 -7
  301. package/src/utilities/boundingBox/getBoundingBoxAroundShape.ts +88 -37
  302. package/src/utilities/boundingBox/index.ts +11 -2
  303. package/src/utilities/{pointInSurroundingSphereCallback.ts → getSphereBoundsInfo.ts} +39 -82
  304. package/src/utilities/index.ts +6 -3
  305. package/src/utilities/math/ellipse/pointInEllipse.ts +1 -1
  306. package/src/utilities/pointInShapeCallback.ts +2 -2
  307. package/src/utilities/rectangleROITool/getBoundsIJKFromRectangleAnnotations.ts +5 -2
  308. package/src/utilities/rectangleROITool/index.ts +2 -1
  309. package/src/utilities/rectangleROITool/isAxisAlignedRectangle.ts +53 -0
  310. package/src/utilities/segmentation/createImageIdReferenceMap.ts +23 -0
  311. package/src/utilities/segmentation/createLabelmapVolumeForViewport.ts +1 -1
  312. package/src/utilities/segmentation/index.ts +4 -0
  313. package/src/utilities/segmentation/invalidateBrushCursor.ts +48 -0
  314. package/src/utilities/segmentation/thresholdSegmentationByRange.ts +2 -2
  315. package/src/utilities/segmentation/triggerSegmentationRender.ts +15 -10
  316. package/src/utilities/segmentation/utilities.ts +5 -2
  317. package/src/utilities/stackPrefetch/stackContextPrefetch.ts +1 -1
  318. package/src/utilities/stackPrefetch/stackPrefetchUtils.ts +5 -1
  319. package/dist/cjs/utilities/pointInSurroundingSphereCallback.d.ts +0 -4
  320. package/dist/cjs/utilities/pointInSurroundingSphereCallback.js +0 -70
  321. package/dist/cjs/utilities/pointInSurroundingSphereCallback.js.map +0 -1
  322. package/dist/cjs/utilities/roundNumber.d.ts +0 -2
  323. package/dist/cjs/utilities/roundNumber.js +0 -30
  324. package/dist/cjs/utilities/roundNumber.js.map +0 -1
  325. package/dist/esm/utilities/pointInSurroundingSphereCallback.js +0 -64
  326. package/dist/esm/utilities/pointInSurroundingSphereCallback.js.map +0 -1
  327. package/dist/esm/utilities/roundNumber.js +0 -28
  328. package/dist/esm/utilities/roundNumber.js.map +0 -1
  329. package/dist/types/utilities/pointInSurroundingSphereCallback.d.ts +0 -5
  330. package/dist/types/utilities/pointInSurroundingSphereCallback.d.ts.map +0 -1
  331. package/dist/types/utilities/roundNumber.d.ts +0 -3
  332. package/dist/types/utilities/roundNumber.d.ts.map +0 -1
  333. package/src/utilities/roundNumber.ts +0 -44
@@ -0,0 +1,53 @@
1
+ import { vec3 } from 'gl-matrix';
2
+ import { utilities as csUtils } from '@cornerstonejs/core';
3
+
4
+ const { isEqual } = csUtils;
5
+
6
+ const iAxis = vec3.fromValues(1, 0, 0);
7
+ const jAxis = vec3.fromValues(0, 1, 0);
8
+ const kAxis = vec3.fromValues(0, 0, 1);
9
+
10
+ const axisList = [iAxis, jAxis, kAxis];
11
+
12
+ /**
13
+ * Determines whether a given rectangle in a 3D space (defined by its corner
14
+ * points in IJK coordinates) is aligned with the IJK axes.
15
+ * @param rectangleCornersIJK - The corner points of the rectangle in IJK coordinates
16
+ * @returns True if the rectangle is aligned with the IJK axes, false otherwise
17
+ */
18
+ function isAxisAlignedRectangle(rectangleCornersIJK) {
19
+ const rectangleVec1 = vec3.subtract(
20
+ vec3.create(),
21
+ rectangleCornersIJK[0],
22
+ rectangleCornersIJK[1]
23
+ );
24
+
25
+ const rectangleVec2 = vec3.subtract(
26
+ vec3.create(),
27
+ rectangleCornersIJK[0],
28
+ rectangleCornersIJK[2]
29
+ );
30
+
31
+ // Calculate the angles with IJK axes for both vectors
32
+ const anglesVec1 = calculateAnglesWithAxes(rectangleVec1, axisList);
33
+ const anglesVec2 = calculateAnglesWithAxes(rectangleVec2, axisList);
34
+
35
+ // Check if all angles are aligned (0, 90, 180, or 270 degrees)
36
+ // we could do csUtils.isEqual(angle % 90, 0) but this is more explicit for reading
37
+ const isAligned = [...anglesVec1, ...anglesVec2].every(
38
+ (angle) =>
39
+ isEqual(angle, 0) ||
40
+ isEqual(angle, 90) ||
41
+ isEqual(angle, 180) ||
42
+ isEqual(angle, 270)
43
+ );
44
+
45
+ return isAligned;
46
+ }
47
+
48
+ // Function to calculate angle with IJK axes
49
+ function calculateAnglesWithAxes(vec, axes) {
50
+ return axes.map((axis) => (vec3.angle(vec, axis) * 180) / Math.PI);
51
+ }
52
+
53
+ export { isAxisAlignedRectangle };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Creates a map that associates each imageId with a set of segmentation imageIds.
3
+ * Note that this function assumes that the imageIds and segmentationImageIds arrays
4
+ * are the same length and same order.
5
+ *
6
+ * @param imageIdsArray - An array of imageIds.
7
+ * @param segmentationImageIds - An array of segmentation imageIds.
8
+ * @returns A map that maps each imageId to a set of segmentation imageIds.
9
+ */
10
+ function createImageIdReferenceMap(
11
+ imageIdsArray: string[],
12
+ segmentationImageIds: string[]
13
+ ): Map<string, string> {
14
+ const imageIdReferenceMap = new Map<string, string>(
15
+ imageIdsArray.map((imageId, index) => {
16
+ return [imageId, segmentationImageIds[index]];
17
+ })
18
+ );
19
+
20
+ return imageIdReferenceMap;
21
+ }
22
+
23
+ export { createImageIdReferenceMap };
@@ -65,7 +65,7 @@ export default async function createLabelmapVolumeForViewport(input: {
65
65
  } else {
66
66
  // create a labelmap from a reference volume
67
67
  const { uid: volumeId } = viewport.getDefaultActor();
68
- await volumeLoader.createAndCacheDerivedVolume(volumeId, {
68
+ await volumeLoader.createAndCacheDerivedSegmentationVolume(volumeId, {
69
69
  volumeId: segmentationId,
70
70
  });
71
71
  }
@@ -15,9 +15,11 @@ import {
15
15
  setBrushThresholdForToolGroup,
16
16
  } from './brushThresholdForToolGroup';
17
17
  import thresholdSegmentationByRange from './thresholdSegmentationByRange';
18
+ import { createImageIdReferenceMap } from './createImageIdReferenceMap';
18
19
  import contourAndFindLargestBidirectional from './contourAndFindLargestBidirectional';
19
20
  import createBidirectionalToolData from './createBidirectionalToolData';
20
21
  import segmentContourAction from './segmentContourAction';
22
+ import { invalidateBrushCursor } from './invalidateBrushCursor';
21
23
 
22
24
  export {
23
25
  thresholdVolumeByRange,
@@ -33,7 +35,9 @@ export {
33
35
  getBrushThresholdForToolGroup,
34
36
  setBrushThresholdForToolGroup,
35
37
  thresholdSegmentationByRange,
38
+ createImageIdReferenceMap,
36
39
  contourAndFindLargestBidirectional,
37
40
  createBidirectionalToolData,
38
41
  segmentContourAction,
42
+ invalidateBrushCursor,
39
43
  };
@@ -0,0 +1,48 @@
1
+ import { getToolGroup } from '../../store/ToolGroupManager';
2
+ import BrushTool from '../../tools/segmentation/BrushTool';
3
+ import triggerAnnotationRenderForViewportIds from '../triggerAnnotationRenderForViewportIds';
4
+ import { getRenderingEngine } from '@cornerstonejs/core';
5
+ import getBrushToolInstances from './utilities';
6
+
7
+ /**
8
+ * Invalidates the brush cursor for a specific tool group.
9
+ * This function triggers the update of the brush being rendered.
10
+ * It also triggers an annotation render for any viewports on the tool group.
11
+ *
12
+ * @param toolGroupId - The ID of the tool group.
13
+ */
14
+ export function invalidateBrushCursor(toolGroupId: string): void {
15
+ const toolGroup = getToolGroup(toolGroupId);
16
+
17
+ if (toolGroup === undefined) {
18
+ return;
19
+ }
20
+
21
+ const brushBasedToolInstances = getBrushToolInstances(toolGroupId);
22
+
23
+ brushBasedToolInstances.forEach((tool: BrushTool) => {
24
+ // Invalidate the brush being rendered so it can update.
25
+ tool.invalidateBrushCursor();
26
+ });
27
+
28
+ // Trigger an annotation render for any viewports on the toolgroup
29
+ const viewportsInfo = toolGroup.getViewportsInfo();
30
+
31
+ const viewportsInfoArray = Object.keys(viewportsInfo).map(
32
+ (key) => viewportsInfo[key]
33
+ );
34
+
35
+ if (!viewportsInfoArray.length) {
36
+ return;
37
+ }
38
+
39
+ const { renderingEngineId } = viewportsInfoArray[0];
40
+
41
+ // Use helper to get array of viewportIds, or we just end up doing this mapping
42
+ // ourselves here.
43
+ const viewportIds = toolGroup.getViewportIds();
44
+
45
+ const renderingEngine = getRenderingEngine(renderingEngineId);
46
+
47
+ triggerAnnotationRenderForViewportIds(renderingEngine, viewportIds);
48
+ }
@@ -64,7 +64,7 @@ function thresholdSegmentationByRange(
64
64
  }
65
65
 
66
66
  function _handleDifferentSizeVolume(
67
- scalarData: Types.VolumeScalarData,
67
+ scalarData: Types.PixelDataTypedArray,
68
68
  segmentationIndex: number,
69
69
  volumeInfo: any,
70
70
  volumeInfoList: any,
@@ -112,7 +112,7 @@ function _handleDifferentSizeVolume(
112
112
  }
113
113
 
114
114
  function _handleSameSizeVolume(
115
- scalarData: Types.VolumeScalarData,
115
+ scalarData: Types.PixelDataTypedArray,
116
116
  segmentationIndex: number,
117
117
  volumeInfo: any
118
118
  ) {
@@ -113,18 +113,23 @@ class SegmentationRenderingEngine {
113
113
  }
114
114
 
115
115
  const { viewportsInfo } = toolGroup;
116
- const viewports = [];
117
116
 
118
- viewportsInfo.forEach(({ viewportId, renderingEngineId }) => {
119
- const renderingEngine = getRenderingEngine(renderingEngineId);
117
+ const viewports = viewportsInfo
118
+ .map(({ viewportId, renderingEngineId }) => {
119
+ const renderingEngine = getRenderingEngine(renderingEngineId);
120
120
 
121
- if (!renderingEngine) {
122
- console.warn('rendering Engine has been destroyed');
123
- return;
124
- }
121
+ if (!renderingEngine) {
122
+ console.warn('rendering Engine has been destroyed');
123
+ return;
124
+ }
125
125
 
126
- viewports.push(renderingEngine.getViewport(viewportId));
127
- });
126
+ const viewport = renderingEngine.getViewport(viewportId);
127
+
128
+ if (viewport) {
129
+ return viewport;
130
+ }
131
+ })
132
+ .filter(Boolean);
128
133
 
129
134
  const segmentationDisplayToolInstance = toolGroup.getToolInstance(
130
135
  SegmentationDisplayTool.toolName
@@ -173,7 +178,7 @@ class SegmentationRenderingEngine {
173
178
  viewports.forEach(({ element }) => {
174
179
  element.addEventListener(
175
180
  Enums.Events.IMAGE_RENDERED,
176
- onSegmentationRender
181
+ onSegmentationRender as EventListener
177
182
  );
178
183
  });
179
184
 
@@ -2,7 +2,7 @@ import { Types } from '@cornerstonejs/core';
2
2
  import { utilities as csUtils } from '@cornerstonejs/core';
3
3
  import { getToolGroup } from '../../store/ToolGroupManager';
4
4
  import BrushTool from '../../tools/segmentation/BrushTool';
5
- import getBoundingBoxAroundShape from '../boundingBox/getBoundingBoxAroundShape';
5
+ import { getBoundingBoxAroundShapeIJK } from '../boundingBox/getBoundingBoxAroundShape';
6
6
 
7
7
  export type ThresholdInformation = {
8
8
  volume: Types.IImageVolume;
@@ -67,7 +67,10 @@ export function getVoxelOverlap(
67
67
  const voxelCornersIJK = voxelCornersWorld.map(
68
68
  (world) => csUtils.transformWorldToIndex(imageData, world) as Types.Point3
69
69
  );
70
- const overlapBounds = getBoundingBoxAroundShape(voxelCornersIJK, dimensions);
70
+ const overlapBounds = getBoundingBoxAroundShapeIJK(
71
+ voxelCornersIJK,
72
+ dimensions
73
+ );
71
74
 
72
75
  return overlapBounds;
73
76
  }
@@ -14,7 +14,7 @@ import {
14
14
  clearFromImageIds,
15
15
  getPromiseRemovedHandler,
16
16
  } from './stackPrefetchUtils';
17
- import roundNumber from '../roundNumber';
17
+ import { roundNumber } from '../../utilities';
18
18
 
19
19
  let configuration = {
20
20
  maxImagesToPrefetch: Infinity,
@@ -52,9 +52,13 @@ export function getStackData(element) {
52
52
  const { viewport } = enabledElement;
53
53
 
54
54
  if (!(viewport instanceof StackViewport)) {
55
- throw new Error(
55
+ // we shouldn't throw error here, since the viewport might have
56
+ // changed from stack to volume during prefetch
57
+ console.warn(
56
58
  'stackPrefetch: element must be a StackViewport, VolumeViewport stackPrefetch not yet implemented'
57
59
  );
60
+
61
+ return null;
58
62
  }
59
63
 
60
64
  return {
@@ -1,4 +0,0 @@
1
- import type { Types } from '@cornerstonejs/core';
2
- import type { vtkImageData } from '@kitware/vtk.js/Common/DataModel/ImageData';
3
- import { PointInShapeCallback } from './pointInShapeCallback';
4
- export default function pointInSurroundingSphereCallback(imageData: vtkImageData, circlePoints: [Types.Point3, Types.Point3], callback: PointInShapeCallback, viewport?: Types.IVolumeViewport): void;
@@ -1,70 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const core_1 = require("@cornerstonejs/core");
7
- const gl_matrix_1 = require("gl-matrix");
8
- const sphere_1 = require("./math/sphere");
9
- const pointInShapeCallback_1 = __importDefault(require("./pointInShapeCallback"));
10
- const boundingBox_1 = require("./boundingBox");
11
- const { transformWorldToIndex } = core_1.utilities;
12
- function pointInSurroundingSphereCallback(imageData, circlePoints, callback, viewport) {
13
- const { boundsIJK, centerWorld, radiusWorld } = _getBounds(circlePoints, imageData, viewport);
14
- const sphereObj = {
15
- center: centerWorld,
16
- radius: radiusWorld,
17
- };
18
- (0, pointInShapeCallback_1.default)(imageData, (pointLPS) => (0, sphere_1.pointInSphere)(sphereObj, pointLPS), callback, boundsIJK);
19
- }
20
- exports.default = pointInSurroundingSphereCallback;
21
- function _getBounds(circlePoints, imageData, viewport) {
22
- const [bottom, top] = circlePoints;
23
- const centerWorld = gl_matrix_1.vec3.fromValues((bottom[0] + top[0]) / 2, (bottom[1] + top[1]) / 2, (bottom[2] + top[2]) / 2);
24
- const radiusWorld = gl_matrix_1.vec3.distance(bottom, top) / 2;
25
- let boundsIJK;
26
- if (!viewport) {
27
- const centerIJK = transformWorldToIndex(imageData, centerWorld);
28
- const spacings = imageData.getSpacing();
29
- const minSpacing = Math.min(...spacings);
30
- const maxRadiusIJK = Math.ceil(radiusWorld / minSpacing);
31
- boundsIJK = [
32
- [centerIJK[0] - maxRadiusIJK, centerIJK[0] + maxRadiusIJK],
33
- [centerIJK[1] - maxRadiusIJK, centerIJK[1] + maxRadiusIJK],
34
- [centerIJK[2] - maxRadiusIJK, centerIJK[2] + maxRadiusIJK],
35
- ];
36
- return {
37
- boundsIJK,
38
- centerWorld: centerWorld,
39
- radiusWorld,
40
- };
41
- }
42
- boundsIJK = _computeBoundsIJKWithCamera(imageData, viewport, circlePoints, centerWorld, radiusWorld);
43
- return {
44
- boundsIJK,
45
- centerWorld: centerWorld,
46
- radiusWorld,
47
- };
48
- }
49
- function _computeBoundsIJKWithCamera(imageData, viewport, circlePoints, centerWorld, radiusWorld) {
50
- const [bottom, top] = circlePoints;
51
- const dimensions = imageData.getDimensions();
52
- const camera = viewport.getCamera();
53
- const viewUp = gl_matrix_1.vec3.fromValues(camera.viewUp[0], camera.viewUp[1], camera.viewUp[2]);
54
- const viewPlaneNormal = gl_matrix_1.vec3.fromValues(camera.viewPlaneNormal[0], camera.viewPlaneNormal[1], camera.viewPlaneNormal[2]);
55
- const viewRight = gl_matrix_1.vec3.create();
56
- gl_matrix_1.vec3.cross(viewRight, viewUp, viewPlaneNormal);
57
- const topLeftWorld = gl_matrix_1.vec3.create();
58
- const bottomRightWorld = gl_matrix_1.vec3.create();
59
- gl_matrix_1.vec3.scaleAndAdd(topLeftWorld, top, viewPlaneNormal, radiusWorld);
60
- gl_matrix_1.vec3.scaleAndAdd(bottomRightWorld, bottom, viewPlaneNormal, -radiusWorld);
61
- gl_matrix_1.vec3.scaleAndAdd(topLeftWorld, topLeftWorld, viewRight, -radiusWorld);
62
- gl_matrix_1.vec3.scaleAndAdd(bottomRightWorld, bottomRightWorld, viewRight, radiusWorld);
63
- const sphereCornersIJK = [
64
- transformWorldToIndex(imageData, topLeftWorld),
65
- (transformWorldToIndex(imageData, bottomRightWorld)),
66
- ];
67
- const boundsIJK = (0, boundingBox_1.getBoundingBoxAroundShape)(sphereCornersIJK, dimensions);
68
- return boundsIJK;
69
- }
70
- //# sourceMappingURL=pointInSurroundingSphereCallback.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pointInSurroundingSphereCallback.js","sourceRoot":"","sources":["../../../src/utilities/pointInSurroundingSphereCallback.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- declare function roundNumber(value: string | number | (string | number)[], precision?: number): string;
2
- export default roundNumber;
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- function roundNumber(value, precision = 2) {
4
- if (Array.isArray(value)) {
5
- return value.map((v) => roundNumber(v, precision)).join(', ');
6
- }
7
- if (value === undefined || value === null || value === '') {
8
- return 'NaN';
9
- }
10
- value = Number(value);
11
- if (value < 0.0001) {
12
- return `${value}`;
13
- }
14
- const fixedPrecision = value >= 100
15
- ? precision - 2
16
- : value >= 10
17
- ? precision - 1
18
- : value >= 1
19
- ? precision
20
- : value >= 0.1
21
- ? precision + 1
22
- : value >= 0.01
23
- ? precision + 2
24
- : value >= 0.001
25
- ? precision + 3
26
- : precision + 4;
27
- return value.toFixed(fixedPrecision);
28
- }
29
- exports.default = roundNumber;
30
- //# sourceMappingURL=roundNumber.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"roundNumber.js","sourceRoot":"","sources":["../../../src/utilities/roundNumber.ts"],"names":[],"mappings":";;AAYA,SAAS,WAAW,CAClB,KAA4C,EAC5C,SAAS,GAAG,CAAC;IAEb,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC/D;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;QACzD,OAAO,KAAK,CAAC;KACd;IACD,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,IAAI,KAAK,GAAG,MAAM,EAAE;QAClB,OAAO,GAAG,KAAK,EAAE,CAAC;KACnB;IACD,MAAM,cAAc,GAClB,KAAK,IAAI,GAAG;QACV,CAAC,CAAC,SAAS,GAAG,CAAC;QACf,CAAC,CAAC,KAAK,IAAI,EAAE;YACb,CAAC,CAAC,SAAS,GAAG,CAAC;YACf,CAAC,CAAC,KAAK,IAAI,CAAC;gBACZ,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,KAAK,IAAI,GAAG;oBACd,CAAC,CAAC,SAAS,GAAG,CAAC;oBACf,CAAC,CAAC,KAAK,IAAI,IAAI;wBACf,CAAC,CAAC,SAAS,GAAG,CAAC;wBACf,CAAC,CAAC,KAAK,IAAI,KAAK;4BAChB,CAAC,CAAC,SAAS,GAAG,CAAC;4BACf,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;IACpB,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AACvC,CAAC;AAED,kBAAe,WAAW,CAAC"}
@@ -1,64 +0,0 @@
1
- import { utilities as csUtils } from '@cornerstonejs/core';
2
- import { vec3 } from 'gl-matrix';
3
- import { pointInSphere } from './math/sphere';
4
- import pointInShapeCallback from './pointInShapeCallback';
5
- import { getBoundingBoxAroundShape } from './boundingBox';
6
- const { transformWorldToIndex } = csUtils;
7
- export default function pointInSurroundingSphereCallback(imageData, circlePoints, callback, viewport) {
8
- const { boundsIJK, centerWorld, radiusWorld } = _getBounds(circlePoints, imageData, viewport);
9
- const sphereObj = {
10
- center: centerWorld,
11
- radius: radiusWorld,
12
- };
13
- pointInShapeCallback(imageData, (pointLPS) => pointInSphere(sphereObj, pointLPS), callback, boundsIJK);
14
- }
15
- function _getBounds(circlePoints, imageData, viewport) {
16
- const [bottom, top] = circlePoints;
17
- const centerWorld = vec3.fromValues((bottom[0] + top[0]) / 2, (bottom[1] + top[1]) / 2, (bottom[2] + top[2]) / 2);
18
- const radiusWorld = vec3.distance(bottom, top) / 2;
19
- let boundsIJK;
20
- if (!viewport) {
21
- const centerIJK = transformWorldToIndex(imageData, centerWorld);
22
- const spacings = imageData.getSpacing();
23
- const minSpacing = Math.min(...spacings);
24
- const maxRadiusIJK = Math.ceil(radiusWorld / minSpacing);
25
- boundsIJK = [
26
- [centerIJK[0] - maxRadiusIJK, centerIJK[0] + maxRadiusIJK],
27
- [centerIJK[1] - maxRadiusIJK, centerIJK[1] + maxRadiusIJK],
28
- [centerIJK[2] - maxRadiusIJK, centerIJK[2] + maxRadiusIJK],
29
- ];
30
- return {
31
- boundsIJK,
32
- centerWorld: centerWorld,
33
- radiusWorld,
34
- };
35
- }
36
- boundsIJK = _computeBoundsIJKWithCamera(imageData, viewport, circlePoints, centerWorld, radiusWorld);
37
- return {
38
- boundsIJK,
39
- centerWorld: centerWorld,
40
- radiusWorld,
41
- };
42
- }
43
- function _computeBoundsIJKWithCamera(imageData, viewport, circlePoints, centerWorld, radiusWorld) {
44
- const [bottom, top] = circlePoints;
45
- const dimensions = imageData.getDimensions();
46
- const camera = viewport.getCamera();
47
- const viewUp = vec3.fromValues(camera.viewUp[0], camera.viewUp[1], camera.viewUp[2]);
48
- const viewPlaneNormal = vec3.fromValues(camera.viewPlaneNormal[0], camera.viewPlaneNormal[1], camera.viewPlaneNormal[2]);
49
- const viewRight = vec3.create();
50
- vec3.cross(viewRight, viewUp, viewPlaneNormal);
51
- const topLeftWorld = vec3.create();
52
- const bottomRightWorld = vec3.create();
53
- vec3.scaleAndAdd(topLeftWorld, top, viewPlaneNormal, radiusWorld);
54
- vec3.scaleAndAdd(bottomRightWorld, bottom, viewPlaneNormal, -radiusWorld);
55
- vec3.scaleAndAdd(topLeftWorld, topLeftWorld, viewRight, -radiusWorld);
56
- vec3.scaleAndAdd(bottomRightWorld, bottomRightWorld, viewRight, radiusWorld);
57
- const sphereCornersIJK = [
58
- transformWorldToIndex(imageData, topLeftWorld),
59
- (transformWorldToIndex(imageData, bottomRightWorld)),
60
- ];
61
- const boundsIJK = getBoundingBoxAroundShape(sphereCornersIJK, dimensions);
62
- return boundsIJK;
63
- }
64
- //# sourceMappingURL=pointInSurroundingSphereCallback.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pointInSurroundingSphereCallback.js","sourceRoot":"","sources":["../../../src/utilities/pointInSurroundingSphereCallback.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- function roundNumber(value, precision = 2) {
2
- if (Array.isArray(value)) {
3
- return value.map((v) => roundNumber(v, precision)).join(', ');
4
- }
5
- if (value === undefined || value === null || value === '') {
6
- return 'NaN';
7
- }
8
- value = Number(value);
9
- if (value < 0.0001) {
10
- return `${value}`;
11
- }
12
- const fixedPrecision = value >= 100
13
- ? precision - 2
14
- : value >= 10
15
- ? precision - 1
16
- : value >= 1
17
- ? precision
18
- : value >= 0.1
19
- ? precision + 1
20
- : value >= 0.01
21
- ? precision + 2
22
- : value >= 0.001
23
- ? precision + 3
24
- : precision + 4;
25
- return value.toFixed(fixedPrecision);
26
- }
27
- export default roundNumber;
28
- //# sourceMappingURL=roundNumber.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"roundNumber.js","sourceRoot":"","sources":["../../../src/utilities/roundNumber.ts"],"names":[],"mappings":"AAYA,SAAS,WAAW,CAClB,KAA4C,EAC5C,SAAS,GAAG,CAAC;IAEb,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC/D;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;QACzD,OAAO,KAAK,CAAC;KACd;IACD,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,IAAI,KAAK,GAAG,MAAM,EAAE;QAClB,OAAO,GAAG,KAAK,EAAE,CAAC;KACnB;IACD,MAAM,cAAc,GAClB,KAAK,IAAI,GAAG;QACV,CAAC,CAAC,SAAS,GAAG,CAAC;QACf,CAAC,CAAC,KAAK,IAAI,EAAE;YACb,CAAC,CAAC,SAAS,GAAG,CAAC;YACf,CAAC,CAAC,KAAK,IAAI,CAAC;gBACZ,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,KAAK,IAAI,GAAG;oBACd,CAAC,CAAC,SAAS,GAAG,CAAC;oBACf,CAAC,CAAC,KAAK,IAAI,IAAI;wBACf,CAAC,CAAC,SAAS,GAAG,CAAC;wBACf,CAAC,CAAC,KAAK,IAAI,KAAK;4BAChB,CAAC,CAAC,SAAS,GAAG,CAAC;4BACf,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;IACpB,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AACvC,CAAC;AAED,eAAe,WAAW,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { Types } from '@cornerstonejs/core';
2
- import type { vtkImageData } from '@kitware/vtk.js/Common/DataModel/ImageData';
3
- import { PointInShapeCallback } from './pointInShapeCallback';
4
- export default function pointInSurroundingSphereCallback(imageData: vtkImageData, circlePoints: [Types.Point3, Types.Point3], callback: PointInShapeCallback, viewport?: Types.IVolumeViewport): void;
5
- //# sourceMappingURL=pointInSurroundingSphereCallback.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pointInSurroundingSphereCallback.d.ts","sourceRoot":"","sources":["../../../src/utilities/pointInSurroundingSphereCallback.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAG/E,OAA6B,EAC3B,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAqBhC,MAAM,CAAC,OAAO,UAAU,gCAAgC,CACtD,SAAS,EAAE,YAAY,EACvB,YAAY,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAC1C,QAAQ,EAAE,oBAAoB,EAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,eAAe,GAC/B,IAAI,CAsBN"}
@@ -1,3 +0,0 @@
1
- declare function roundNumber(value: string | number | (string | number)[], precision?: number): string;
2
- export default roundNumber;
3
- //# sourceMappingURL=roundNumber.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"roundNumber.d.ts","sourceRoot":"","sources":["../../../src/utilities/roundNumber.ts"],"names":[],"mappings":"AAYA,iBAAS,WAAW,CAClB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAC5C,SAAS,SAAI,GACZ,MAAM,CA0BR;AAED,eAAe,WAAW,CAAC"}
@@ -1,44 +0,0 @@
1
- /**
2
- * Truncates decimal points to that there is at least 1+precision significant
3
- * digits.
4
- *
5
- * For example, with the default precision 2 (3 significant digits)
6
- * * Values larger than 100 show no information after the decimal point
7
- * * Values between 10 and 99 show 1 decimal point
8
- * * Values between 1 and 9 show 2 decimal points
9
- *
10
- * @param value - to return a fixed measurement value from
11
- * @param precision - defining how many digits after 1..9 are desired
12
- */
13
- function roundNumber(
14
- value: string | number | (string | number)[],
15
- precision = 2
16
- ): string {
17
- if (Array.isArray(value)) {
18
- return value.map((v) => roundNumber(v, precision)).join(', ');
19
- }
20
- if (value === undefined || value === null || value === '') {
21
- return 'NaN';
22
- }
23
- value = Number(value);
24
- if (value < 0.0001) {
25
- return `${value}`;
26
- }
27
- const fixedPrecision =
28
- value >= 100
29
- ? precision - 2
30
- : value >= 10
31
- ? precision - 1
32
- : value >= 1
33
- ? precision
34
- : value >= 0.1
35
- ? precision + 1
36
- : value >= 0.01
37
- ? precision + 2
38
- : value >= 0.001
39
- ? precision + 3
40
- : precision + 4;
41
- return value.toFixed(fixedPrecision);
42
- }
43
-
44
- export default roundNumber;