@cornerstonejs/tools 5.0.0-beta.1 → 5.0.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 (285) hide show
  1. package/dist/esm/config.d.ts +4 -0
  2. package/dist/esm/drawingSvg/drawPath.d.ts +3 -0
  3. package/dist/esm/drawingSvg/drawPath.js +4 -1
  4. package/dist/esm/eventListeners/keyboard/keyDownListener.js +2 -2
  5. package/dist/esm/eventListeners/mouse/getMouseEventPoints.d.ts +1 -1
  6. package/dist/esm/eventListeners/mouse/getMouseEventPoints.js +19 -1
  7. package/dist/esm/eventListeners/mouse/mouseDoubleClickListener.js +8 -1
  8. package/dist/esm/eventListeners/mouse/mouseDownListener.js +37 -5
  9. package/dist/esm/eventListeners/mouse/mouseMoveListener.js +3 -0
  10. package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js +60 -92
  11. package/dist/esm/eventListeners/segmentation/labelmap/onLabelmapSegmentationDataModified.js +49 -21
  12. package/dist/esm/eventListeners/segmentation/labelmap/performStackLabelmapUpdate.js +7 -13
  13. package/dist/esm/eventListeners/segmentation/labelmap/performVolumeLabelmapUpdate.js +44 -18
  14. package/dist/esm/eventListeners/touch/getTouchEventPoints.js +27 -4
  15. package/dist/esm/eventListeners/touch/touchStartListener.js +27 -9
  16. package/dist/esm/eventListeners/wheel/wheelListener.js +5 -1
  17. package/dist/esm/index.d.ts +2 -2
  18. package/dist/esm/index.js +2 -2
  19. package/dist/esm/init.js +2 -0
  20. package/dist/esm/stateManagement/annotation/FrameOfReferenceSpecificAnnotationManager.js +10 -4
  21. package/dist/esm/stateManagement/segmentation/SegmentationRenderingEngine.js +23 -20
  22. package/dist/esm/stateManagement/segmentation/SegmentationRepresentationDisplayRegistry.d.ts +12 -0
  23. package/dist/esm/stateManagement/segmentation/SegmentationRepresentationDisplayRegistry.js +7 -0
  24. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.d.ts +1 -10
  25. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.js +28 -149
  26. package/dist/esm/stateManagement/segmentation/addColorLUT.js +7 -1
  27. package/dist/esm/stateManagement/segmentation/getCurrentLabelmapImageIdForViewport.js +16 -1
  28. package/dist/esm/stateManagement/segmentation/helpers/clearSegmentValue.js +9 -7
  29. package/dist/esm/stateManagement/segmentation/helpers/getSegmentationActor.d.ts +1 -1
  30. package/dist/esm/stateManagement/segmentation/helpers/getSegmentationActor.js +3 -2
  31. package/dist/esm/stateManagement/segmentation/helpers/getViewportLabelmapRenderMode.d.ts +5 -0
  32. package/dist/esm/stateManagement/segmentation/helpers/getViewportLabelmapRenderMode.js +58 -0
  33. package/dist/esm/stateManagement/segmentation/helpers/labelmapImageMapperSupport.d.ts +52 -0
  34. package/dist/esm/stateManagement/segmentation/helpers/labelmapImageMapperSupport.js +246 -0
  35. package/dist/esm/stateManagement/segmentation/helpers/labelmapSegmentationState.d.ts +1 -0
  36. package/dist/esm/stateManagement/segmentation/helpers/labelmapSegmentationState.js +1 -0
  37. package/dist/esm/stateManagement/segmentation/helpers/normalizeSegmentationInput.js +12 -1
  38. package/dist/esm/stateManagement/segmentation/internalAddSegmentationRepresentation.js +3 -3
  39. package/dist/esm/stateManagement/segmentation/labelmapModel/index.d.ts +9 -0
  40. package/dist/esm/stateManagement/segmentation/labelmapModel/index.js +7 -0
  41. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapEditTransaction.d.ts +54 -0
  42. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapEditTransaction.js +224 -0
  43. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageIdMapping.d.ts +6 -0
  44. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageIdMapping.js +39 -0
  45. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageReferenceResolver.d.ts +23 -0
  46. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapImageReferenceResolver.js +269 -0
  47. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLayerStore.d.ts +15 -0
  48. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLayerStore.js +160 -0
  49. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLegacyAdapter.d.ts +4 -0
  50. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapLegacyAdapter.js +42 -0
  51. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapSegmentBindings.d.ts +11 -0
  52. package/dist/esm/stateManagement/segmentation/labelmapModel/labelmapSegmentBindings.js +73 -0
  53. package/dist/esm/stateManagement/segmentation/labelmapModel/normalizeLabelmapSegmentationData.d.ts +17 -0
  54. package/dist/esm/stateManagement/segmentation/labelmapModel/normalizeLabelmapSegmentationData.js +75 -0
  55. package/dist/esm/stateManagement/segmentation/labelmapModel/privateLabelmap.d.ts +5 -0
  56. package/dist/esm/stateManagement/segmentation/labelmapModel/privateLabelmap.js +106 -0
  57. package/dist/esm/stateManagement/segmentation/models/SegmentModel.d.ts +11 -0
  58. package/dist/esm/stateManagement/segmentation/models/SegmentModel.js +19 -0
  59. package/dist/esm/stateManagement/segmentation/models/SegmentationModel.d.ts +12 -0
  60. package/dist/esm/stateManagement/segmentation/models/SegmentationModel.js +23 -0
  61. package/dist/esm/stateManagement/segmentation/removeSegmentationRepresentations.js +6 -10
  62. package/dist/esm/stateManagement/segmentation/segmentIndex.js +24 -0
  63. package/dist/esm/stateManagement/segmentation/segmentationEventManager.js +2 -9
  64. package/dist/esm/stateManagement/segmentation/segmentationState.d.ts +2 -1
  65. package/dist/esm/stateManagement/segmentation/segmentationState.js +4 -1
  66. package/dist/esm/store/SynchronizerManager/Synchronizer.d.ts +3 -1
  67. package/dist/esm/store/state.js +2 -1
  68. package/dist/esm/synchronizers/callbacks/imageSliceSyncCallback.js +12 -3
  69. package/dist/esm/synchronizers/callbacks/presentationViewSyncCallback.js +5 -2
  70. package/dist/esm/synchronizers/callbacks/zoomPanSyncCallback.js +51 -3
  71. package/dist/esm/synchronizers/synchronizers/createPresentationViewSynchronizer.d.ts +1 -1
  72. package/dist/esm/tools/AdvancedMagnifyTool.js +4 -1
  73. package/dist/esm/tools/CrosshairsTool.d.ts +4 -0
  74. package/dist/esm/tools/CrosshairsTool.js +95 -41
  75. package/dist/esm/tools/MagnifyTool.js +3 -1
  76. package/dist/esm/tools/OrientationControllerTool.d.ts +45 -0
  77. package/dist/esm/tools/OrientationControllerTool.js +454 -0
  78. package/dist/esm/tools/OrientationMarkerTool.js +4 -4
  79. package/dist/esm/tools/PanTool.js +26 -3
  80. package/dist/esm/tools/PlanarRotateTool.js +19 -4
  81. package/dist/esm/tools/ReferenceCursors.js +7 -1
  82. package/dist/esm/tools/SculptorTool/CircleSculptCursor.js +1 -1
  83. package/dist/esm/tools/TrackballRotateTool.js +3 -2
  84. package/dist/esm/tools/VolumeCroppingControlTool.d.ts +10 -35
  85. package/dist/esm/tools/VolumeCroppingControlTool.js +179 -699
  86. package/dist/esm/tools/VolumeCroppingTool.d.ts +34 -32
  87. package/dist/esm/tools/VolumeCroppingTool.js +813 -532
  88. package/dist/esm/tools/WindowLevelTool.d.ts +2 -1
  89. package/dist/esm/tools/WindowLevelTool.js +48 -4
  90. package/dist/esm/tools/ZoomTool.d.ts +8 -0
  91. package/dist/esm/tools/ZoomTool.js +92 -11
  92. package/dist/esm/tools/annotation/AngleTool.js +38 -32
  93. package/dist/esm/tools/annotation/ArrowAnnotateTool.js +30 -28
  94. package/dist/esm/tools/annotation/BidirectionalTool.js +51 -49
  95. package/dist/esm/tools/annotation/CircleROITool.d.ts +1 -0
  96. package/dist/esm/tools/annotation/CircleROITool.js +89 -51
  97. package/dist/esm/tools/annotation/CobbAngleTool.js +1 -1
  98. package/dist/esm/tools/annotation/DragProbeTool.js +1 -1
  99. package/dist/esm/tools/annotation/ETDRSGridTool.js +1 -1
  100. package/dist/esm/tools/annotation/EllipticalROITool.js +46 -39
  101. package/dist/esm/tools/annotation/HeightTool.js +1 -1
  102. package/dist/esm/tools/annotation/KeyImageTool.js +11 -11
  103. package/dist/esm/tools/annotation/LabelTool.js +37 -35
  104. package/dist/esm/tools/annotation/LengthTool.js +35 -33
  105. package/dist/esm/tools/annotation/LivewireContourSegmentationTool.js +6 -4
  106. package/dist/esm/tools/annotation/LivewireContourTool.js +4 -8
  107. package/dist/esm/tools/annotation/PlanarFreehandContourSegmentationTool.js +6 -4
  108. package/dist/esm/tools/annotation/PlanarFreehandROITool.js +3 -4
  109. package/dist/esm/tools/annotation/ProbeTool.js +66 -56
  110. package/dist/esm/tools/annotation/RectangleROITool.js +48 -37
  111. package/dist/esm/tools/annotation/RegionSegmentPlusTool.js +1 -1
  112. package/dist/esm/tools/annotation/RegionSegmentTool.js +1 -1
  113. package/dist/esm/tools/annotation/SplineContourSegmentationTool.js +1 -1
  114. package/dist/esm/tools/annotation/SplineROITool.js +60 -56
  115. package/dist/esm/tools/annotation/UltrasoundDirectionalTool.js +1 -1
  116. package/dist/esm/tools/annotation/UltrasoundPleuraBLineTool/UltrasoundPleuraBLineTool.js +57 -55
  117. package/dist/esm/tools/annotation/VideoRedactionTool.js +1 -1
  118. package/dist/esm/tools/base/AnnotationDisplayTool.js +9 -6
  119. package/dist/esm/tools/base/AnnotationTool.js +2 -1
  120. package/dist/esm/tools/base/BaseTool.js +16 -10
  121. package/dist/esm/tools/base/ContourSegmentationBaseTool.js +1 -1
  122. package/dist/esm/tools/base/GrowCutBaseTool.js +2 -2
  123. package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.d.ts +2 -4
  124. package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.js +15 -85
  125. package/dist/esm/tools/displayTools/Labelmap/labelmapActorStyle.d.ts +5 -0
  126. package/dist/esm/tools/displayTools/Labelmap/labelmapActorStyle.js +191 -0
  127. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.d.ts +4 -3
  128. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +48 -209
  129. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/createLabelmapRenderPlan.d.ts +3 -0
  130. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/createLabelmapRenderPlan.js +51 -0
  131. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/index.d.ts +4 -0
  132. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/index.js +3 -0
  133. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/legacyVolumePlan.d.ts +14 -0
  134. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/legacyVolumePlan.js +143 -0
  135. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/planarGenericVolumeLabelmap.d.ts +40 -0
  136. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/planarGenericVolumeLabelmap.js +79 -0
  137. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/removeLabelmapRepresentationFromViewport.d.ts +3 -0
  138. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/removeLabelmapRepresentationFromViewport.js +18 -0
  139. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/resolveLabelmapRenderPlan.d.ts +9 -0
  140. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/resolveLabelmapRenderPlan.js +56 -0
  141. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/stackImagePlan.d.ts +11 -0
  142. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/stackImagePlan.js +35 -0
  143. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/types.d.ts +48 -0
  144. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/types.js +0 -0
  145. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/volumeSliceImageMapperPlan.d.ts +13 -0
  146. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan/volumeSliceImageMapperPlan.js +34 -0
  147. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan.d.ts +2 -0
  148. package/dist/esm/tools/displayTools/Labelmap/labelmapRenderPlan.js +1 -0
  149. package/dist/esm/tools/displayTools/Labelmap/labelmapRepresentationUID.d.ts +8 -0
  150. package/dist/esm/tools/displayTools/Labelmap/labelmapRepresentationUID.js +18 -0
  151. package/dist/esm/tools/displayTools/Labelmap/removeLabelmapFromElement.js +2 -2
  152. package/dist/esm/tools/displayTools/Labelmap/removeLabelmapRepresentationData.d.ts +3 -0
  153. package/dist/esm/tools/displayTools/Labelmap/removeLabelmapRepresentationData.js +16 -0
  154. package/dist/esm/tools/displayTools/Labelmap/syncStackLabelmapActors.d.ts +2 -0
  155. package/dist/esm/tools/displayTools/Labelmap/syncStackLabelmapActors.js +135 -0
  156. package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapImageMapper.d.ts +16 -0
  157. package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapImageMapper.js +267 -0
  158. package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapSliceData.d.ts +27 -0
  159. package/dist/esm/tools/displayTools/Labelmap/volumeLabelmapSliceData.js +185 -0
  160. package/dist/esm/tools/displayTools/registerBuiltInSegmentationRepresentationDisplays.d.ts +1 -0
  161. package/dist/esm/tools/displayTools/registerBuiltInSegmentationRepresentationDisplays.js +16 -0
  162. package/dist/esm/tools/index.d.ts +2 -1
  163. package/dist/esm/tools/index.js +2 -1
  164. package/dist/esm/tools/segmentation/BrushTool.d.ts +9 -2
  165. package/dist/esm/tools/segmentation/BrushTool.js +123 -26
  166. package/dist/esm/tools/segmentation/CircleScissorsTool.js +19 -36
  167. package/dist/esm/tools/segmentation/LabelmapBaseTool.d.ts +2 -3
  168. package/dist/esm/tools/segmentation/LabelmapBaseTool.js +77 -46
  169. package/dist/esm/tools/segmentation/LabelmapEditWithContour.js +3 -3
  170. package/dist/esm/tools/segmentation/PaintFillTool.js +11 -4
  171. package/dist/esm/tools/segmentation/RectangleROIStartEndThresholdTool.d.ts +2 -0
  172. package/dist/esm/tools/segmentation/RectangleROIStartEndThresholdTool.js +16 -8
  173. package/dist/esm/tools/segmentation/RectangleScissorsTool.js +13 -6
  174. package/dist/esm/tools/segmentation/SegmentBidirectionalTool.js +63 -61
  175. package/dist/esm/tools/segmentation/SegmentSelectTool.js +4 -4
  176. package/dist/esm/tools/segmentation/SphereScissorsTool.js +11 -31
  177. package/dist/esm/tools/segmentation/strategies/BrushStrategy.d.ts +7 -0
  178. package/dist/esm/tools/segmentation/strategies/BrushStrategy.js +47 -24
  179. package/dist/esm/tools/segmentation/strategies/compositions/circularCursor.js +49 -21
  180. package/dist/esm/tools/segmentation/strategies/compositions/determineSegmentIndex.js +2 -2
  181. package/dist/esm/tools/segmentation/strategies/compositions/dynamicThreshold.js +5 -1
  182. package/dist/esm/tools/segmentation/strategies/compositions/islandRemovalComposition.js +2 -2
  183. package/dist/esm/tools/segmentation/strategies/compositions/preview.js +2 -2
  184. package/dist/esm/tools/segmentation/strategies/compositions/setValue.js +14 -6
  185. package/dist/esm/tools/segmentation/strategies/fillCircle.d.ts +3 -1
  186. package/dist/esm/tools/segmentation/strategies/fillCircle.js +38 -31
  187. package/dist/esm/tools/segmentation/strategies/fillSphere.js +11 -3
  188. package/dist/esm/tools/segmentation/strategies/utils/crossLayerErase.d.ts +4 -0
  189. package/dist/esm/tools/segmentation/strategies/utils/crossLayerErase.js +23 -0
  190. package/dist/esm/tools/segmentation/strategies/utils/getStrategyData.js +1 -1
  191. package/dist/esm/tools/segmentation/strategies/utils/handleUseSegmentCenterIndex.js +12 -11
  192. package/dist/esm/tools/segmentation/strategies/utils/labelmapOverlap.d.ts +4 -0
  193. package/dist/esm/tools/segmentation/strategies/utils/labelmapOverlap.js +41 -0
  194. package/dist/esm/tools/segmentation/strategies/utils/overwritePolicy.d.ts +3 -0
  195. package/dist/esm/tools/segmentation/strategies/utils/overwritePolicy.js +31 -0
  196. package/dist/esm/tools/segmentation/strategies/utils/segmentSeparation.d.ts +3 -0
  197. package/dist/esm/tools/segmentation/strategies/utils/segmentSeparation.js +38 -0
  198. package/dist/esm/tools/segmentation/utils/LazyBrushEditController.d.ts +19 -0
  199. package/dist/esm/tools/segmentation/utils/LazyBrushEditController.js +55 -0
  200. package/dist/esm/tools/segmentation/utils/lazyBrushPreview.d.ts +3 -0
  201. package/dist/esm/tools/segmentation/utils/lazyBrushPreview.js +34 -0
  202. package/dist/esm/tools/segmentation/utils/shouldUseLazyLabelmapEditing.d.ts +3 -0
  203. package/dist/esm/tools/segmentation/utils/shouldUseLazyLabelmapEditing.js +42 -0
  204. package/dist/esm/types/ISynchronizerEventHandler.d.ts +2 -1
  205. package/dist/esm/types/LabelmapToolOperationData.d.ts +5 -0
  206. package/dist/esm/types/LabelmapTypes.d.ts +29 -6
  207. package/dist/esm/types/SegmentationStateTypes.d.ts +6 -0
  208. package/dist/esm/utilities/calibrateImageSpacing.js +17 -2
  209. package/dist/esm/utilities/contours/AnnotationToPointData.js +1 -1
  210. package/dist/esm/utilities/draw3D/addLine3DBetweenPoints.d.ts +7 -0
  211. package/dist/esm/utilities/draw3D/addLine3DBetweenPoints.js +34 -0
  212. package/dist/esm/utilities/draw3D/calculateAdaptiveSphereRadius.d.ts +6 -0
  213. package/dist/esm/utilities/draw3D/calculateAdaptiveSphereRadius.js +7 -0
  214. package/dist/esm/utilities/draw3D/index.d.ts +2 -0
  215. package/dist/esm/utilities/draw3D/index.js +2 -0
  216. package/dist/esm/utilities/drawing/getTextBoxCoordsCanvas.js +22 -14
  217. package/dist/esm/utilities/getCenterAndRadiusInCanvas.d.ts +6 -0
  218. package/dist/esm/utilities/getCenterAndRadiusInCanvas.js +26 -0
  219. package/dist/esm/utilities/getEllipseWorldCoordinates.d.ts +2 -0
  220. package/dist/esm/utilities/getEllipseWorldCoordinates.js +26 -0
  221. package/dist/esm/utilities/getSphereBoundsInfo.js +5 -1
  222. package/dist/esm/utilities/getViewportICamera.d.ts +4 -0
  223. package/dist/esm/utilities/getViewportICamera.js +23 -0
  224. package/dist/esm/utilities/getViewportsForAnnotation.js +5 -1
  225. package/dist/esm/utilities/index.d.ts +2 -1
  226. package/dist/esm/utilities/index.js +2 -1
  227. package/dist/esm/utilities/interactionDragCoordinator.d.ts +5 -0
  228. package/dist/esm/utilities/interactionDragCoordinator.js +16 -0
  229. package/dist/esm/utilities/math/basic/BasicStatsCalculator.js +9 -7
  230. package/dist/esm/utilities/pointInSurroundingSphereCallback.js +8 -1
  231. package/dist/esm/utilities/segmentation/InterpolationManager/InterpolationManager.js +121 -118
  232. package/dist/esm/utilities/segmentation/SegmentStatsCalculator.js +5 -4
  233. package/dist/esm/utilities/segmentation/VolumetricCalculator.js +1 -1
  234. package/dist/esm/utilities/segmentation/createLabelmapVolumeForViewport.js +1 -1
  235. package/dist/esm/utilities/segmentation/getReferenceVolumeForSegmentation.js +1 -1
  236. package/dist/esm/utilities/segmentation/getReferenceVolumeForSegmentationVolume.js +11 -2
  237. package/dist/esm/utilities/segmentation/getSegmentIndexAtLabelmapBorder.js +36 -17
  238. package/dist/esm/utilities/segmentation/getSegmentIndexAtWorldPoint.js +42 -25
  239. package/dist/esm/utilities/segmentation/getUniqueSegmentIndices.js +3 -30
  240. package/dist/esm/utilities/segmentation/index.d.ts +2 -1
  241. package/dist/esm/utilities/segmentation/index.js +2 -1
  242. package/dist/esm/utilities/segmentation/utilsForWorker.js +6 -2
  243. package/dist/esm/utilities/segmentation/validateLabelmap.js +1 -1
  244. package/dist/esm/utilities/stackPrefetch/stackPrefetch.js +0 -1
  245. package/dist/esm/utilities/touch/index.js +3 -2
  246. package/dist/esm/utilities/viewportCapabilities.d.ts +16 -0
  247. package/dist/esm/utilities/viewportCapabilities.js +18 -0
  248. package/dist/esm/utilities/viewportFilters/filterViewportsWithParallelNormals.d.ts +1 -1
  249. package/dist/esm/utilities/viewportFilters/filterViewportsWithParallelNormals.js +12 -4
  250. package/dist/esm/utilities/viewportFilters/filterViewportsWithSameOrientation.d.ts +1 -1
  251. package/dist/esm/utilities/viewportFilters/filterViewportsWithSameOrientation.js +11 -4
  252. package/dist/esm/utilities/viewportFilters/getViewportIdsWithToolToRender.js +1 -1
  253. package/dist/esm/utilities/viewportPresentation.d.ts +3 -0
  254. package/dist/esm/utilities/viewportPresentation.js +26 -0
  255. package/dist/esm/utilities/volumeCropping/computePlanePlaneIntersection.d.ts +6 -0
  256. package/dist/esm/utilities/volumeCropping/computePlanePlaneIntersection.js +37 -0
  257. package/dist/esm/utilities/volumeCropping/constants.d.ts +31 -0
  258. package/dist/esm/utilities/volumeCropping/constants.js +31 -0
  259. package/dist/esm/utilities/volumeCropping/copyClippingPlanes.d.ts +2 -0
  260. package/dist/esm/utilities/volumeCropping/copyClippingPlanes.js +6 -0
  261. package/dist/esm/utilities/volumeCropping/extractVolumeDirectionVectors.d.ts +9 -0
  262. package/dist/esm/utilities/volumeCropping/extractVolumeDirectionVectors.js +9 -0
  263. package/dist/esm/utilities/volumeCropping/findLineBoundsIntersection.d.ts +5 -0
  264. package/dist/esm/utilities/volumeCropping/findLineBoundsIntersection.js +50 -0
  265. package/dist/esm/utilities/volumeCropping/getColorKeyForPlaneIndex.d.ts +1 -0
  266. package/dist/esm/utilities/volumeCropping/getColorKeyForPlaneIndex.js +13 -0
  267. package/dist/esm/utilities/volumeCropping/getOrientationFromNormal.d.ts +2 -0
  268. package/dist/esm/utilities/volumeCropping/getOrientationFromNormal.js +19 -0
  269. package/dist/esm/utilities/volumeCropping/index.d.ts +9 -0
  270. package/dist/esm/utilities/volumeCropping/index.js +9 -0
  271. package/dist/esm/utilities/volumeCropping/parseCornerKey.d.ts +8 -0
  272. package/dist/esm/utilities/volumeCropping/parseCornerKey.js +11 -0
  273. package/dist/esm/utilities/volumeCropping/types.d.ts +5 -0
  274. package/dist/esm/utilities/volumeCropping/types.js +0 -0
  275. package/dist/esm/utilities/vtkjs/AnnotatedRhombicuboctahedronActor/index.d.ts +31 -0
  276. package/dist/esm/utilities/vtkjs/AnnotatedRhombicuboctahedronActor/index.js +391 -0
  277. package/dist/esm/utilities/vtkjs/OrientationControllerWidget/index.d.ts +69 -0
  278. package/dist/esm/utilities/vtkjs/OrientationControllerWidget/index.js +804 -0
  279. package/dist/esm/utilities/vtkjs/RhombicuboctahedronSource/index.d.ts +7 -0
  280. package/dist/esm/utilities/vtkjs/RhombicuboctahedronSource/index.js +144 -0
  281. package/dist/esm/utilities/vtkjs/index.d.ts +3 -0
  282. package/dist/esm/utilities/vtkjs/index.js +3 -0
  283. package/dist/esm/version.d.ts +1 -1
  284. package/dist/esm/version.js +1 -1
  285. package/package.json +10 -9
@@ -0,0 +1,391 @@
1
+ import macro from '@kitware/vtk.js/macros';
2
+ import vtkActor from '@kitware/vtk.js/Rendering/Core/Actor';
3
+ import vtkMapper from '@kitware/vtk.js/Rendering/Core/Mapper';
4
+ import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray';
5
+ import vtkTexture from '@kitware/vtk.js/Rendering/Core/Texture';
6
+ import ImageHelper from '@kitware/vtk.js/Common/Core/ImageHelper';
7
+ import vtkRhombicuboctahedronSource from '../RhombicuboctahedronSource';
8
+ function createMainFacesMesh(scale, faceColors, faceTextures) {
9
+ const source = vtkRhombicuboctahedronSource.newInstance({
10
+ generate3DTextureCoordinates: false,
11
+ generateMainFaces: true,
12
+ generateEdgeFaces: false,
13
+ generateCornerFaces: false,
14
+ scale: scale,
15
+ });
16
+ source.update();
17
+ const data = source.getOutputData();
18
+ if (data) {
19
+ const tcoords = [];
20
+ for (let faceIdx = 0; faceIdx < 6; faceIdx++) {
21
+ const col = faceIdx % 3;
22
+ const row = Math.floor(faceIdx / 3);
23
+ const u0 = col / 3.0;
24
+ const u1 = (col + 1) / 3.0;
25
+ const v0 = row / 2.0;
26
+ const v1 = (row + 1) / 2.0;
27
+ tcoords.push(u0, v0);
28
+ tcoords.push(u1, v0);
29
+ tcoords.push(u1, v1);
30
+ tcoords.push(u0, v1);
31
+ }
32
+ const tcoordsArray = vtkDataArray.newInstance({
33
+ name: 'TextureCoordinates',
34
+ values: new Float32Array(tcoords),
35
+ numberOfComponents: 2,
36
+ });
37
+ data.getPointData().setTCoords(tcoordsArray);
38
+ data.modified();
39
+ }
40
+ return data;
41
+ }
42
+ function createEdgeFacesMesh(scale, color) {
43
+ const source = vtkRhombicuboctahedronSource.newInstance({
44
+ generate3DTextureCoordinates: false,
45
+ generateMainFaces: false,
46
+ generateEdgeFaces: true,
47
+ generateCornerFaces: false,
48
+ scale: scale,
49
+ });
50
+ source.update();
51
+ const data = source.getOutputData();
52
+ if (data) {
53
+ const colors = [];
54
+ const numCells = data.getNumberOfCells();
55
+ for (let i = 0; i < numCells; i++) {
56
+ colors.push(color[0], color[1], color[2], 255);
57
+ }
58
+ const colorsArray = vtkDataArray.newInstance({
59
+ name: 'Colors',
60
+ values: new Uint8Array(colors),
61
+ numberOfComponents: 4,
62
+ });
63
+ data.getCellData().setScalars(colorsArray);
64
+ data.modified();
65
+ }
66
+ return data;
67
+ }
68
+ function createCornerFacesMesh(scale, color) {
69
+ const source = vtkRhombicuboctahedronSource.newInstance({
70
+ generate3DTextureCoordinates: false,
71
+ generateMainFaces: false,
72
+ generateEdgeFaces: false,
73
+ generateCornerFaces: true,
74
+ scale: scale,
75
+ });
76
+ source.update();
77
+ const data = source.getOutputData();
78
+ if (data) {
79
+ const colors = [];
80
+ const numCells = data.getNumberOfCells();
81
+ for (let i = 0; i < numCells; i++) {
82
+ colors.push(color[0], color[1], color[2], 255);
83
+ }
84
+ const colorsArray = vtkDataArray.newInstance({
85
+ name: 'Colors',
86
+ values: new Uint8Array(colors),
87
+ numberOfComponents: 4,
88
+ });
89
+ data.getCellData().setScalars(colorsArray);
90
+ data.modified();
91
+ }
92
+ return data;
93
+ }
94
+ function createTextureAtlas(faceTextureData) {
95
+ const faceSize = 256;
96
+ const canvas = document.createElement('canvas');
97
+ canvas.width = faceSize * 3;
98
+ canvas.height = faceSize * 2;
99
+ const ctx = canvas.getContext('2d');
100
+ faceTextureData.forEach((data, index) => {
101
+ const col = index % 3;
102
+ const row = Math.floor(index / 3);
103
+ const x = col * faceSize;
104
+ const y = row * faceSize;
105
+ ctx.fillStyle = `rgb(${data.faceColor[0]}, ${data.faceColor[1]}, ${data.faceColor[2]})`;
106
+ ctx.fillRect(x, y, faceSize, faceSize);
107
+ if (data.text) {
108
+ ctx.save();
109
+ ctx.translate(x + faceSize / 2, y + faceSize / 2);
110
+ if (data.flipVertical) {
111
+ ctx.scale(1, -1);
112
+ }
113
+ if (data.flipHorizontal) {
114
+ ctx.scale(-1, 1);
115
+ }
116
+ ctx.rotate(((data.rotation || 0) * Math.PI) / 180);
117
+ ctx.fillStyle = `rgb(${data.textColor[0]}, ${data.textColor[1]}, ${data.textColor[2]})`;
118
+ ctx.font = 'bold 180px Arial';
119
+ ctx.textAlign = 'center';
120
+ ctx.textBaseline = 'middle';
121
+ ctx.fillText(data.text, 0, 0);
122
+ ctx.restore();
123
+ }
124
+ });
125
+ return ImageHelper.canvasToImageData(canvas);
126
+ }
127
+ function vtkAnnotatedRhombicuboctahedronActor(publicAPI, model) {
128
+ model.classHierarchy.push('vtkAnnotatedRhombicuboctahedronActor');
129
+ function updateAllFaceTextures() { }
130
+ function createActors() {
131
+ let sourceScale = 1.0;
132
+ if (model.scale !== undefined && model.scale !== null) {
133
+ if (Array.isArray(model.scale)) {
134
+ sourceScale = model.scale[0] || 1.0;
135
+ }
136
+ else if (typeof model.scale === 'number') {
137
+ sourceScale = model.scale;
138
+ }
139
+ }
140
+ const actors = [];
141
+ const hexToRgb = (hex) => {
142
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
143
+ return result
144
+ ? result.slice(1, 4).map((n) => parseInt(n, 16))
145
+ : [255, 255, 255];
146
+ };
147
+ const parseFontColor = (color) => {
148
+ if (!color) {
149
+ return [0, 0, 0];
150
+ }
151
+ const rgbMatch = color.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);
152
+ if (rgbMatch) {
153
+ return [
154
+ parseInt(rgbMatch[1], 10),
155
+ parseInt(rgbMatch[2], 10),
156
+ parseInt(rgbMatch[3], 10),
157
+ ];
158
+ }
159
+ if (color.startsWith('#')) {
160
+ return hexToRgb(color);
161
+ }
162
+ const namedColors = {
163
+ black: [0, 0, 0],
164
+ white: [255, 255, 255],
165
+ red: [255, 0, 0],
166
+ green: [0, 255, 0],
167
+ blue: [0, 0, 255],
168
+ };
169
+ if (namedColors[color.toLowerCase()]) {
170
+ return namedColors[color.toLowerCase()];
171
+ }
172
+ return [0, 0, 0];
173
+ };
174
+ const faceColors = {
175
+ zMinus: hexToRgb(model.zMinusFaceProperty.faceColor || model.defaultStyle.faceColor),
176
+ zPlus: hexToRgb(model.zPlusFaceProperty.faceColor || model.defaultStyle.faceColor),
177
+ yMinus: hexToRgb(model.yMinusFaceProperty.faceColor || model.defaultStyle.faceColor),
178
+ yPlus: hexToRgb(model.yPlusFaceProperty.faceColor || model.defaultStyle.faceColor),
179
+ xMinus: hexToRgb(model.xMinusFaceProperty.faceColor || model.defaultStyle.faceColor),
180
+ xPlus: hexToRgb(model.xPlusFaceProperty.faceColor || model.defaultStyle.faceColor),
181
+ };
182
+ if (model.showMainFaces !== false) {
183
+ const faceTextureData = [
184
+ {
185
+ faceColor: faceColors.zMinus,
186
+ text: model.zMinusFaceProperty.text || 'I',
187
+ textColor: parseFontColor(model.zMinusFaceProperty.fontColor || model.defaultStyle.fontColor),
188
+ rotation: 0,
189
+ },
190
+ {
191
+ faceColor: faceColors.zPlus,
192
+ text: model.zPlusFaceProperty.text || 'S',
193
+ textColor: parseFontColor(model.zPlusFaceProperty.fontColor || model.defaultStyle.fontColor),
194
+ rotation: 0,
195
+ flipVertical: true,
196
+ },
197
+ {
198
+ faceColor: faceColors.yMinus,
199
+ text: model.yMinusFaceProperty.text || 'A',
200
+ textColor: parseFontColor(model.yMinusFaceProperty.fontColor || model.defaultStyle.fontColor),
201
+ rotation: 180,
202
+ },
203
+ {
204
+ faceColor: faceColors.yPlus,
205
+ text: model.yPlusFaceProperty.text || 'P',
206
+ textColor: parseFontColor(model.yPlusFaceProperty.fontColor || model.defaultStyle.fontColor),
207
+ rotation: 180,
208
+ },
209
+ {
210
+ faceColor: faceColors.xMinus,
211
+ text: model.xMinusFaceProperty.text || 'L',
212
+ textColor: parseFontColor(model.xMinusFaceProperty.fontColor || model.defaultStyle.fontColor),
213
+ rotation: 90,
214
+ flipVertical: true,
215
+ },
216
+ {
217
+ faceColor: faceColors.xPlus,
218
+ text: model.xPlusFaceProperty.text || 'R',
219
+ textColor: parseFontColor(model.xPlusFaceProperty.fontColor || model.defaultStyle.fontColor),
220
+ rotation: 90,
221
+ },
222
+ ];
223
+ const atlasImageData = createTextureAtlas(faceTextureData);
224
+ const mainData = createMainFacesMesh(sourceScale, faceColors, null);
225
+ if (mainData) {
226
+ const mainFacesActor = vtkActor.newInstance();
227
+ const mainMapper = vtkMapper.newInstance();
228
+ mainMapper.setInputData(mainData);
229
+ mainFacesActor.setMapper(mainMapper);
230
+ const texture = vtkTexture.newInstance();
231
+ texture.setInputData(atlasImageData);
232
+ texture.setInterpolate(true);
233
+ mainFacesActor.addTexture(texture);
234
+ const property = mainFacesActor.getProperty();
235
+ property.setBackfaceCulling(false);
236
+ property.setFrontfaceCulling(false);
237
+ property.setLighting(false);
238
+ property.setAmbient(1.0);
239
+ property.setDiffuse(0.0);
240
+ property.setSpecular(0.0);
241
+ actors.push(mainFacesActor);
242
+ }
243
+ }
244
+ if (model.showEdgeFaces !== false) {
245
+ const edgeColor = model.edgeColor ?? [200, 200, 200];
246
+ const edgeData = createEdgeFacesMesh(sourceScale, edgeColor);
247
+ if (edgeData) {
248
+ const edgeFacesActor = vtkActor.newInstance();
249
+ const edgeMapper = vtkMapper.newInstance();
250
+ edgeMapper.setInputData(edgeData);
251
+ edgeMapper.setScalarModeToUseCellData();
252
+ edgeMapper.setScalarVisibility(true);
253
+ edgeMapper.setColorModeToDirectScalars();
254
+ edgeFacesActor.setMapper(edgeMapper);
255
+ const edgeProperty = edgeFacesActor.getProperty();
256
+ edgeProperty.setBackfaceCulling(false);
257
+ edgeProperty.setFrontfaceCulling(false);
258
+ edgeProperty.setLighting(false);
259
+ edgeProperty.setAmbient(1.0);
260
+ edgeProperty.setDiffuse(0.0);
261
+ edgeProperty.setSpecular(0.0);
262
+ actors.push(edgeFacesActor);
263
+ }
264
+ }
265
+ if (model.showCornerFaces !== false) {
266
+ const cornerColor = model.cornerColor ?? [150, 150, 150];
267
+ const cornerData = createCornerFacesMesh(sourceScale, cornerColor);
268
+ if (cornerData) {
269
+ const cornerFacesActor = vtkActor.newInstance();
270
+ const cornerMapper = vtkMapper.newInstance();
271
+ cornerMapper.setInputData(cornerData);
272
+ cornerMapper.setScalarModeToUseCellData();
273
+ cornerMapper.setScalarVisibility(true);
274
+ cornerMapper.setColorModeToDirectScalars();
275
+ cornerFacesActor.setMapper(cornerMapper);
276
+ const cornerProperty = cornerFacesActor.getProperty();
277
+ cornerProperty.setBackfaceCulling(false);
278
+ cornerProperty.setFrontfaceCulling(false);
279
+ cornerProperty.setLighting(false);
280
+ cornerProperty.setAmbient(1.0);
281
+ cornerProperty.setDiffuse(0.0);
282
+ cornerProperty.setSpecular(0.0);
283
+ actors.push(cornerFacesActor);
284
+ }
285
+ }
286
+ return actors;
287
+ }
288
+ publicAPI.setDefaultStyle = (style) => {
289
+ model.defaultStyle = { ...model.defaultStyle, ...style };
290
+ };
291
+ publicAPI.setXPlusFaceProperty = (prop) => {
292
+ Object.assign(model.xPlusFaceProperty, prop);
293
+ publicAPI.modified();
294
+ };
295
+ publicAPI.setXMinusFaceProperty = (prop) => {
296
+ Object.assign(model.xMinusFaceProperty, prop);
297
+ publicAPI.modified();
298
+ };
299
+ publicAPI.setYPlusFaceProperty = (prop) => {
300
+ Object.assign(model.yPlusFaceProperty, prop);
301
+ publicAPI.modified();
302
+ };
303
+ publicAPI.setYMinusFaceProperty = (prop) => {
304
+ Object.assign(model.yMinusFaceProperty, prop);
305
+ publicAPI.modified();
306
+ };
307
+ publicAPI.setZPlusFaceProperty = (prop) => {
308
+ Object.assign(model.zPlusFaceProperty, prop);
309
+ publicAPI.modified();
310
+ };
311
+ publicAPI.setZMinusFaceProperty = (prop) => {
312
+ Object.assign(model.zMinusFaceProperty, prop);
313
+ publicAPI.modified();
314
+ };
315
+ publicAPI.setShowMainFaces = (show) => {
316
+ if (model.showMainFaces !== show) {
317
+ model.showMainFaces = show;
318
+ updateAllFaceTextures();
319
+ }
320
+ };
321
+ publicAPI.setShowEdgeFaces = (show) => {
322
+ if (model.showEdgeFaces !== show) {
323
+ model.showEdgeFaces = show;
324
+ updateAllFaceTextures();
325
+ }
326
+ };
327
+ publicAPI.setShowCornerFaces = (show) => {
328
+ if (model.showCornerFaces !== show) {
329
+ model.showCornerFaces = show;
330
+ updateAllFaceTextures();
331
+ }
332
+ };
333
+ publicAPI.setRhombScale = (scale) => {
334
+ if (model.scale !== scale) {
335
+ model.scale = scale;
336
+ }
337
+ };
338
+ publicAPI.getActors = () => {
339
+ return createActors();
340
+ };
341
+ }
342
+ export const DEFAULT_VALUES = {
343
+ defaultStyle: {
344
+ text: '',
345
+ faceColor: 'white',
346
+ faceRotation: 0,
347
+ fontFamily: 'Arial',
348
+ fontColor: 'black',
349
+ fontStyle: 'normal',
350
+ fontSizeScale: (resolution) => resolution / 1.8,
351
+ edgeThickness: 0.1,
352
+ edgeColor: 'black',
353
+ resolution: 200,
354
+ },
355
+ xPlusFaceProperty: {},
356
+ xMinusFaceProperty: {},
357
+ yPlusFaceProperty: {},
358
+ yMinusFaceProperty: {},
359
+ zPlusFaceProperty: {},
360
+ zMinusFaceProperty: {},
361
+ showMainFaces: true,
362
+ showEdgeFaces: true,
363
+ showCornerFaces: true,
364
+ scale: 1.0,
365
+ };
366
+ export function extend(publicAPI, model, initialValues = {}) {
367
+ Object.assign(model, DEFAULT_VALUES, initialValues);
368
+ vtkActor.extend(publicAPI, model, initialValues);
369
+ model.xPlusFaceProperty = { ...model.xPlusFaceProperty };
370
+ model.xMinusFaceProperty = { ...model.xMinusFaceProperty };
371
+ model.yPlusFaceProperty = { ...model.yPlusFaceProperty };
372
+ model.yMinusFaceProperty = { ...model.yMinusFaceProperty };
373
+ model.zPlusFaceProperty = { ...model.zPlusFaceProperty };
374
+ model.zMinusFaceProperty = { ...model.zMinusFaceProperty };
375
+ macro.get(publicAPI, model, [
376
+ 'defaultStyle',
377
+ 'xPlusFaceProperty',
378
+ 'xMinusFaceProperty',
379
+ 'yPlusFaceProperty',
380
+ 'yMinusFaceProperty',
381
+ 'zPlusFaceProperty',
382
+ 'zMinusFaceProperty',
383
+ 'showMainFaces',
384
+ 'showEdgeFaces',
385
+ 'showCornerFaces',
386
+ 'scale',
387
+ ]);
388
+ vtkAnnotatedRhombicuboctahedronActor(publicAPI, model);
389
+ }
390
+ export const newInstance = macro.newInstance(extend, 'vtkAnnotatedRhombicuboctahedronActor');
391
+ export default { newInstance, extend };
@@ -0,0 +1,69 @@
1
+ import vtkCellPicker from '@kitware/vtk.js/Rendering/Core/CellPicker';
2
+ import vtkActor from '@kitware/vtk.js/Rendering/Core/Actor';
3
+ import type { Types } from '@cornerstonejs/core';
4
+ export interface OrientationControllerConfig {
5
+ faceColors: {
6
+ topBottom: number[];
7
+ frontBack: number[];
8
+ leftRight: number[];
9
+ };
10
+ letterColors: {
11
+ zMinus: number[];
12
+ zPlus: number[];
13
+ yMinus: number[];
14
+ yPlus: number[];
15
+ xMinus: number[];
16
+ xPlus: number[];
17
+ };
18
+ opacity: number;
19
+ showEdgeFaces: boolean;
20
+ showCornerFaces: boolean;
21
+ highlightColor?: number[];
22
+ edgeColor?: number[];
23
+ cornerColor?: number[];
24
+ restingAmbient?: number;
25
+ hoverAmbient?: number;
26
+ }
27
+ export interface PickResult {
28
+ pickedActor: vtkActor;
29
+ cellId: number;
30
+ actorIndex: number;
31
+ }
32
+ export interface PositionConfig {
33
+ position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
34
+ size: number;
35
+ }
36
+ export interface MouseHandlersCallbacks {
37
+ onFacePicked: (result: PickResult) => void;
38
+ onFaceHover?: (result: PickResult | null) => void;
39
+ }
40
+ export declare class vtkOrientationControllerWidget {
41
+ private actors;
42
+ private pickers;
43
+ private overlayRenderers;
44
+ private renderWindows;
45
+ private highlightedFace;
46
+ private mouseHandlers;
47
+ private _highlightColor;
48
+ private _restingAmbient;
49
+ private _hoverAmbient;
50
+ createActors(config: OrientationControllerConfig): vtkActor[];
51
+ addActorsToViewport(viewportId: string, viewport: Types.IVolumeViewport, actors: vtkActor[]): void;
52
+ removeActorsFromViewport(viewportId: string, _viewport: Types.IVolumeViewport): void;
53
+ setupPicker(viewportId: string, actors: vtkActor[]): vtkCellPicker;
54
+ pickAtPosition(evt: MouseEvent, viewportId: string, viewport: Types.IVolumeViewport, element: HTMLDivElement, actors: vtkActor[]): PickResult | null;
55
+ calculateMarkerPosition(viewport: Types.IVolumeViewport, position: PositionConfig['position'], screenSizePixels: number): [number, number, number] | null;
56
+ positionActors(viewport: Types.IVolumeViewport, actors: vtkActor[], config: PositionConfig): boolean;
57
+ highlightFace(actor: vtkActor, cellId: number, viewport: Types.IVolumeViewport, isMainFace?: boolean): void;
58
+ clearHighlight(): void;
59
+ setupMouseHandlers(viewportId: string, element: HTMLDivElement, viewport: Types.IVolumeViewport, actors: vtkActor[], callbacks: MouseHandlersCallbacks): {
60
+ cleanup: () => void;
61
+ };
62
+ getActors(viewportId: string): vtkActor[] | undefined;
63
+ syncOverlayViewport(viewportId: string, viewport: Types.IVolumeViewport): void;
64
+ getOrientationForFace(cellId: number): {
65
+ viewPlaneNormal: number[];
66
+ viewUp: number[];
67
+ } | null;
68
+ cleanup(viewportId?: string): void;
69
+ }