@ohif/app 3.9.0-beta.4 → 3.9.0-beta.40

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 (233) hide show
  1. package/dist/{117.bundle.a80b1511ef4b302fb7cc.js → 117.bundle.1f7b56504d506e7259e3.js} +66 -69
  2. package/dist/{889.bundle.6df37a2db81b97f4a76a.js → 121.bundle.d1d51ac098a41f618eab.js} +40 -12
  3. package/dist/{998.bundle.f2ba5b6c1aa0caa6d672.js → 129.bundle.29770734ee3882c107c0.js} +40 -25
  4. package/dist/{574.bundle.72bd5061ccd504235419.js → 139.bundle.09e5af0a9ae8a285af77.js} +25 -37
  5. package/dist/{989.bundle.bf32dc457ea9abccca09.js → 14.bundle.90dd112f5bc6f21d6ce1.js} +5 -5
  6. package/dist/{783.bundle.1f650e1ef1b10d19870f.js → 140.bundle.a58cbadd477749143dea.js} +2 -2
  7. package/dist/{164.bundle.1da1cadb56951caef1d6.js → 164.bundle.2b23bfbcb23497d7c87a.js} +548 -301
  8. package/dist/{544.bundle.e8227e98860e39636a00.js → 172.bundle.e0ee762bee7496d6491e.js} +16 -30
  9. package/dist/{487.bundle.a517b1d6cd2d82b9a7ea.js → 194.bundle.2dde300e0ed19254b6ba.js} +5 -5
  10. package/dist/{699.bundle.f62694527f6dfe417f81.js → 211.bundle.e8eea5d565da00092f57.js} +43 -5
  11. package/dist/{776.bundle.91747df457143051f872.js → 218.bundle.ec4ecebd17f837a87fff.js} +10 -12
  12. package/dist/{236.bundle.4ca7987e1d57f60ec13a.js → 236.bundle.34db90a140e37d34fd71.js} +544 -221
  13. package/dist/{530.bundle.17b9a34fefff133e5379.js → 265.bundle.b32a0cc143efa80ee3cc.js} +8 -12
  14. package/dist/{862.bundle.55dde21bab4c841b6259.js → 323.bundle.955cc8f5eb5c01295118.js} +5 -9
  15. package/dist/{342.bundle.340982440de15f540a89.js → 342.bundle.fcb2038060a062129d34.js} +7 -0
  16. package/dist/{550.bundle.4f728d9ab7a8c7685abd.js → 363.bundle.34dddd70f4ffd669287e.js} +234 -150
  17. package/dist/{806.bundle.50e039eb624382ee1fce.js → 370.bundle.bd9884c274c26a54dfae.js} +101 -18
  18. package/dist/{682.bundle.0909fbf9a76430e4bbc9.js → 382.bundle.df3ca2c99f3547b31d5b.js} +38 -5
  19. package/dist/{907.bundle.d2c612ec56380e73df89.js → 444.bundle.7d0ca442eef652e676fc.js} +4 -4
  20. package/dist/{483.bundle.a353efc5a5dd563c903c.js → 483.bundle.0f1848f6a2cf34829fef.js} +16 -3
  21. package/dist/{35.bundle.0168d78bfad0cb784112.js → 501.bundle.2f703ca4598a3be0d748.js} +950 -348
  22. package/dist/{905.bundle.c1c60224a599e789feb4.js → 552.bundle.274e23ec01ab41ad7189.js} +3 -3
  23. package/dist/{981.bundle.cccdc8caaa5a11f4a998.js → 555.bundle.b2a12c8da6bb11dad2b7.js} +14 -13
  24. package/dist/{939.bundle.9d93b2e47c52338747a2.js → 612.bundle.297a033523539e0b47f9.js} +2 -2
  25. package/dist/{295.bundle.9926ff25c6dbf53845b1.js → 675.bundle.c9720f40fd7c7e9b7e54.js} +5 -9
  26. package/dist/{325.bundle.1c54c1689fb4b1955e8c.js → 717.bundle.ea82dab5ef9f7f640319.js} +58 -26
  27. package/dist/{722.bundle.2547630541b670f10d6e.js → 722.bundle.1242e0348afc63ca4f5e.js} +10 -4
  28. package/dist/{121.bundle.b582314ec0024fdf2d15.js → 792.bundle.485ad2f98823a4b3feb1.js} +6 -10
  29. package/dist/{721.bundle.0de8f780088aee87dbd9.js → 799.bundle.e744c0af4fdf31b180ac.js} +12 -12
  30. package/dist/{448.bundle.077b4b50ee63487516eb.js → 806.bundle.1632ea111682147bad5f.js} +19 -6
  31. package/dist/{297.bundle.194d8985ab974839b5b6.js → 837.bundle.ff9fe44bf863a5bceabc.js} +2 -2
  32. package/dist/{961.bundle.6aea7b3de9e93a9ebab1.js → 853.bundle.1ccbecc265671c9e009e.js} +4 -4
  33. package/dist/{473.bundle.6cd4be953853f35b29c3.js → 914.bundle.e15be8089bf422ed7b51.js} +512 -274
  34. package/dist/{94.bundle.08683468d52365475d9a.js → 920.bundle.0b80f44e0e0df6829650.js} +39 -9
  35. package/dist/{390.bundle.5a21388b461ee51db594.js → 944.bundle.a58e0a80876da559f6b9.js} +653 -95
  36. package/dist/{243.bundle.391c2805222b849abc2c.js → 989.bundle.47ce0ed7ca8119f2a0f9.js} +4 -4
  37. package/dist/app-config.js +5 -1
  38. package/dist/app.bundle.css +5 -4
  39. package/dist/{app.bundle.9e22e72ec23a08cde379.js → app.bundle.e10ba453bd29c6aa3df0.js} +162761 -45947
  40. package/dist/assets/images/action-new-dialog.svg +14 -0
  41. package/dist/assets/images/arrow-down.svg +5 -0
  42. package/dist/assets/images/arrow-left-small.svg +6 -0
  43. package/dist/assets/images/arrow-left.svg +6 -0
  44. package/dist/assets/images/arrow-right-small.svg +6 -0
  45. package/dist/assets/images/arrow-right.svg +6 -0
  46. package/dist/assets/images/calendar.svg +5 -0
  47. package/dist/assets/images/cancel.svg +8 -0
  48. package/dist/assets/images/checkbox-active.svg +9 -0
  49. package/dist/assets/images/checkbox-checked.svg +9 -0
  50. package/dist/assets/images/checkbox-default.svg +3 -0
  51. package/dist/assets/images/checkbox-unchecked.svg +3 -0
  52. package/dist/assets/images/chevron-down.svg +3 -0
  53. package/dist/assets/images/chevron-left.svg +3 -0
  54. package/dist/assets/images/chevron-menu.svg +12 -0
  55. package/dist/assets/images/chevron-next.svg +6 -0
  56. package/dist/assets/images/chevron-prev.svg +6 -0
  57. package/dist/assets/images/chevron-right.svg +3 -0
  58. package/dist/assets/images/circled-checkmark.svg +6 -0
  59. package/dist/assets/images/clipboard.svg +1 -0
  60. package/dist/assets/images/closeIcon.svg +3 -0
  61. package/dist/assets/images/content-next.svg +9 -0
  62. package/dist/assets/images/content-prev.svg +9 -0
  63. package/dist/assets/images/dotted-circle.svg +3 -0
  64. package/dist/assets/images/edit-patient.svg +15 -0
  65. package/dist/assets/images/exclamation.svg +9 -0
  66. package/dist/assets/images/external-link.svg +5 -0
  67. package/dist/assets/images/eye-hidden.svg +8 -0
  68. package/dist/assets/images/eye-visible.svg +6 -0
  69. package/dist/assets/images/focus-frame-target.svg +13 -0
  70. package/dist/assets/images/group-layers.svg +6 -0
  71. package/dist/assets/images/icon-add.svg +15 -0
  72. package/dist/assets/images/icon-alert-small.svg +8 -0
  73. package/dist/assets/images/icon-chevron-patient.svg +12 -0
  74. package/dist/assets/images/icon-clear-field.svg +8 -0
  75. package/dist/assets/images/icon-close.svg +8 -0
  76. package/dist/assets/images/icon-color-lut.svg +23 -0
  77. package/dist/assets/images/icon-delete.svg +17 -0
  78. package/dist/assets/images/icon-disclosure-close.svg +12 -0
  79. package/dist/assets/images/icon-disclosure-open.svg +12 -0
  80. package/dist/assets/images/icon-display-settings.svg +21 -0
  81. package/dist/assets/images/icon-more-menu.svg +17 -0
  82. package/dist/assets/images/icon-mpr-alt.svg +9 -0
  83. package/dist/assets/images/icon-multiple-patients.svg +21 -0
  84. package/dist/assets/images/icon-next-inactive.svg +6 -0
  85. package/dist/assets/images/icon-next.svg +6 -0
  86. package/dist/assets/images/icon-patient.svg +13 -0
  87. package/dist/assets/images/icon-pause.svg +6 -0
  88. package/dist/assets/images/icon-play.svg +6 -0
  89. package/dist/assets/images/icon-prev-inactive.svg +6 -0
  90. package/dist/assets/images/icon-prev.svg +6 -0
  91. package/dist/assets/images/icon-rename.svg +15 -0
  92. package/dist/assets/images/icon-search.svg +9 -0
  93. package/dist/assets/images/icon-settings.svg +13 -0
  94. package/dist/assets/images/icon-status-alert.svg +8 -0
  95. package/dist/assets/images/icon-tool-scissor.svg +17 -0
  96. package/dist/assets/images/icon-toolbar-back.svg +12 -0
  97. package/dist/assets/images/icon-transferring.svg +6 -0
  98. package/dist/assets/images/icon-upload.svg +6 -0
  99. package/dist/assets/images/icons-alert-outline.svg +8 -0
  100. package/dist/assets/images/illustration-investigational-use.svg +20 -0
  101. package/dist/assets/images/info-action.svg +10 -0
  102. package/dist/assets/images/info-link.svg +7 -0
  103. package/dist/assets/images/info.svg +3 -0
  104. package/dist/assets/images/launch-arrow.svg +7 -0
  105. package/dist/assets/images/launch-info.svg +8 -0
  106. package/dist/assets/images/layout-advanced-3d-four-up.svg +13 -0
  107. package/dist/assets/images/layout-advanced-3d-main.svg +12 -0
  108. package/dist/assets/images/layout-advanced-3d-only.svg +9 -0
  109. package/dist/assets/images/layout-advanced-3d-primary.svg +12 -0
  110. package/dist/assets/images/layout-advanced-axial-primary.svg +11 -0
  111. package/dist/assets/images/layout-advanced-mpr.svg +11 -0
  112. package/dist/assets/images/layout-common-1x1.svg +9 -0
  113. package/dist/assets/images/layout-common-1x2.svg +10 -0
  114. package/dist/assets/images/layout-common-2x2.svg +11 -0
  115. package/dist/assets/images/layout-common-2x3.svg +12 -0
  116. package/dist/assets/images/list-bullets.svg +10 -0
  117. package/dist/assets/images/loading-ohif-mark.svg +5 -0
  118. package/dist/assets/images/lock.svg +1 -0
  119. package/dist/assets/images/logo-ohif-small.svg +5 -0
  120. package/dist/assets/images/magnifier.svg +7 -0
  121. package/dist/assets/images/navigation-panel-right-hide.svg +5 -0
  122. package/dist/assets/images/navigation-panel-right-reveal.svg +5 -0
  123. package/dist/assets/images/next-arrow.svg +12 -0
  124. package/dist/assets/images/notifications-error.svg +8 -0
  125. package/dist/assets/images/notifications-info.svg +8 -0
  126. package/dist/assets/images/notifications-success.svg +6 -0
  127. package/dist/assets/images/notifications-warning.svg +8 -0
  128. package/dist/assets/images/notificationwarning-diamond.svg +10 -0
  129. package/dist/assets/images/ohif-logo-color-darkbg.svg +20 -0
  130. package/dist/assets/images/ohif-logo.svg +18 -0
  131. package/dist/assets/images/old-play.svg +9 -0
  132. package/dist/assets/images/old-stop.svg +9 -0
  133. package/dist/assets/images/old-trash.svg +9 -0
  134. package/dist/assets/images/panel-group-more.svg +6 -0
  135. package/dist/assets/images/panel-group-open-close.svg +6 -0
  136. package/dist/assets/images/pencil.svg +4 -0
  137. package/dist/assets/images/power-off.svg +11 -0
  138. package/dist/assets/images/prev-arrow.svg +12 -0
  139. package/dist/assets/images/profile.svg +1 -0
  140. package/dist/assets/images/push-left.svg +5 -0
  141. package/dist/assets/images/push-right.svg +5 -0
  142. package/dist/assets/images/row-add.svg +8 -0
  143. package/dist/assets/images/row-edit.svg +9 -0
  144. package/dist/assets/images/row-hidden.svg +11 -0
  145. package/dist/assets/images/row-lock.svg +7 -0
  146. package/dist/assets/images/row-shown.svg +9 -0
  147. package/dist/assets/images/row-unlock.svg +7 -0
  148. package/dist/assets/images/settings.svg +6 -0
  149. package/dist/assets/images/side-panel-close-left.svg +14 -0
  150. package/dist/assets/images/side-panel-close-right.svg +14 -0
  151. package/dist/assets/images/sorting-active-down.svg +6 -0
  152. package/dist/assets/images/sorting-active-up.svg +6 -0
  153. package/dist/assets/images/sorting.svg +6 -0
  154. package/dist/assets/images/status-alert-warning.svg +9 -0
  155. package/dist/assets/images/status-alert.svg +7 -0
  156. package/dist/assets/images/status-locked.svg +7 -0
  157. package/dist/assets/images/status-tracked.svg +7 -0
  158. package/dist/assets/images/status-untracked.svg +6 -0
  159. package/dist/assets/images/tab-4d.svg +13 -0
  160. package/dist/assets/images/tab-linear.svg +8 -0
  161. package/dist/assets/images/tab-patient-info.svg +7 -0
  162. package/dist/assets/images/tab-roi-threshold.svg +10 -0
  163. package/dist/assets/images/tab-segmentation.svg +11 -0
  164. package/dist/assets/images/tab-studies.svg +13 -0
  165. package/dist/assets/images/tool-3d-rotate.svg +20 -0
  166. package/dist/assets/images/tool-angle.svg +12 -0
  167. package/dist/assets/images/tool-annotate.svg +11 -0
  168. package/dist/assets/images/tool-bidirectional.svg +21 -0
  169. package/dist/assets/images/tool-calibrate.svg +19 -0
  170. package/dist/assets/images/tool-capture.svg +10 -0
  171. package/dist/assets/images/tool-cine.svg +9 -0
  172. package/dist/assets/images/tool-circle.svg +8 -0
  173. package/dist/assets/images/tool-cobb-angle.svg +14 -0
  174. package/dist/assets/images/tool-create-threshold.svg +9 -0
  175. package/dist/assets/images/tool-crosshair.svg +14 -0
  176. package/dist/assets/images/tool-dicom-tag-browser.svg +15 -0
  177. package/dist/assets/images/tool-flip-horizontal.svg +10 -0
  178. package/dist/assets/images/tool-freehand-polygon.svg +37 -0
  179. package/dist/assets/images/tool-freehand-roi.svg +12 -0
  180. package/dist/assets/images/tool-freehand.svg +34 -0
  181. package/dist/assets/images/tool-fusion-color.svg +13 -0
  182. package/dist/assets/images/tool-invert.svg +10 -0
  183. package/dist/assets/images/tool-layout-default.svg +22 -0
  184. package/dist/assets/images/tool-length.svg +16 -0
  185. package/dist/assets/images/tool-magnetic-roi.svg +17 -0
  186. package/dist/assets/images/tool-magnify.svg +7 -0
  187. package/dist/assets/images/tool-measure-elipse.svg +12 -0
  188. package/dist/assets/images/tool-more-menu.svg +6 -0
  189. package/dist/assets/images/tool-move.svg +13 -0
  190. package/dist/assets/images/tool-polygon.svg +3 -0
  191. package/dist/assets/images/tool-quick-magnify.svg +11 -0
  192. package/dist/assets/images/tool-rectangle.svg +12 -0
  193. package/dist/assets/images/tool-reference-lines.svg +13 -0
  194. package/dist/assets/images/tool-reset.svg +9 -0
  195. package/dist/assets/images/tool-rotate-right.svg +12 -0
  196. package/dist/assets/images/tool-seg-brush.svg +9 -0
  197. package/dist/assets/images/tool-seg-eraser.svg +10 -0
  198. package/dist/assets/images/tool-seg-shape.svg +9 -0
  199. package/dist/assets/images/tool-seg-threshold.svg +17 -0
  200. package/dist/assets/images/tool-spline-roi.svg +14 -0
  201. package/dist/assets/images/tool-stack-image-sync.svg +10 -0
  202. package/dist/assets/images/tool-stack-scroll.svg +10 -0
  203. package/dist/assets/images/tool-toggle-dicom-overlay.svg +9 -0
  204. package/dist/assets/images/tool-ultrasound-bidirectional.svg +15 -0
  205. package/dist/assets/images/tool-window-level.svg +9 -0
  206. package/dist/assets/images/tool-window-region.svg +12 -0
  207. package/dist/assets/images/tool-zoom.svg +9 -0
  208. package/dist/assets/images/tracked.svg +6 -0
  209. package/dist/assets/images/ui-arrow-down.svg +3 -0
  210. package/dist/assets/images/ui-arrow-left.svg +3 -0
  211. package/dist/assets/images/ui-arrow-right.svg +3 -0
  212. package/dist/assets/images/ui-arrow-up.svg +3 -0
  213. package/dist/assets/images/unlink.svg +9 -0
  214. package/dist/assets/images/viewport-status-tracked.svg +13 -0
  215. package/dist/assets/images/viewport-window-level.svg +17 -0
  216. package/dist/cornerstoneDICOMImageLoader.min.js +1 -1
  217. package/dist/cornerstoneDICOMImageLoader.min.js.map +1 -1
  218. package/dist/google.js +1 -0
  219. package/dist/{histogram-worker.bundle.829e14ec12c2b41a4323.js → histogram-worker.bundle.6b31e5ed4c4a7a6998f2.js} +2 -2
  220. package/dist/index.html +1 -1
  221. package/dist/{polySeg.bundle.1799686b019040500219.js → polySeg.bundle.df492df5042827938ba4.js} +3 -3
  222. package/dist/{suv-peak-worker.bundle.25f8b85eab9ec06da48d.js → suv-peak-worker.bundle.8f4b505fad3d371489fe.js} +4 -4
  223. package/dist/sw.js +1 -1
  224. package/package.json +26 -23
  225. /package/dist/{998.css → 129.css} +0 -0
  226. /package/dist/{574.css → 139.css} +0 -0
  227. /package/dist/{544.css → 172.css} +0 -0
  228. /package/dist/{550.css → 363.css} +0 -0
  229. /package/dist/{325.css → 404.css} +0 -0
  230. /package/dist/{481.css → 717.css} +0 -0
  231. /package/dist/{726.bundle.c8de818cf1a3ff0cf7d2.js → 726.bundle.90d63d40a19b058034ee.js} +0 -0
  232. /package/dist/{835.bundle.4c0eaa2c1a427ee41817.js → 835.bundle.5d1951da8bbc6afdf3e0.js} +0 -0
  233. /package/dist/{931.bundle.d270a1fda9a2836c3cc5.js → 931.bundle.058f8de4606f27b31f4f.js} +0 -0
@@ -1,4 +1,4 @@
1
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[35],{
1
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[501],{
2
2
 
3
3
  /***/ 6203:
4
4
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -260,13 +260,15 @@ class BaseVolumeViewport extends _Viewport__WEBPACK_IMPORTED_MODULE_14__/* ["def
260
260
  static get useCustomRenderingPipeline() {
261
261
  return false;
262
262
  }
263
- applyViewOrientation(orientation) {
263
+ applyViewOrientation(orientation, resetCamera = true) {
264
264
  const { viewPlaneNormal, viewUp } = this._getOrientationVectors(orientation);
265
265
  const camera = this.getVtkActiveCamera();
266
266
  camera.setDirectionOfProjection(-viewPlaneNormal[0], -viewPlaneNormal[1], -viewPlaneNormal[2]);
267
267
  camera.setViewUpFrom(viewUp);
268
268
  this.initialViewUp = viewUp;
269
- this.resetCamera();
269
+ if (resetCamera) {
270
+ this.resetCamera();
271
+ }
270
272
  }
271
273
  initializeVolumeNewImageEventDispatcher() {
272
274
  const volumeNewImageHandlerBound = volumeNewImageHandler.bind(this);
@@ -495,28 +497,96 @@ class BaseVolumeViewport extends _Viewport__WEBPACK_IMPORTED_MODULE_14__/* ["def
495
497
  }
496
498
  getViewReference(viewRefSpecifier = {}) {
497
499
  const target = super.getViewReference(viewRefSpecifier);
500
+ const volumeId = this.getVolumeId(viewRefSpecifier);
498
501
  if (viewRefSpecifier?.forFrameOfReference !== false) {
499
- target.volumeId = this.getVolumeId(viewRefSpecifier);
502
+ target.volumeId = volumeId;
500
503
  }
501
- return {
502
- ...target,
503
- sliceIndex: this.getCurrentImageIdIndex(),
504
- };
504
+ if (typeof viewRefSpecifier?.sliceIndex !== 'number') {
505
+ return target;
506
+ }
507
+ const { viewPlaneNormal } = target;
508
+ const delta = viewRefSpecifier.sliceIndex - this.getSliceIndex();
509
+ const { sliceRangeInfo } = (0,_utilities__WEBPACK_IMPORTED_MODULE_11__.getVolumeViewportScrollInfo)(this, volumeId, true);
510
+ const { sliceRange, spacingInNormalDirection, camera } = sliceRangeInfo;
511
+ const { focalPoint, position } = camera;
512
+ const { newFocalPoint } = (0,_utilities__WEBPACK_IMPORTED_MODULE_11__.snapFocalPointToSlice)(focalPoint, position, sliceRange, viewPlaneNormal, spacingInNormalDirection, delta);
513
+ target.cameraFocalPoint = newFocalPoint;
514
+ return target;
505
515
  }
506
516
  isReferenceViewable(viewRef, options) {
517
+ if (!viewRef.FrameOfReferenceUID) {
518
+ return false;
519
+ }
507
520
  if (!super.isReferenceViewable(viewRef, options)) {
508
521
  return false;
509
522
  }
510
523
  if (options?.withNavigation) {
511
524
  return true;
512
525
  }
513
- const currentSliceIndex = this.getCurrentImageIdIndex();
526
+ const currentSliceIndex = this.getSliceIndex();
514
527
  const { sliceIndex } = viewRef;
515
528
  if (Array.isArray(sliceIndex)) {
516
529
  return (sliceIndex[0] <= currentSliceIndex && currentSliceIndex <= sliceIndex[1]);
517
530
  }
518
531
  return sliceIndex === undefined || sliceIndex === currentSliceIndex;
519
532
  }
533
+ scroll(delta = 1) {
534
+ const volumeId = this.getVolumeId();
535
+ const { sliceRangeInfo } = (0,_utilities__WEBPACK_IMPORTED_MODULE_11__.getVolumeViewportScrollInfo)(this, volumeId, true);
536
+ if (!sliceRangeInfo) {
537
+ return;
538
+ }
539
+ const { sliceRange, spacingInNormalDirection, camera } = sliceRangeInfo;
540
+ const { focalPoint, viewPlaneNormal, position } = camera;
541
+ const { newFocalPoint, newPosition } = (0,_utilities__WEBPACK_IMPORTED_MODULE_11__.snapFocalPointToSlice)(focalPoint, position, sliceRange, viewPlaneNormal, spacingInNormalDirection, delta);
542
+ this.setCamera({
543
+ focalPoint: newFocalPoint,
544
+ position: newPosition,
545
+ });
546
+ }
547
+ setViewReference(viewRef) {
548
+ if (!viewRef) {
549
+ return;
550
+ }
551
+ const volumeId = this.getVolumeId();
552
+ const { viewPlaneNormal: refViewPlaneNormal, FrameOfReferenceUID: refFrameOfReference, cameraFocalPoint, viewUp, } = viewRef;
553
+ let { sliceIndex } = viewRef;
554
+ const { focalPoint, viewPlaneNormal, position } = this.getCamera();
555
+ const isNegativeNormal = (0,_utilities__WEBPACK_IMPORTED_MODULE_11__.isEqualNegative)(viewPlaneNormal, refViewPlaneNormal);
556
+ const isSameNormal = (0,_utilities__WEBPACK_IMPORTED_MODULE_11__.isEqual)(viewPlaneNormal, refViewPlaneNormal);
557
+ if (typeof sliceIndex === 'number' &&
558
+ viewRef.volumeId === volumeId &&
559
+ (isNegativeNormal || isSameNormal)) {
560
+ const { currentStepIndex, sliceRangeInfo, numScrollSteps } = (0,_utilities__WEBPACK_IMPORTED_MODULE_11__.getVolumeViewportScrollInfo)(this, volumeId, true);
561
+ const { sliceRange, spacingInNormalDirection } = sliceRangeInfo;
562
+ if (isNegativeNormal) {
563
+ sliceIndex = numScrollSteps - sliceIndex - 1;
564
+ }
565
+ const delta = sliceIndex - currentStepIndex;
566
+ const { newFocalPoint, newPosition } = (0,_utilities__WEBPACK_IMPORTED_MODULE_11__.snapFocalPointToSlice)(focalPoint, position, sliceRange, viewPlaneNormal, spacingInNormalDirection, delta);
567
+ this.setCamera({ focalPoint: newFocalPoint, position: newPosition });
568
+ }
569
+ else if (refFrameOfReference === this.getFrameOfReferenceUID()) {
570
+ if (refViewPlaneNormal && !isNegativeNormal && !isSameNormal) {
571
+ this.setOrientation({ viewPlaneNormal: refViewPlaneNormal, viewUp });
572
+ return this.setViewReference(viewRef);
573
+ }
574
+ if (cameraFocalPoint) {
575
+ const focalDelta = gl_matrix__WEBPACK_IMPORTED_MODULE_3__/* .vec3.subtract */ .eR.subtract([0, 0, 0], cameraFocalPoint, focalPoint);
576
+ const useNormal = refViewPlaneNormal ?? viewPlaneNormal;
577
+ const normalDot = gl_matrix__WEBPACK_IMPORTED_MODULE_3__/* .vec3.dot */ .eR.dot(focalDelta, useNormal);
578
+ if (!(0,_utilities__WEBPACK_IMPORTED_MODULE_11__.isEqual)(normalDot, 0)) {
579
+ gl_matrix__WEBPACK_IMPORTED_MODULE_3__/* .vec3.scale */ .eR.scale(focalDelta, useNormal, normalDot);
580
+ }
581
+ const newFocal = gl_matrix__WEBPACK_IMPORTED_MODULE_3__/* .vec3.add */ .eR.add([0, 0, 0], focalPoint, focalDelta);
582
+ const newPosition = gl_matrix__WEBPACK_IMPORTED_MODULE_3__/* .vec3.add */ .eR.add([0, 0, 0], position, focalDelta);
583
+ this.setCamera({ focalPoint: newFocal, position: newPosition });
584
+ }
585
+ }
586
+ else {
587
+ throw new Error(`Incompatible view refs: ${refFrameOfReference}!==${this.getFrameOfReferenceUID()}`);
588
+ }
589
+ }
520
590
  setProperties({ voiRange, VOILUTFunction, invert, colormap, preset, interpolationType, slabThickness, rotation, } = {}, volumeId, suppressEvents = false) {
521
591
  if (this.globalDefaultProperties == null) {
522
592
  this.setDefaultProperties({
@@ -675,7 +745,7 @@ class BaseVolumeViewport extends _Viewport__WEBPACK_IMPORTED_MODULE_14__/* ["def
675
745
  this.render();
676
746
  }
677
747
  }
678
- setOrientation(orientation, immediate = true) {
748
+ setOrientation(_orientation, _immediate = true) {
679
749
  console.warn('Method "setOrientation" needs implementation');
680
750
  }
681
751
  initializeColorTransferFunction(volumeInputArray) {
@@ -811,14 +881,15 @@ class BaseVolumeViewport extends _Viewport__WEBPACK_IMPORTED_MODULE_14__/* ["def
811
881
  return volume.getScalarData()[voxelIndex];
812
882
  }
813
883
  getVolumeId(specifier) {
884
+ const actorEntries = this.getActors();
885
+ if (!actorEntries) {
886
+ return;
887
+ }
814
888
  if (!specifier?.volumeId) {
815
- const actorEntries = this.getActors();
816
- if (!actorEntries) {
817
- return;
818
- }
819
889
  return actorEntries.find((actorEntry) => actorEntry.actor.getClassName() === 'vtkVolume')?.uid;
820
890
  }
821
- return specifier.volumeId;
891
+ return actorEntries.find((actorEntry) => actorEntry.actor.getClassName() === 'vtkVolume' &&
892
+ actorEntry.uid === specifier.volumeId)?.uid;
822
893
  }
823
894
  getReferenceId(specifier = {}) {
824
895
  let { volumeId, sliceIndex: sliceIndex } = specifier;
@@ -829,7 +900,8 @@ class BaseVolumeViewport extends _Viewport__WEBPACK_IMPORTED_MODULE_14__/* ["def
829
900
  }
830
901
  volumeId = actorEntries.find((actorEntry) => actorEntry.actor.getClassName() === 'vtkVolume')?.uid;
831
902
  }
832
- sliceIndex ??= this.getCurrentImageIdIndex();
903
+ const currentIndex = this.getSliceIndex();
904
+ sliceIndex ??= currentIndex;
833
905
  const { viewPlaneNormal, focalPoint } = this.getCamera();
834
906
  const querySeparator = volumeId.indexOf('?') > -1 ? '&' : '?';
835
907
  return `volumeId:${volumeId}${querySeparator}sliceIndex=${sliceIndex}&viewPlaneNormal=${viewPlaneNormal.join(',')}&focalPoint=${focalPoint.join(',')}`;
@@ -1968,20 +2040,8 @@ class StackViewport extends Viewport/* default */.A {
1968
2040
  resize(this._cpuFallbackEnabledElement);
1969
2041
  }
1970
2042
  };
1971
- this.getFrameOfReferenceUID = () => {
1972
- const imageId = this.getCurrentImageId();
1973
- if (!imageId) {
1974
- return;
1975
- }
1976
- const imagePlaneModule = metaData.get('imagePlaneModule', imageId);
1977
- if (!imagePlaneModule) {
1978
- return;
1979
- }
1980
- return imagePlaneModule.frameOfReferenceUID;
1981
- };
1982
- this.getCornerstoneImage = () => {
1983
- return this.csImage;
1984
- };
2043
+ this.getFrameOfReferenceUID = (sliceIndex) => this.getImagePlaneReferenceData(sliceIndex)?.FrameOfReferenceUID;
2044
+ this.getCornerstoneImage = () => this.csImage;
1985
2045
  this.createActorMapper = (imageData) => {
1986
2046
  const mapper = vtkImageMapper$1.newInstance();
1987
2047
  mapper.setInputData(imageData);
@@ -2957,6 +3017,28 @@ class StackViewport extends Viewport/* default */.A {
2957
3017
  imagePixelModule,
2958
3018
  };
2959
3019
  }
3020
+ getImagePlaneReferenceData(sliceIndex = this.getCurrentImageIdIndex()) {
3021
+ const imageId = this.imageIds[sliceIndex];
3022
+ if (!imageId) {
3023
+ return;
3024
+ }
3025
+ const imagePlaneModule = metaData.get(enums.MetadataModules.IMAGE_PLANE, imageId);
3026
+ if (!imagePlaneModule) {
3027
+ return;
3028
+ }
3029
+ const { imagePositionPatient, frameOfReferenceUID: FrameOfReferenceUID } = imagePlaneModule;
3030
+ let { rowCosines, columnCosines } = imagePlaneModule;
3031
+ rowCosines ||= [1, 0, 0];
3032
+ columnCosines ||= [0, 1, 0];
3033
+ const viewPlaneNormal = (esm/* vec3.cross */.eR.cross([0, 0, 0], columnCosines, rowCosines));
3034
+ return {
3035
+ FrameOfReferenceUID,
3036
+ viewPlaneNormal,
3037
+ cameraFocalPoint: imagePositionPatient,
3038
+ referencedImageId: imageId,
3039
+ sliceIndex,
3040
+ };
3041
+ }
2960
3042
  _getCameraOrientation(imageDataDirection) {
2961
3043
  const viewPlaneNormal = imageDataDirection.slice(6, 9).map((x) => -x);
2962
3044
  const viewUp = imageDataDirection.slice(3, 6).map((x) => -x);
@@ -3272,7 +3354,7 @@ class StackViewport extends Viewport/* default */.A {
3272
3354
  this.cpuRenderingInvalidated = true;
3273
3355
  this._cpuFallbackEnabledElement.transform = (0,calculateTransform/* default */.A)(this._cpuFallbackEnabledElement);
3274
3356
  }
3275
- async addImages(stackInputs) {
3357
+ addImages(stackInputs) {
3276
3358
  const actors = this.getActors();
3277
3359
  stackInputs.forEach((stackInput) => {
3278
3360
  const image = cache/* default */.Ay.getImage(stackInput.imageId);
@@ -3567,24 +3649,39 @@ class StackViewport extends Viewport/* default */.A {
3567
3649
  return referencedImageId?.endsWith(imageURI);
3568
3650
  }
3569
3651
  getViewReference(viewRefSpecifier = {}) {
3570
- const { sliceIndex: sliceIndex = this.currentImageIdIndex } = viewRefSpecifier;
3571
- return {
3572
- ...super.getViewReference(viewRefSpecifier),
3573
- referencedImageId: `${this.imageIds[sliceIndex]}`,
3574
- sliceIndex: sliceIndex,
3575
- };
3576
- }
3577
- setView(viewRef, viewPres) {
3578
- const camera = this.getCamera();
3579
- super.setView(viewRef, viewPres);
3580
- if (viewRef) {
3581
- const { viewPlaneNormal, sliceIndex } = viewRef;
3582
- if (viewPlaneNormal &&
3583
- !(0,utilities.isEqual)(viewPlaneNormal, camera.viewPlaneNormal)) {
3652
+ const { sliceIndex = this.getCurrentImageIdIndex() } = viewRefSpecifier;
3653
+ const reference = super.getViewReference(viewRefSpecifier);
3654
+ const referencedImageId = this.imageIds[sliceIndex];
3655
+ if (!referencedImageId) {
3656
+ return;
3657
+ }
3658
+ reference.referencedImageId = referencedImageId;
3659
+ if (this.getCurrentImageIdIndex() !== sliceIndex) {
3660
+ const referenceData = this.getImagePlaneReferenceData(sliceIndex);
3661
+ if (!referenceData) {
3584
3662
  return;
3585
3663
  }
3586
- if (sliceIndex || sliceIndex === 0) {
3587
- this.setImageIdIndex(sliceIndex);
3664
+ Object.assign(reference, referenceData);
3665
+ }
3666
+ return reference;
3667
+ }
3668
+ setViewReference(viewRef) {
3669
+ if (!viewRef) {
3670
+ return;
3671
+ }
3672
+ const { referencedImageId, sliceIndex, volumeId } = viewRef;
3673
+ if (typeof sliceIndex === 'number' &&
3674
+ referencedImageId &&
3675
+ referencedImageId === this.imageIds[sliceIndex]) {
3676
+ this.setImageIdIndex(sliceIndex);
3677
+ }
3678
+ else {
3679
+ const foundIndex = this.imageIds.indexOf(referencedImageId);
3680
+ if (foundIndex !== -1) {
3681
+ this.setImageIdIndex(foundIndex);
3682
+ }
3683
+ else {
3684
+ throw new Error('Unsupported - referenced image id not found');
3588
3685
  }
3589
3686
  }
3590
3687
  }
@@ -4480,7 +4577,7 @@ class VideoViewport extends Viewport/* default */.A {
4480
4577
  if (options.withNavigation) {
4481
4578
  return true;
4482
4579
  }
4483
- const currentIndex = this.getCurrentImageIdIndex();
4580
+ const currentIndex = this.getSliceIndex();
4484
4581
  if (Array.isArray(sliceIndex)) {
4485
4582
  return currentIndex >= sliceIndex[0] && currentIndex <= sliceIndex[1];
4486
4583
  }
@@ -4517,6 +4614,9 @@ class VideoViewport extends Viewport/* default */.A {
4517
4614
  getCurrentImageIdIndex() {
4518
4615
  return Math.round(this.videoElement.currentTime * this.fps);
4519
4616
  }
4617
+ getSliceIndex() {
4618
+ return this.getCurrentImageIdIndex();
4619
+ }
4520
4620
  getCamera() {
4521
4621
  const { parallelScale } = this.videoCamera;
4522
4622
  const canvasCenter = [
@@ -4920,7 +5020,7 @@ class Viewport {
4920
5020
  this.setDisplayAreaScale(displayArea);
4921
5021
  }
4922
5022
  else {
4923
- this.setInterpolationType(this.getProperties().interpolationType || _enums__WEBPACK_IMPORTED_MODULE_13__.InterpolationType.LINEAR);
5023
+ this.setInterpolationType(this.getProperties()?.interpolationType || _enums__WEBPACK_IMPORTED_MODULE_13__.InterpolationType.LINEAR);
4924
5024
  this.setDisplayAreaFit(displayArea);
4925
5025
  }
4926
5026
  if (storeAsInitialCamera) {
@@ -5126,6 +5226,9 @@ class Viewport {
5126
5226
  getCurrentImageIdIndex() {
5127
5227
  throw new Error('Not implemented');
5128
5228
  }
5229
+ getSliceIndex() {
5230
+ throw new Error('Not implemented');
5231
+ }
5129
5232
  getReferenceId(_specifier) {
5130
5233
  return null;
5131
5234
  }
@@ -5149,6 +5252,9 @@ class Viewport {
5149
5252
  }, storeAsInitialCamera);
5150
5253
  }
5151
5254
  getZoom(compareCamera = this.initialCamera) {
5255
+ if (!compareCamera) {
5256
+ return 1;
5257
+ }
5152
5258
  const activeCamera = this.getVtkActiveCamera();
5153
5259
  const { parallelScale: initialParallelScale } = compareCamera;
5154
5260
  return initialParallelScale / activeCamera.getParallelScale();
@@ -5402,12 +5508,13 @@ class Viewport {
5402
5508
  return { widthWorld: maxX - minX, heightWorld: maxY - minY };
5403
5509
  }
5404
5510
  getViewReference(viewRefSpecifier = {}) {
5405
- const { focalPoint: cameraFocalPoint, viewPlaneNormal } = this.getCamera();
5511
+ const { focalPoint: cameraFocalPoint, viewPlaneNormal, viewUp, } = this.getCamera();
5406
5512
  const target = {
5407
5513
  FrameOfReferenceUID: this.getFrameOfReferenceUID(),
5408
5514
  cameraFocalPoint,
5409
5515
  viewPlaneNormal,
5410
- sliceIndex: viewRefSpecifier.sliceIndex ?? this.getCurrentImageIdIndex(),
5516
+ viewUp,
5517
+ sliceIndex: viewRefSpecifier.sliceIndex ?? this.getSliceIndex(),
5411
5518
  };
5412
5519
  return target;
5413
5520
  }
@@ -5421,7 +5528,7 @@ class Viewport {
5421
5528
  if (viewPlaneNormal &&
5422
5529
  !(0,_utilities__WEBPACK_IMPORTED_MODULE_9__.isEqual)(viewPlaneNormal, camera.viewPlaneNormal) &&
5423
5530
  !(0,_utilities__WEBPACK_IMPORTED_MODULE_9__.isEqual)(gl_matrix__WEBPACK_IMPORTED_MODULE_3__/* .vec3.negate */ .eR.negate(camera.viewPlaneNormal, camera.viewPlaneNormal), viewPlaneNormal)) {
5424
- return options?.asVolume === true;
5531
+ return options?.withOrientation === true;
5425
5532
  }
5426
5533
  return true;
5427
5534
  }
@@ -5449,19 +5556,22 @@ class Viewport {
5449
5556
  }
5450
5557
  return target;
5451
5558
  }
5452
- setView(viewRef, viewPres) {
5453
- if (viewPres) {
5454
- const { displayArea, zoom = this.getZoom(), pan, rotation } = viewPres;
5455
- if (displayArea !== this.getDisplayArea()) {
5456
- this.setDisplayArea(displayArea);
5457
- }
5458
- this.setZoom(zoom);
5459
- if (pan) {
5460
- this.setPan(gl_matrix__WEBPACK_IMPORTED_MODULE_3__/* .vec2.scale */ .Zc.scale([0, 0], pan, zoom));
5461
- }
5462
- if (rotation >= 0) {
5463
- this.setRotation(rotation);
5464
- }
5559
+ setViewReference(viewRef) {
5560
+ }
5561
+ setViewPresentation(viewPres) {
5562
+ if (!viewPres) {
5563
+ return;
5564
+ }
5565
+ const { displayArea, zoom = this.getZoom(), pan, rotation } = viewPres;
5566
+ if (displayArea !== this.getDisplayArea()) {
5567
+ this.setDisplayArea(displayArea);
5568
+ }
5569
+ this.setZoom(zoom);
5570
+ if (pan) {
5571
+ this.setPan(gl_matrix__WEBPACK_IMPORTED_MODULE_3__/* .vec2.scale */ .Zc.scale([0, 0], pan, zoom));
5572
+ }
5573
+ if (rotation >= 0) {
5574
+ this.setRotation(rotation);
5465
5575
  }
5466
5576
  }
5467
5577
  _shouldUseNativeDataType() {
@@ -5550,15 +5660,15 @@ class Viewport {
5550
5660
  /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
5551
5661
  /* harmony export */ });
5552
5662
  /* harmony import */ var _kitware_vtk_js_Common_DataModel_Plane__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84441);
5553
- /* harmony import */ var gl_matrix__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(44753);
5554
- /* harmony import */ var _cache__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(13320);
5555
- /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(88903);
5556
- /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(98362);
5557
- /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(35678);
5558
- /* harmony import */ var _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(6203);
5559
- /* harmony import */ var _helpers_setDefaultVolumeVOI__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(83853);
5560
- /* harmony import */ var _utilities_transferFunctionUtils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(22350);
5561
- /* harmony import */ var _utilities_getImageSliceDataForVolumeViewport__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(97508);
5663
+ /* harmony import */ var _cache__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(13320);
5664
+ /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88903);
5665
+ /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(98362);
5666
+ /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(35678);
5667
+ /* harmony import */ var _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6203);
5668
+ /* harmony import */ var _helpers_setDefaultVolumeVOI__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(83853);
5669
+ /* harmony import */ var _utilities_transferFunctionUtils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(22350);
5670
+ /* harmony import */ var _utilities_getImageSliceDataForVolumeViewport__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(97508);
5671
+ /* harmony import */ var gl_matrix__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(44753);
5562
5672
 
5563
5673
 
5564
5674
 
@@ -5569,18 +5679,14 @@ class Viewport {
5569
5679
 
5570
5680
 
5571
5681
 
5572
- class VolumeViewport extends _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A {
5682
+ class VolumeViewport extends _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A {
5573
5683
  constructor(props) {
5574
5684
  super(props);
5575
5685
  this._useAcquisitionPlaneForViewPlane = false;
5576
5686
  this.getNumberOfSlices = () => {
5577
- const { numberOfSlices } = (0,_utilities_getImageSliceDataForVolumeViewport__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(this);
5687
+ const { numberOfSlices } = (0,_utilities_getImageSliceDataForVolumeViewport__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A)(this);
5578
5688
  return numberOfSlices;
5579
5689
  };
5580
- this.getSliceIndex = () => {
5581
- const { imageIndex } = (0,_utilities_getImageSliceDataForVolumeViewport__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(this);
5582
- return imageIndex;
5583
- };
5584
5690
  this.getCurrentImageIdIndex = (volumeId) => {
5585
5691
  const { viewPlaneNormal, focalPoint } = this.getCamera();
5586
5692
  const imageData = this.getImageData(volumeId);
@@ -5588,24 +5694,28 @@ class VolumeViewport extends _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_6__/*
5588
5694
  return;
5589
5695
  }
5590
5696
  const { origin, direction, spacing } = imageData;
5591
- const spacingInNormal = (0,_utilities__WEBPACK_IMPORTED_MODULE_5__.getSpacingInNormalDirection)({ direction, spacing }, viewPlaneNormal);
5592
- const sub = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.create */ .eR.create();
5593
- gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.sub */ .eR.sub(sub, focalPoint, origin);
5594
- const distance = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.dot */ .eR.dot(sub, viewPlaneNormal);
5697
+ const spacingInNormal = (0,_utilities__WEBPACK_IMPORTED_MODULE_4__.getSpacingInNormalDirection)({ direction, spacing }, viewPlaneNormal);
5698
+ const sub = gl_matrix__WEBPACK_IMPORTED_MODULE_9__/* .vec3.create */ .eR.create();
5699
+ gl_matrix__WEBPACK_IMPORTED_MODULE_9__/* .vec3.sub */ .eR.sub(sub, focalPoint, origin);
5700
+ const distance = gl_matrix__WEBPACK_IMPORTED_MODULE_9__/* .vec3.dot */ .eR.dot(sub, viewPlaneNormal);
5595
5701
  return Math.round(Math.abs(distance) / spacingInNormal);
5596
5702
  };
5703
+ this.getSliceIndex = () => {
5704
+ const { imageIndex } = (0,_utilities_getImageSliceDataForVolumeViewport__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A)(this);
5705
+ return imageIndex;
5706
+ };
5597
5707
  this.getCurrentImageId = () => {
5598
5708
  const actorEntry = this.getDefaultActor();
5599
- if (!actorEntry || !(0,_utilities__WEBPACK_IMPORTED_MODULE_5__.actorIsA)(actorEntry, 'vtkVolume')) {
5709
+ if (!actorEntry || !(0,_utilities__WEBPACK_IMPORTED_MODULE_4__.actorIsA)(actorEntry, 'vtkVolume')) {
5600
5710
  return;
5601
5711
  }
5602
5712
  const { uid } = actorEntry;
5603
- const volume = _cache__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Ay.getVolume(uid);
5713
+ const volume = _cache__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Ay.getVolume(uid);
5604
5714
  if (!volume) {
5605
5715
  return;
5606
5716
  }
5607
5717
  const { viewPlaneNormal, focalPoint } = this.getCamera();
5608
- return (0,_utilities__WEBPACK_IMPORTED_MODULE_5__.getClosestImageId)(volume, focalPoint, viewPlaneNormal);
5718
+ return (0,_utilities__WEBPACK_IMPORTED_MODULE_4__.getClosestImageId)(volume, focalPoint, viewPlaneNormal);
5609
5719
  };
5610
5720
  this.getSlicePlaneCoordinates = () => {
5611
5721
  const actorEntry = this.getDefaultActor();
@@ -5614,30 +5724,30 @@ class VolumeViewport extends _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_6__/*
5614
5724
  return [];
5615
5725
  }
5616
5726
  const volumeId = actorEntry.uid;
5617
- const imageVolume = _cache__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Ay.getVolume(volumeId);
5727
+ const imageVolume = _cache__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Ay.getVolume(volumeId);
5618
5728
  const camera = this.getCamera();
5619
5729
  const { focalPoint, position, viewPlaneNormal } = camera;
5620
- const spacingInNormalDirection = (0,_utilities__WEBPACK_IMPORTED_MODULE_5__.getSpacingInNormalDirection)(imageVolume, viewPlaneNormal);
5621
- const sliceRange = (0,_utilities__WEBPACK_IMPORTED_MODULE_5__.getSliceRange)(actorEntry.actor, viewPlaneNormal, focalPoint);
5730
+ const spacingInNormalDirection = (0,_utilities__WEBPACK_IMPORTED_MODULE_4__.getSpacingInNormalDirection)(imageVolume, viewPlaneNormal);
5731
+ const sliceRange = (0,_utilities__WEBPACK_IMPORTED_MODULE_4__.getSliceRange)(actorEntry.actor, viewPlaneNormal, focalPoint);
5622
5732
  const numSlicesBackward = Math.round((sliceRange.current - sliceRange.min) / spacingInNormalDirection);
5623
5733
  const numSlicesForward = Math.round((sliceRange.max - sliceRange.current) / spacingInNormalDirection);
5624
5734
  const currentSliceIndex = this.getSliceIndex();
5625
5735
  const focalPoints = [];
5626
5736
  for (let i = -numSlicesBackward; i <= numSlicesForward; i++) {
5627
- const { newFocalPoint: point } = (0,_utilities__WEBPACK_IMPORTED_MODULE_5__.snapFocalPointToSlice)(focalPoint, position, sliceRange, viewPlaneNormal, spacingInNormalDirection, i);
5737
+ const { newFocalPoint: point } = (0,_utilities__WEBPACK_IMPORTED_MODULE_4__.snapFocalPointToSlice)(focalPoint, position, sliceRange, viewPlaneNormal, spacingInNormalDirection, i);
5628
5738
  focalPoints.push({ sliceIndex: currentSliceIndex + i, point });
5629
5739
  }
5630
5740
  return focalPoints;
5631
5741
  };
5632
5742
  const { orientation } = this.options;
5633
- if (orientation && orientation !== _enums__WEBPACK_IMPORTED_MODULE_4__.OrientationAxis.ACQUISITION) {
5743
+ if (orientation && orientation !== _enums__WEBPACK_IMPORTED_MODULE_3__.OrientationAxis.ACQUISITION) {
5634
5744
  this.applyViewOrientation(orientation);
5635
5745
  return;
5636
5746
  }
5637
5747
  this._useAcquisitionPlaneForViewPlane = true;
5638
5748
  }
5639
5749
  async setVolumes(volumeInputArray, immediate = false, suppressEvents = false) {
5640
- const firstImageVolume = _cache__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Ay.getVolume(volumeInputArray[0].volumeId);
5750
+ const firstImageVolume = _cache__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Ay.getVolume(volumeInputArray[0].volumeId);
5641
5751
  if (!firstImageVolume) {
5642
5752
  throw new Error(`imageVolume with id: ${firstImageVolume.volumeId} does not exist`);
5643
5753
  }
@@ -5648,7 +5758,7 @@ class VolumeViewport extends _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_6__/*
5648
5758
  return super.setVolumes(volumeInputArray, immediate, suppressEvents);
5649
5759
  }
5650
5760
  async addVolumes(volumeInputArray, immediate = false, suppressEvents = false) {
5651
- const firstImageVolume = _cache__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Ay.getVolume(volumeInputArray[0].volumeId);
5761
+ const firstImageVolume = _cache__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Ay.getVolume(volumeInputArray[0].volumeId);
5652
5762
  if (!firstImageVolume) {
5653
5763
  throw new Error(`imageVolume with id: ${firstImageVolume.volumeId} does not exist`);
5654
5764
  }
@@ -5661,8 +5771,8 @@ class VolumeViewport extends _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_6__/*
5661
5771
  setOrientation(orientation, immediate = true) {
5662
5772
  let viewPlaneNormal, viewUp;
5663
5773
  if (typeof orientation === 'string') {
5664
- if (_constants__WEBPACK_IMPORTED_MODULE_3__.MPR_CAMERA_VALUES[orientation]) {
5665
- ({ viewPlaneNormal, viewUp } = _constants__WEBPACK_IMPORTED_MODULE_3__.MPR_CAMERA_VALUES[orientation]);
5774
+ if (_constants__WEBPACK_IMPORTED_MODULE_2__.MPR_CAMERA_VALUES[orientation]) {
5775
+ ({ viewPlaneNormal, viewUp } = _constants__WEBPACK_IMPORTED_MODULE_2__.MPR_CAMERA_VALUES[orientation]);
5666
5776
  }
5667
5777
  else if (orientation === 'acquisition') {
5668
5778
  ({ viewPlaneNormal, viewUp } = this._getAcquisitionPlaneOrientation());
@@ -5691,7 +5801,7 @@ class VolumeViewport extends _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_6__/*
5691
5801
  return;
5692
5802
  }
5693
5803
  const volumeId = actorEntry.uid;
5694
- const imageVolume = _cache__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Ay.getVolume(volumeId);
5804
+ const imageVolume = _cache__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Ay.getVolume(volumeId);
5695
5805
  if (!imageVolume) {
5696
5806
  throw new Error(`imageVolume with id: ${volumeId} does not exist in cache`);
5697
5807
  }
@@ -5736,12 +5846,15 @@ class VolumeViewport extends _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_6__/*
5736
5846
  this.render();
5737
5847
  }
5738
5848
  }
5739
- resetCamera(resetPan = true, resetZoom = true, resetToCenter = true, resetRotation = false) {
5849
+ resetCamera(resetPan = true, resetZoom = true, resetToCenter = true, resetRotation = false, supressEvents = false) {
5850
+ const { orientation } = this.viewportProperties;
5851
+ if (orientation) {
5852
+ this.applyViewOrientation(orientation, false);
5853
+ }
5740
5854
  super.resetCamera(resetPan, resetZoom, resetToCenter);
5741
5855
  this.resetVolumeViewportClippingRange();
5742
5856
  const activeCamera = this.getVtkActiveCamera();
5743
5857
  const viewPlaneNormal = activeCamera.getViewPlaneNormal();
5744
- const viewUp = activeCamera.getViewUp();
5745
5858
  const focalPoint = activeCamera.getFocalPoint();
5746
5859
  const actorEntries = this.getActors();
5747
5860
  actorEntries.forEach((actorEntry) => {
@@ -5754,7 +5867,7 @@ class VolumeViewport extends _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_6__/*
5754
5867
  const clipPlane1 = _kitware_vtk_js_Common_DataModel_Plane__WEBPACK_IMPORTED_MODULE_0__/* ["default"].newInstance */ .Ay.newInstance();
5755
5868
  const clipPlane2 = _kitware_vtk_js_Common_DataModel_Plane__WEBPACK_IMPORTED_MODULE_0__/* ["default"].newInstance */ .Ay.newInstance();
5756
5869
  const newVtkPlanes = [clipPlane1, clipPlane2];
5757
- let slabThickness = _constants__WEBPACK_IMPORTED_MODULE_3__.RENDERING_DEFAULTS.MINIMUM_SLAB_THICKNESS;
5870
+ let slabThickness = _constants__WEBPACK_IMPORTED_MODULE_2__.RENDERING_DEFAULTS.MINIMUM_SLAB_THICKNESS;
5758
5871
  if (actorEntry.slabThickness) {
5759
5872
  slabThickness = actorEntry.slabThickness;
5760
5873
  }
@@ -5764,13 +5877,22 @@ class VolumeViewport extends _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_6__/*
5764
5877
  }
5765
5878
  });
5766
5879
  if (resetRotation &&
5767
- _constants__WEBPACK_IMPORTED_MODULE_3__.MPR_CAMERA_VALUES[this.viewportProperties.orientation] !== undefined) {
5768
- const viewToReset = _constants__WEBPACK_IMPORTED_MODULE_3__.MPR_CAMERA_VALUES[this.viewportProperties.orientation];
5880
+ _constants__WEBPACK_IMPORTED_MODULE_2__.MPR_CAMERA_VALUES[this.viewportProperties.orientation] !== undefined) {
5881
+ const viewToReset = _constants__WEBPACK_IMPORTED_MODULE_2__.MPR_CAMERA_VALUES[this.viewportProperties.orientation];
5769
5882
  this.setCameraNoEvent({
5770
5883
  viewUp: viewToReset.viewUp,
5771
5884
  viewPlaneNormal: viewToReset.viewPlaneNormal,
5772
5885
  });
5773
5886
  }
5887
+ if (!supressEvents) {
5888
+ const eventDetail = {
5889
+ viewportId: this.id,
5890
+ camera: this.getCamera(),
5891
+ renderingEngineId: this.renderingEngineId,
5892
+ element: this.element,
5893
+ };
5894
+ (0,_utilities__WEBPACK_IMPORTED_MODULE_4__.triggerEvent)(this.element, _enums__WEBPACK_IMPORTED_MODULE_3__.Events.CAMERA_RESET, eventDetail);
5895
+ }
5774
5896
  return true;
5775
5897
  }
5776
5898
  setSlabThickness(slabThickness, filterActorUIDs = []) {
@@ -5784,7 +5906,7 @@ class VolumeViewport extends _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_6__/*
5784
5906
  });
5785
5907
  }
5786
5908
  actorEntries.forEach((actorEntry) => {
5787
- if ((0,_utilities__WEBPACK_IMPORTED_MODULE_5__.actorIsA)(actorEntry, 'vtkVolume')) {
5909
+ if ((0,_utilities__WEBPACK_IMPORTED_MODULE_4__.actorIsA)(actorEntry, 'vtkVolume')) {
5788
5910
  actorEntry.slabThickness = slabThickness;
5789
5911
  }
5790
5912
  });
@@ -5793,6 +5915,27 @@ class VolumeViewport extends _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_6__/*
5793
5915
  this.triggerCameraModifiedEventIfNecessary(currentCamera, currentCamera);
5794
5916
  this.viewportProperties.slabThickness = slabThickness;
5795
5917
  }
5918
+ resetSlabThickness() {
5919
+ const actorEntries = this.getActors();
5920
+ actorEntries.forEach((actorEntry) => {
5921
+ if ((0,_utilities__WEBPACK_IMPORTED_MODULE_4__.actorIsA)(actorEntry, 'vtkVolume')) {
5922
+ actorEntry.slabThickness = _constants__WEBPACK_IMPORTED_MODULE_2__.RENDERING_DEFAULTS.MINIMUM_SLAB_THICKNESS;
5923
+ }
5924
+ });
5925
+ const currentCamera = this.getCamera();
5926
+ this.updateClippingPlanesForActors(currentCamera);
5927
+ this.triggerCameraModifiedEventIfNecessary(currentCamera, currentCamera);
5928
+ this.viewportProperties.slabThickness = undefined;
5929
+ }
5930
+ getViewReference(viewRefSpecifier = {}) {
5931
+ const viewRef = super.getViewReference(viewRefSpecifier);
5932
+ if (!viewRef?.volumeId) {
5933
+ return;
5934
+ }
5935
+ const volume = _cache__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Ay.getVolume(viewRef.volumeId);
5936
+ viewRef.referencedImageId = (0,_utilities__WEBPACK_IMPORTED_MODULE_4__.getClosestImageId)(volume, viewRef.cameraFocalPoint, viewRef.viewPlaneNormal);
5937
+ return viewRef;
5938
+ }
5796
5939
  resetProperties(volumeId) {
5797
5940
  this._resetProperties(volumeId);
5798
5941
  }
@@ -5804,20 +5947,20 @@ class VolumeViewport extends _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_6__/*
5804
5947
  throw new Error(`No actor found for the given volumeId: ${volumeId}`);
5805
5948
  }
5806
5949
  if (volumeActor.slabThickness) {
5807
- volumeActor.slabThickness = _constants__WEBPACK_IMPORTED_MODULE_3__.RENDERING_DEFAULTS.MINIMUM_SLAB_THICKNESS;
5950
+ volumeActor.slabThickness = _constants__WEBPACK_IMPORTED_MODULE_2__.RENDERING_DEFAULTS.MINIMUM_SLAB_THICKNESS;
5808
5951
  this.viewportProperties.slabThickness = undefined;
5809
5952
  this.updateClippingPlanesForActors(this.getCamera());
5810
5953
  }
5811
- const imageVolume = _cache__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Ay.getVolume(volumeActor.uid);
5954
+ const imageVolume = _cache__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Ay.getVolume(volumeActor.uid);
5812
5955
  if (!imageVolume) {
5813
5956
  throw new Error(`imageVolume with id: ${volumeActor.uid} does not exist in cache`);
5814
5957
  }
5815
- (0,_helpers_setDefaultVolumeVOI__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A)(volumeActor.actor, imageVolume, false);
5816
- if ((0,_utilities__WEBPACK_IMPORTED_MODULE_5__.isImageActor)(volumeActor)) {
5958
+ (0,_helpers_setDefaultVolumeVOI__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)(volumeActor.actor, imageVolume, false);
5959
+ if ((0,_utilities__WEBPACK_IMPORTED_MODULE_4__.isImageActor)(volumeActor)) {
5817
5960
  const transferFunction = volumeActor.actor
5818
5961
  .getProperty()
5819
5962
  .getRGBTransferFunction(0);
5820
- (0,_utilities_transferFunctionUtils__WEBPACK_IMPORTED_MODULE_8__.setTransferFunctionNodes)(transferFunction, this.initialTransferFunctionNodes);
5963
+ (0,_utilities_transferFunctionUtils__WEBPACK_IMPORTED_MODULE_7__.setTransferFunctionNodes)(transferFunction, this.initialTransferFunctionNodes);
5821
5964
  }
5822
5965
  const eventDetails = {
5823
5966
  ...super.getVOIModifiedEventDetail(volumeId),
@@ -5827,12 +5970,12 @@ class VolumeViewport extends _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_6__/*
5827
5970
  const resetToCenter = true;
5828
5971
  const resetCameraRotation = true;
5829
5972
  this.resetCamera(resetPan, resetZoom, resetToCenter, resetCameraRotation);
5830
- (0,_utilities__WEBPACK_IMPORTED_MODULE_5__.triggerEvent)(this.element, _enums__WEBPACK_IMPORTED_MODULE_4__.Events.VOI_MODIFIED, eventDetails);
5973
+ (0,_utilities__WEBPACK_IMPORTED_MODULE_4__.triggerEvent)(this.element, _enums__WEBPACK_IMPORTED_MODULE_3__.Events.VOI_MODIFIED, eventDetails);
5831
5974
  }
5832
5975
  getSlicesClippingPlanes() {
5833
5976
  const focalPoints = this.getSlicePlaneCoordinates();
5834
5977
  const { viewPlaneNormal } = this.getCamera();
5835
- const slabThickness = _constants__WEBPACK_IMPORTED_MODULE_3__.RENDERING_DEFAULTS.MINIMUM_SLAB_THICKNESS;
5978
+ const slabThickness = _constants__WEBPACK_IMPORTED_MODULE_2__.RENDERING_DEFAULTS.MINIMUM_SLAB_THICKNESS;
5836
5979
  return focalPoints.map(({ point, sliceIndex }) => {
5837
5980
  const vtkPlanes = [_kitware_vtk_js_Common_DataModel_Plane__WEBPACK_IMPORTED_MODULE_0__/* ["default"].newInstance */ .Ay.newInstance(), _kitware_vtk_js_Common_DataModel_Plane__WEBPACK_IMPORTED_MODULE_0__/* ["default"].newInstance */ .Ay.newInstance()];
5838
5981
  this.setOrientationOfClippingPlanes(vtkPlanes, slabThickness, viewPlaneNormal, point);
@@ -5895,6 +6038,9 @@ class VolumeViewport3D extends _BaseVolumeViewport__WEBPACK_IMPORTED_MODULE_1__/
5895
6038
  resetProperties(volumeId) {
5896
6039
  return null;
5897
6040
  }
6041
+ resetSlabThickness() {
6042
+ return null;
6043
+ }
5898
6044
  }
5899
6045
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (VolumeViewport3D);
5900
6046
 
@@ -8220,9 +8366,7 @@ async function createVolumeActor(props, element, viewportId, suppressEvents = fa
8220
8366
  if (numberOfComponents === 3) {
8221
8367
  volumeActor.getProperty().setIndependentComponents(false);
8222
8368
  }
8223
- if (imageVolume.imageIds?.length) {
8224
- await (0,setDefaultVolumeVOI/* default */.A)(volumeActor, imageVolume, useNativeDataType);
8225
- }
8369
+ await (0,setDefaultVolumeVOI/* default */.A)(volumeActor, imageVolume, useNativeDataType);
8226
8370
  if (callback) {
8227
8371
  callback({ volumeActor, volumeId });
8228
8372
  }
@@ -8313,21 +8457,19 @@ const PRIORITY = 0;
8313
8457
  const REQUEST_TYPE = _enums__WEBPACK_IMPORTED_MODULE_3__.RequestType.Prefetch;
8314
8458
  async function setDefaultVolumeVOI(volumeActor, imageVolume, useNativeDataType) {
8315
8459
  let voi = getVOIFromMetadata(imageVolume);
8316
- if (!voi) {
8460
+ if (!voi && imageVolume?.imageIds?.length) {
8317
8461
  voi = await getVOIFromMinMax(imageVolume, useNativeDataType);
8462
+ voi = handlePreScaledVolume(imageVolume, voi);
8318
8463
  }
8319
- if (!voi || voi.lower === undefined || voi.upper === undefined) {
8320
- throw new Error('Could not get VOI from metadata, nor from the min max of the image middle slice');
8321
- }
8322
- voi = handlePreScaledVolume(imageVolume, voi);
8323
- const { lower, upper } = voi;
8324
- if (lower === 0 && upper === 0) {
8464
+ if ((voi?.lower === 0 && voi?.upper === 0) ||
8465
+ voi?.lower === undefined ||
8466
+ voi?.upper === undefined) {
8325
8467
  return;
8326
8468
  }
8327
8469
  volumeActor
8328
8470
  .getProperty()
8329
8471
  .getRGBTransferFunction(0)
8330
- .setMappingRange(lower, upper);
8472
+ .setMappingRange(voi.lower, voi.upper);
8331
8473
  }
8332
8474
  function handlePreScaledVolume(imageVolume, voi) {
8333
8475
  const imageIds = imageVolume.imageIds;
@@ -8343,18 +8485,26 @@ function handlePreScaledVolume(imageVolume, voi) {
8343
8485
  return voi;
8344
8486
  }
8345
8487
  function getVOIFromMetadata(imageVolume) {
8346
- const { imageIds } = imageVolume;
8347
- const imageIdIndex = Math.floor(imageIds.length / 2);
8348
- const imageId = imageIds[imageIdIndex];
8349
- const voiLutModule = _metaData__WEBPACK_IMPORTED_MODULE_1__.get('voiLutModule', imageId);
8350
- if (voiLutModule && voiLutModule.windowWidth && voiLutModule.windowCenter) {
8351
- const { windowWidth, windowCenter } = voiLutModule;
8352
- const voi = {
8353
- windowWidth: Array.isArray(windowWidth) ? windowWidth[0] : windowWidth,
8354
- windowCenter: Array.isArray(windowCenter)
8355
- ? windowCenter[0]
8356
- : windowCenter,
8357
- };
8488
+ const { imageIds, metadata } = imageVolume;
8489
+ let voi;
8490
+ if (imageIds.length) {
8491
+ const imageIdIndex = Math.floor(imageIds.length / 2);
8492
+ const imageId = imageIds[imageIdIndex];
8493
+ const voiLutModule = _metaData__WEBPACK_IMPORTED_MODULE_1__.get('voiLutModule', imageId);
8494
+ if (voiLutModule && voiLutModule.windowWidth && voiLutModule.windowCenter) {
8495
+ const { windowWidth, windowCenter } = voiLutModule;
8496
+ voi = {
8497
+ windowWidth: Array.isArray(windowWidth) ? windowWidth[0] : windowWidth,
8498
+ windowCenter: Array.isArray(windowCenter)
8499
+ ? windowCenter[0]
8500
+ : windowCenter,
8501
+ };
8502
+ }
8503
+ }
8504
+ else {
8505
+ voi = metadata?.voiLut?.[0];
8506
+ }
8507
+ if (voi) {
8358
8508
  const { lower, upper } = _utilities__WEBPACK_IMPORTED_MODULE_2__.windowLevel.toLowHighRange(Number(voi.windowWidth), Number(voi.windowCenter));
8359
8509
  return {
8360
8510
  lower,
@@ -8417,13 +8567,13 @@ async function getVOIFromMinMax(imageVolume, useNativeDataType) {
8417
8567
  }
8418
8568
  function _getImageScalarDataFromImageVolume(imageVolume, byteOffset, bytePerPixel, voxelsPerImage) {
8419
8569
  const { scalarData } = imageVolume;
8420
- const { volumeBuffer } = scalarData;
8570
+ const { buffer } = scalarData;
8421
8571
  if (scalarData.BYTES_PER_ELEMENT !== bytePerPixel) {
8422
8572
  byteOffset *= scalarData.BYTES_PER_ELEMENT / bytePerPixel;
8423
8573
  }
8424
8574
  const TypedArray = scalarData.constructor;
8425
8575
  const imageScalarData = new TypedArray(voxelsPerImage);
8426
- const volumeBufferView = new TypedArray(volumeBuffer, byteOffset, voxelsPerImage);
8576
+ const volumeBufferView = new TypedArray(buffer, byteOffset, voxelsPerImage);
8427
8577
  imageScalarData.set(volumeBufferView);
8428
8578
  return imageScalarData;
8429
8579
  }
@@ -8849,7 +8999,12 @@ class RenderingEngine {
8849
8999
  const prevCamera = vp.getCamera();
8850
9000
  const rotation = vp.getRotation();
8851
9001
  const { flipHorizontal } = prevCamera;
8852
- vp.resetCamera();
9002
+ const resetPan = true;
9003
+ const resetZoom = true;
9004
+ const resetToCenter = true;
9005
+ const resetRotation = false;
9006
+ const supressEvents = true;
9007
+ vp.resetCamera(resetPan, resetZoom, resetToCenter, resetRotation, supressEvents);
8853
9008
  const displayArea = vp.getDisplayArea();
8854
9009
  if (keepCamera) {
8855
9010
  if (displayArea) {
@@ -15318,7 +15473,7 @@ class Cache {
15318
15473
  this._imageCacheSize = 0;
15319
15474
  this._volumeCacheSize = 0;
15320
15475
  this._maxCacheSize = 3 * ONE_GB;
15321
- this._maxInstanceSize = 2 * ONE_GB - 8;
15476
+ this._maxInstanceSize = 4 * ONE_GB - 8;
15322
15477
  this.setMaxCacheSize = (newMaxCacheSize) => {
15323
15478
  if (!newMaxCacheSize || typeof newMaxCacheSize !== 'number') {
15324
15479
  const errorMessage = `New max cacheSize ${this._maxCacheSize} should be defined and should be a number.`;
@@ -24383,7 +24538,7 @@ function findMatchingColormap(rgbPoints, actor) {
24383
24538
  return false;
24384
24539
  }
24385
24540
  for (let i = 0; i < presetRGBPoints.length; i += 4) {
24386
- if (!(0,_isEqual__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(presetRGBPoints.slice(i + 1, i + 4), rgbPoints.slice(i + 1, i + 4))) {
24541
+ if (!(0,_isEqual__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Ay)(presetRGBPoints.slice(i + 1, i + 4), rgbPoints.slice(i + 1, i + 4))) {
24387
24542
  return false;
24388
24543
  }
24389
24544
  }
@@ -24412,6 +24567,7 @@ function findMatchingColormap(rgbPoints, actor) {
24412
24567
  }
24413
24568
  return {
24414
24569
  name: matchedColormap.Name,
24570
+ opacity,
24415
24571
  };
24416
24572
  }
24417
24573
 
@@ -24746,6 +24902,7 @@ __webpack_require__.r(__webpack_exports__);
24746
24902
  __webpack_require__.d(__webpack_exports__, {
24747
24903
  PointsManager: () => (/* reexport */ PointsManager),
24748
24904
  ProgressiveIterator: () => (/* reexport */ ProgressiveIterator),
24905
+ RLEVoxelMap: () => (/* reexport */ RLEVoxelMap),
24749
24906
  VoxelManager: () => (/* reexport */ VoxelManager),
24750
24907
  actorIsA: () => (/* reexport */ actorCheck/* actorIsA */.N),
24751
24908
  applyPreset: () => (/* reexport */ applyPreset),
@@ -24801,7 +24958,9 @@ __webpack_require__.d(__webpack_exports__, {
24801
24958
  imageToWorldCoords: () => (/* reexport */ imageToWorldCoords),
24802
24959
  indexWithinDimensions: () => (/* reexport */ indexWithinDimensions),
24803
24960
  invertRgbTransferFunction: () => (/* reexport */ invertRgbTransferFunction),
24804
- isEqual: () => (/* reexport */ isEqual/* default */.A),
24961
+ isEqual: () => (/* reexport */ isEqual/* isEqual */.n4),
24962
+ isEqualAbs: () => (/* reexport */ isEqual/* isEqualAbs */.Ph),
24963
+ isEqualNegative: () => (/* reexport */ isEqual/* isEqualNegative */.WC),
24805
24964
  isImageActor: () => (/* reexport */ actorCheck/* isImageActor */.e),
24806
24965
  isOpposite: () => (/* reexport */ isOpposite),
24807
24966
  isPTPrescaledWithSUV: () => (/* reexport */ utilities_isPTPrescaledWithSUV),
@@ -25232,6 +25391,9 @@ function createUint8SharedArray(length) {
25232
25391
 
25233
25392
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/createFloat32SharedArray.js
25234
25393
 
25394
+ const SMALL_MEMORY_LIMIT = 2 * 1024 * 1024 * 1024 - 2;
25395
+ const BIG_MEMORY_LIMIT = SMALL_MEMORY_LIMIT * 2;
25396
+ const PAGE_SIZE = 65536;
25235
25397
  function createFloat32SharedArray(length) {
25236
25398
  if (!(0,init/* getShouldUseSharedArrayBuffer */.TB)()) {
25237
25399
  throw new Error('Your page is NOT cross-origin isolated, see https://developer.mozilla.org/en-US/docs/Web/API/crossOriginIsolated');
@@ -25239,8 +25401,20 @@ function createFloat32SharedArray(length) {
25239
25401
  if (window.SharedArrayBuffer === undefined) {
25240
25402
  throw new Error('SharedArrayBuffer is NOT supported in your browser see https://developer.chrome.com/blog/enabling-shared-array-buffer/');
25241
25403
  }
25242
- const sharedArrayBuffer = new SharedArrayBuffer(length * 4);
25243
- return new Float32Array(sharedArrayBuffer);
25404
+ const byteLength = length * 4;
25405
+ if (byteLength < SMALL_MEMORY_LIMIT) {
25406
+ const sharedArrayBuffer = new SharedArrayBuffer(byteLength);
25407
+ return new Float32Array(sharedArrayBuffer);
25408
+ }
25409
+ else if (byteLength < BIG_MEMORY_LIMIT) {
25410
+ const pages = Math.ceil(byteLength / PAGE_SIZE);
25411
+ const memory = new WebAssembly.Memory({
25412
+ initial: pages,
25413
+ maximum: pages,
25414
+ shared: true,
25415
+ });
25416
+ return new Float32Array(memory.buffer, 0, length);
25417
+ }
25244
25418
  }
25245
25419
  /* harmony default export */ const utilities_createFloat32SharedArray = (createFloat32SharedArray);
25246
25420
 
@@ -25428,23 +25602,28 @@ const isPTPrescaledWithSUV = (image) => {
25428
25602
 
25429
25603
 
25430
25604
 
25431
- function renderToCanvasGPU(canvas, image, modality = undefined, renderingEngineId = '_thumbnails', viewportOptions = { displayArea: { imageArea: [1, 1] } }) {
25605
+ function renderToCanvasGPU(canvas, imageOrVolume, modality = undefined, renderingEngineId = '_thumbnails', viewportOptions = {
25606
+ displayArea: { imageArea: [1, 1] },
25607
+ }) {
25432
25608
  if (!canvas || !(canvas instanceof HTMLCanvasElement)) {
25433
25609
  throw new Error('canvas element is required');
25434
25610
  }
25435
- const imageIdToPrint = image.imageId;
25611
+ const isVolume = !imageOrVolume.imageId;
25612
+ const image = !isVolume && imageOrVolume;
25613
+ const volume = isVolume && imageOrVolume;
25614
+ const imageIdToPrint = image?.imageId || volume?.volumeId;
25436
25615
  const viewportId = `renderGPUViewport-${imageIdToPrint}`;
25437
- const imageId = image.imageId;
25438
25616
  const element = document.createElement('div');
25439
25617
  const devicePixelRatio = window.devicePixelRatio || 1;
25618
+ if (!viewportOptions.displayArea) {
25619
+ viewportOptions.displayArea = { imageArea: [1, 1] };
25620
+ }
25440
25621
  const originalWidth = canvas.width;
25441
25622
  const originalHeight = canvas.height;
25442
- element.style.width = `${originalWidth + getOrCreateCanvas/* EPSILON */.p8}px`;
25443
- element.style.height = `${originalHeight + getOrCreateCanvas/* EPSILON */.p8}px`;
25623
+ element.style.width = `${originalWidth / devicePixelRatio + getOrCreateCanvas/* EPSILON */.p8}px`;
25624
+ element.style.height = `${originalHeight / devicePixelRatio + getOrCreateCanvas/* EPSILON */.p8}px`;
25444
25625
  element.style.visibility = 'hidden';
25445
25626
  element.style.position = 'absolute';
25446
- canvas.width = originalWidth * devicePixelRatio;
25447
- canvas.height = originalHeight * devicePixelRatio;
25448
25627
  document.body.appendChild(element);
25449
25628
  const uniqueId = viewportId.split(':').join('-');
25450
25629
  element.setAttribute('viewport-id-for-remove', uniqueId);
@@ -25453,26 +25632,44 @@ function renderToCanvasGPU(canvas, image, modality = undefined, renderingEngineI
25453
25632
  new RenderingEngine/* default */.Ay(renderingEngineId);
25454
25633
  let viewport = renderingEngine.getViewport(viewportId);
25455
25634
  if (!viewport) {
25456
- const stackViewportInput = {
25635
+ const viewportInput = {
25457
25636
  viewportId,
25458
- type: enums.ViewportType.STACK,
25637
+ type: isVolume ? enums.ViewportType.ORTHOGRAPHIC : enums.ViewportType.STACK,
25459
25638
  element,
25460
25639
  defaultOptions: {
25461
25640
  ...viewportOptions,
25462
25641
  suppressEvents: true,
25463
25642
  },
25464
25643
  };
25465
- renderingEngine.enableElement(stackViewportInput);
25644
+ renderingEngine.enableElement(viewportInput);
25466
25645
  viewport = renderingEngine.getViewport(viewportId);
25467
25646
  }
25468
25647
  return new Promise((resolve) => {
25469
25648
  let elementRendered = false;
25649
+ let { viewReference } = viewportOptions;
25470
25650
  const onImageRendered = (eventDetail) => {
25471
25651
  if (elementRendered) {
25472
25652
  return;
25473
25653
  }
25654
+ if (viewReference) {
25655
+ const useViewRef = viewReference;
25656
+ viewReference = null;
25657
+ viewport.setViewReference(useViewRef);
25658
+ viewport.render();
25659
+ return;
25660
+ }
25474
25661
  const context = canvas.getContext('2d');
25475
25662
  context.drawImage(temporaryCanvas, 0, 0, temporaryCanvas.width, temporaryCanvas.height, 0, 0, canvas.width, canvas.height);
25663
+ const origin = viewport.canvasToWorld([0, 0]);
25664
+ const topRight = viewport.canvasToWorld([
25665
+ temporaryCanvas.width / devicePixelRatio,
25666
+ 0,
25667
+ ]);
25668
+ const bottomLeft = viewport.canvasToWorld([
25669
+ 0,
25670
+ temporaryCanvas.height / devicePixelRatio,
25671
+ ]);
25672
+ const thicknessMm = 1;
25476
25673
  elementRendered = true;
25477
25674
  element.removeEventListener(enums.Events.IMAGE_RENDERED, onImageRendered);
25478
25675
  setTimeout(() => {
@@ -25482,10 +25679,20 @@ function renderToCanvasGPU(canvas, image, modality = undefined, renderingEngineI
25482
25679
  element.remove();
25483
25680
  });
25484
25681
  }, 0);
25485
- resolve(imageId);
25682
+ resolve({
25683
+ origin,
25684
+ bottomLeft,
25685
+ topRight,
25686
+ thicknessMm,
25687
+ });
25486
25688
  };
25487
25689
  element.addEventListener(enums.Events.IMAGE_RENDERED, onImageRendered);
25488
- viewport.renderImageObject(image);
25690
+ if (isVolume) {
25691
+ viewport.setVolumes([volume], false, true);
25692
+ }
25693
+ else {
25694
+ viewport.renderImageObject(imageOrVolume);
25695
+ }
25489
25696
  viewport.resetCamera();
25490
25697
  if (modality === 'PT' && !utilities_isPTPrescaledWithSUV(image)) {
25491
25698
  viewport.setProperties({
@@ -25509,7 +25716,12 @@ var drawImageSync = __webpack_require__(49892);
25509
25716
 
25510
25717
 
25511
25718
 
25512
- function renderToCanvasCPU(canvas, image, modality, _renderingEngineId, _viewportOptions) {
25719
+ function renderToCanvasCPU(canvas, imageOrVolume, modality, _renderingEngineId, _viewportOptions) {
25720
+ const volume = imageOrVolume;
25721
+ if (volume.volumeId) {
25722
+ throw new Error('Unsupported volume rendering for CPU');
25723
+ }
25724
+ const image = imageOrVolume;
25513
25725
  const viewport = (0,getDefaultViewport/* default */.A)(canvas, image, modality);
25514
25726
  const enabledElement = {
25515
25727
  canvas,
@@ -25521,7 +25733,7 @@ function renderToCanvasCPU(canvas, image, modality, _renderingEngineId, _viewpor
25521
25733
  const invalidated = true;
25522
25734
  return new Promise((resolve, reject) => {
25523
25735
  (0,drawImageSync/* default */.A)(enabledElement, invalidated);
25524
- resolve(image.imageId);
25736
+ resolve(null);
25525
25737
  });
25526
25738
  }
25527
25739
 
@@ -25533,28 +25745,36 @@ function renderToCanvasCPU(canvas, image, modality, _renderingEngineId, _viewpor
25533
25745
 
25534
25746
 
25535
25747
 
25748
+
25536
25749
  function loadImageToCanvas(options) {
25537
- const { canvas, imageId, requestType = enums.RequestType.Thumbnail, priority = -5, renderingEngineId = '_thumbnails', useCPURendering = false, thumbnail = false, imageAspect = false, physicalPixels = false, viewportOptions, } = options;
25538
- const devicePixelRatio = window.devicePixelRatio || 1;
25750
+ const { canvas, imageId, viewReference, requestType = enums.RequestType.Thumbnail, priority = -5, renderingEngineId = '_thumbnails', useCPURendering = false, thumbnail = false, imageAspect = false, viewportOptions: baseViewportOptions, } = options;
25751
+ const volumeId = viewReference?.volumeId;
25752
+ const isVolume = volumeId && !imageId;
25753
+ const viewportOptions = viewReference && baseViewportOptions
25754
+ ? { ...baseViewportOptions, viewReference }
25755
+ : baseViewportOptions;
25539
25756
  const renderFn = useCPURendering ? renderToCanvasCPU : renderToCanvasGPU;
25540
25757
  return new Promise((resolve, reject) => {
25541
- function successCallback(image, imageId) {
25758
+ function successCallback(imageOrVolume, imageId) {
25542
25759
  const { modality } = metaData.get('generalSeriesModule', imageId) || {};
25543
- image.isPreScaled = image.isPreScaled || image.preScale?.scaled;
25760
+ const image = !isVolume && imageOrVolume;
25761
+ const volume = isVolume && imageOrVolume;
25762
+ if (image) {
25763
+ image.isPreScaled = image.isPreScaled || image.preScale?.scaled;
25764
+ }
25544
25765
  if (thumbnail) {
25545
25766
  canvas.height = 256;
25546
25767
  canvas.width = 256;
25547
25768
  }
25548
- if (physicalPixels) {
25549
- canvas.width = canvas.offsetWidth * devicePixelRatio;
25550
- canvas.height = canvas.offsetHeight * devicePixelRatio;
25769
+ if (imageAspect && image) {
25770
+ canvas.width = image && (canvas.height * image.width) / image.height;
25551
25771
  }
25552
- if (imageAspect) {
25553
- canvas.width = (canvas.height * image.width) / image.height;
25772
+ canvas.style.width = `${canvas.width / devicePixelRatio}px`;
25773
+ canvas.style.height = `${canvas.height / devicePixelRatio}px`;
25774
+ if (volume && useCPURendering) {
25775
+ reject(new Error('CPU rendering of volume not supported'));
25554
25776
  }
25555
- renderFn(canvas, image, modality, renderingEngineId, viewportOptions).then(() => {
25556
- resolve(imageId);
25557
- });
25777
+ renderFn(canvas, imageOrVolume, modality, renderingEngineId, viewportOptions).then(resolve);
25558
25778
  }
25559
25779
  function errorCallback(error, imageId) {
25560
25780
  console.error(error, imageId);
@@ -25567,20 +25787,28 @@ function loadImageToCanvas(options) {
25567
25787
  errorCallback.call(this, error, imageId);
25568
25788
  });
25569
25789
  }
25570
- const { useNorm16Texture, preferSizeOverAccuracy } = (0,init/* getConfiguration */.D0)().rendering;
25571
- const useNativeDataType = useNorm16Texture || preferSizeOverAccuracy;
25790
+ const { useNorm16Texture } = (0,init/* getConfiguration */.D0)().rendering;
25572
25791
  const options = {
25573
25792
  targetBuffer: {
25574
- type: useNativeDataType ? undefined : 'Float32Array',
25793
+ type: useNorm16Texture ? undefined : 'Float32Array',
25575
25794
  },
25576
25795
  preScale: {
25577
25796
  enabled: true,
25578
25797
  },
25579
- useNativeDataType,
25580
25798
  useRGBA: !!useCPURendering,
25581
25799
  requestType,
25582
25800
  };
25583
- imageLoadPoolManager/* default */.A.addRequest(sendRequest.bind(null, imageId, null, options), requestType, { imageId }, priority);
25801
+ if (volumeId) {
25802
+ const volume = cache/* default */.Ay.getVolume(volumeId);
25803
+ if (!volume) {
25804
+ reject(new Error(`Volume id ${volumeId} not found in cache`));
25805
+ }
25806
+ const useImageId = volume.imageIds[0];
25807
+ successCallback(volume, useImageId);
25808
+ }
25809
+ else {
25810
+ imageLoadPoolManager/* default */.A.addRequest(sendRequest.bind(null, imageId, null, options), requestType, { imageId }, priority);
25811
+ }
25584
25812
  });
25585
25813
  }
25586
25814
 
@@ -26348,8 +26576,8 @@ function getScalingParameters(imageId) {
26348
26576
  const generalSeriesModule = (0,metaData.get)('generalSeriesModule', imageId) || {};
26349
26577
  const { modality } = generalSeriesModule;
26350
26578
  const scalingParameters = {
26351
- rescaleSlope: modalityLutModule.rescaleSlope,
26352
- rescaleIntercept: modalityLutModule.rescaleIntercept,
26579
+ rescaleSlope: modalityLutModule.rescaleSlope || 1,
26580
+ rescaleIntercept: modalityLutModule.rescaleIntercept ?? 0,
26353
26581
  modality,
26354
26582
  };
26355
26583
  const suvFactor = (0,metaData.get)('scalingModule', imageId) || {};
@@ -26462,11 +26690,15 @@ function sortImageIdsAndGetSpacing(imageIds, scanAxisNormal) {
26462
26690
  Math.abs(distanceBetweenFirstAndMiddleImages) /
26463
26691
  Math.floor(imageIds.length / 2);
26464
26692
  }
26465
- const { imagePositionPatient: origin, sliceThickness } = dist_esm.metaData.get('imagePlaneModule', sortedImageIds[0]);
26693
+ const { imagePositionPatient: origin, sliceThickness, spacingBetweenSlices, } = dist_esm.metaData.get('imagePlaneModule', sortedImageIds[0]);
26466
26694
  const { strictZSpacingForVolumeViewport } = (0,dist_esm.getConfiguration)().rendering;
26467
26695
  if (zSpacing === 0 && !strictZSpacingForVolumeViewport) {
26468
- if (sliceThickness) {
26469
- console.log('Could not calculate zSpacing. Using sliceThickness');
26696
+ if (sliceThickness && spacingBetweenSlices) {
26697
+ console.log('Could not calculate zSpacing. Using spacingBetweenSlices');
26698
+ zSpacing = spacingBetweenSlices;
26699
+ }
26700
+ else if (sliceThickness) {
26701
+ console.log('Could not calculate zSpacing and no spacingBetweenSlices. Using sliceThickness');
26470
26702
  zSpacing = sliceThickness;
26471
26703
  }
26472
26704
  else {
@@ -26579,8 +26811,8 @@ function isValidVolume(imageIds) {
26579
26811
  modality === baseMetadata.modality &&
26580
26812
  columns === baseMetadata.columns &&
26581
26813
  rows === baseMetadata.rows &&
26582
- (0,isEqual/* default */.A)(imageOrientationPatient, baseMetadata.imageOrientationPatient) &&
26583
- (0,isEqual/* default */.A)(pixelSpacing, baseMetadata.pixelSpacing));
26814
+ (0,isEqual/* default */.Ay)(imageOrientationPatient, baseMetadata.imageOrientationPatient) &&
26815
+ (0,isEqual/* default */.Ay)(pixelSpacing, baseMetadata.pixelSpacing));
26584
26816
  });
26585
26817
  return validVolume;
26586
26818
  }
@@ -27024,9 +27256,11 @@ async function convertStackToVolumeViewport({ viewport, options, }) {
27024
27256
  },
27025
27257
  ], [viewportId]);
27026
27258
  const volumeViewportNewVolumeHandler = () => {
27027
- volumeViewport.setCamera({
27028
- ...prevCamera,
27029
- });
27259
+ if (!options.orientation) {
27260
+ volumeViewport.setCamera({
27261
+ ...prevCamera,
27262
+ });
27263
+ }
27030
27264
  volumeViewport.render();
27031
27265
  element.removeEventListener(enums.Events.VOLUME_VIEWPORT_NEW_VOLUME, volumeViewportNewVolumeHandler);
27032
27266
  };
@@ -27413,7 +27647,7 @@ class VoxelManager {
27413
27647
  return [scalarData[index++], scalarData[index++], scalarData[index++]];
27414
27648
  }, (index, v) => {
27415
27649
  index *= 3;
27416
- const isChanged = !(0,isEqual/* default */.A)(scalarData[index], v);
27650
+ const isChanged = !(0,isEqual/* default */.Ay)(scalarData[index], v);
27417
27651
  scalarData[index++] = v[0];
27418
27652
  scalarData[index++] = v[1];
27419
27653
  scalarData[index++] = v[2];
@@ -27767,6 +28001,7 @@ function hexToRgb(hex) {
27767
28001
 
27768
28002
 
27769
28003
 
28004
+
27770
28005
 
27771
28006
 
27772
28007
  /***/ }),
@@ -27776,7 +28011,10 @@ function hexToRgb(hex) {
27776
28011
 
27777
28012
  "use strict";
27778
28013
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
27779
- /* harmony export */ A: () => (/* binding */ isEqual)
28014
+ /* harmony export */ Ay: () => (/* binding */ isEqual),
28015
+ /* harmony export */ Ph: () => (/* binding */ isEqualAbs),
28016
+ /* harmony export */ WC: () => (/* binding */ isEqualNegative),
28017
+ /* harmony export */ n4: () => (/* binding */ isEqual)
27780
28018
  /* harmony export */ });
27781
28019
  function areNumbersEqualWithTolerance(num1, num2, tolerance) {
27782
28020
  return Math.abs(num1 - num2) <= tolerance;
@@ -27810,6 +28048,11 @@ function isEqual(v1, v2, tolerance = 1e-5) {
27810
28048
  }
27811
28049
  return false;
27812
28050
  }
28051
+ const negative = (v) => typeof v === 'number' ? -v : v?.map ? v.map(negative) : !v;
28052
+ const abs = (v) => typeof v === 'number' ? Math.abs(v) : v?.map ? v.map(abs) : v;
28053
+ const isEqualNegative = (v1, v2, tolerance = undefined) => isEqual(v1, negative(v2), tolerance);
28054
+ const isEqualAbs = (v1, v2, tolerance = undefined) => isEqual(abs(v1), abs(v2), tolerance);
28055
+
27813
28056
 
27814
28057
 
27815
28058
  /***/ }),
@@ -28830,7 +29073,7 @@ const CursorNames = [...svgCursorNames, ...standardCursorNames];
28830
29073
 
28831
29074
  /***/ }),
28832
29075
 
28833
- /***/ 2746:
29076
+ /***/ 49574:
28834
29077
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28835
29078
 
28836
29079
  "use strict";
@@ -28848,6 +29091,7 @@ __webpack_require__.d(__webpack_exports__, {
28848
29091
  drawPath: () => (/* reexport */ drawPath),
28849
29092
  drawPolyline: () => (/* reexport */ drawPolyline),
28850
29093
  drawRect: () => (/* reexport */ drawRect),
29094
+ drawRectByCoordinates: () => (/* reexport */ drawRectByCoordinates),
28851
29095
  drawRedactionRect: () => (/* reexport */ drawRedactionRect),
28852
29096
  drawTextBox: () => (/* reexport */ drawingSvg_drawTextBox)
28853
29097
  });
@@ -29367,11 +29611,11 @@ function drawLinkedTextBox(svgDrawingHelper, annotationUID, textBoxUID, textLine
29367
29611
  }
29368
29612
  /* harmony default export */ const drawingSvg_drawLinkedTextBox = (drawLinkedTextBox);
29369
29613
 
29370
- ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/drawingSvg/drawRect.js
29614
+ ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/drawingSvg/drawRectByCoordinates.js
29371
29615
 
29372
29616
 
29373
29617
 
29374
- function drawRect(svgDrawingHelper, annotationUID, rectangleUID, start, end, options = {}, dataId = '') {
29618
+ function drawRectByCoordinates(svgDrawingHelper, annotationUID, rectangleUID, canvasCoordinates, options = {}, dataId = '') {
29375
29619
  const { color, width: _width, lineWidth, lineDash, } = Object.assign({
29376
29620
  color: 'rgb(0, 255, 0)',
29377
29621
  width: '2',
@@ -29382,16 +29626,28 @@ function drawRect(svgDrawingHelper, annotationUID, rectangleUID, start, end, opt
29382
29626
  const svgns = 'http://www.w3.org/2000/svg';
29383
29627
  const svgNodeHash = drawingSvg_getHash(annotationUID, 'rect', rectangleUID);
29384
29628
  const existingRect = svgDrawingHelper.getSvgNode(svgNodeHash);
29385
- const tlhc = [Math.min(start[0], end[0]), Math.min(start[1], end[1])];
29386
- const width = Math.abs(start[0] - end[0]);
29387
- const height = Math.abs(start[1] - end[1]);
29629
+ const [topLeft, topRight, bottomLeft, bottomRight] = canvasCoordinates;
29630
+ const width = Math.hypot(topLeft[0] - topRight[0], topLeft[1] - topRight[1]);
29631
+ const height = Math.hypot(topLeft[0] - bottomLeft[0], topLeft[1] - bottomLeft[1]);
29632
+ const center = [
29633
+ (bottomRight[0] + topLeft[0]) / 2,
29634
+ (bottomRight[1] + topLeft[1]) / 2,
29635
+ ];
29636
+ const leftEdgeCenter = [
29637
+ (bottomLeft[0] + topLeft[0]) / 2,
29638
+ (bottomLeft[1] + topLeft[1]) / 2,
29639
+ ];
29640
+ const angle = (Math.atan2(center[1] - leftEdgeCenter[1], center[0] - leftEdgeCenter[0]) *
29641
+ 180) /
29642
+ Math.PI;
29388
29643
  const attributes = {
29389
- x: `${tlhc[0]}`,
29390
- y: `${tlhc[1]}`,
29644
+ x: `${center[0] - width / 2}`,
29645
+ y: `${center[1] - height / 2}`,
29391
29646
  width: `${width}`,
29392
29647
  height: `${height}`,
29393
29648
  stroke: color,
29394
29649
  fill: 'transparent',
29650
+ transform: `rotate(${angle} ${center[0]} ${center[1]})`,
29395
29651
  'stroke-width': strokeWidth,
29396
29652
  'stroke-dasharray': lineDash,
29397
29653
  };
@@ -29409,6 +29665,16 @@ function drawRect(svgDrawingHelper, annotationUID, rectangleUID, start, end, opt
29409
29665
  }
29410
29666
  }
29411
29667
 
29668
+ ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/drawingSvg/drawRect.js
29669
+
29670
+ function drawRect(svgDrawingHelper, annotationUID, rectangleUID, start, end, options = {}, dataId = '') {
29671
+ const topLeft = [start[0], start[1]];
29672
+ const topRight = [end[0], start[1]];
29673
+ const bottomLeft = [start[0], end[1]];
29674
+ const bottomRight = [end[0], end[1]];
29675
+ drawRectByCoordinates(svgDrawingHelper, annotationUID, rectangleUID, [topLeft, topRight, bottomLeft, bottomRight], options, dataId);
29676
+ }
29677
+
29412
29678
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/drawingSvg/drawArrow.js
29413
29679
 
29414
29680
  function drawArrow(svgDrawingHelper, annotationUID, arrowUID, start, end, options = {}) {
@@ -29514,6 +29780,7 @@ function drawRedactionRect(svgDrawingHelper, annotationUID, rectangleUID, start,
29514
29780
 
29515
29781
 
29516
29782
 
29783
+
29517
29784
  /***/ }),
29518
29785
 
29519
29786
  /***/ 42111:
@@ -29749,12 +30016,12 @@ var WorkerTypes_ChangeTypes;
29749
30016
 
29750
30017
  /***/ }),
29751
30018
 
29752
- /***/ 44926:
30019
+ /***/ 94101:
29753
30020
  /***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => {
29754
30021
 
29755
30022
  "use strict";
29756
30023
 
29757
- // UNUSED EXPORTS: annotationInterpolationEventDispatcher, cameraModifiedEventDispatcher, imageRenderedEventDispatcher, imageSpacingCalibratedEventDispatcher, keyboardToolEventDispatcher, mouseToolEventDispatcher, touchToolEventDispatcher
30024
+ // UNUSED EXPORTS: annotationInterpolationEventDispatcher, cameraModifiedEventDispatcher, cameraResetEventDispatcher, imageRenderedEventDispatcher, imageSpacingCalibratedEventDispatcher, keyboardToolEventDispatcher, mouseToolEventDispatcher, touchToolEventDispatcher
29758
30025
 
29759
30026
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 28 modules
29760
30027
  var esm = __webpack_require__(92136);
@@ -29936,6 +30203,34 @@ const annotationInterpolationEventDispatcher_disable = function () {
29936
30203
  disable: annotationInterpolationEventDispatcher_disable,
29937
30204
  });
29938
30205
 
30206
+ ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/eventDispatchers/cameraResetEventDispatcher.js
30207
+
30208
+
30209
+
30210
+ const { Active: cameraResetEventDispatcher_Active, Passive: cameraResetEventDispatcher_Passive, Enabled: cameraResetEventDispatcher_Enabled } = enums.ToolModes;
30211
+ const onCameraReset = function (evt) {
30212
+ const enabledTools = (0,getToolsWithModesForMouseEvent/* default */.A)(evt, [
30213
+ cameraResetEventDispatcher_Active,
30214
+ cameraResetEventDispatcher_Passive,
30215
+ cameraResetEventDispatcher_Enabled,
30216
+ ]);
30217
+ enabledTools.forEach((tool) => {
30218
+ if (tool.onResetCamera) {
30219
+ tool.onResetCamera(evt);
30220
+ }
30221
+ });
30222
+ };
30223
+ const cameraResetEventDispatcher_enable = function (element) {
30224
+ element.addEventListener(esm.Enums.Events.CAMERA_RESET, onCameraReset);
30225
+ };
30226
+ const cameraResetEventDispatcher_disable = function (element) {
30227
+ element.removeEventListener(esm.Enums.Events.CAMERA_RESET, onCameraReset);
30228
+ };
30229
+ /* harmony default export */ const cameraResetEventDispatcher = ({
30230
+ enable: cameraResetEventDispatcher_enable,
30231
+ disable: cameraResetEventDispatcher_disable,
30232
+ });
30233
+
29939
30234
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/eventDispatchers/index.js
29940
30235
 
29941
30236
 
@@ -29947,6 +30242,7 @@ const annotationInterpolationEventDispatcher_disable = function () {
29947
30242
 
29948
30243
 
29949
30244
 
30245
+
29950
30246
  /***/ }),
29951
30247
 
29952
30248
  /***/ 90202:
@@ -29962,7 +30258,7 @@ const annotationInterpolationEventDispatcher_disable = function () {
29962
30258
  /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(74119);
29963
30259
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(90252);
29964
30260
  /* harmony import */ var _stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(38296);
29965
- /* harmony import */ var _utilities_contours__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(75534);
30261
+ /* harmony import */ var _utilities_contours__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(75908);
29966
30262
  /* harmony import */ var _utilities_contourSegmentation__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7259);
29967
30263
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(61738);
29968
30264
  /* harmony import */ var _tools__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(81848);
@@ -30065,12 +30361,14 @@ function findIntersectingContour(viewport, sourcePolyline, contourSegmentationAn
30065
30361
  function createPolylineHole(viewport, targetAnnotation, holeAnnotation) {
30066
30362
  const { windingDirection: targetWindingDirection } = targetAnnotation.data.contour;
30067
30363
  const { windingDirection: holeWindingDirection } = holeAnnotation.data.contour;
30068
- if (targetWindingDirection === holeWindingDirection) {
30069
- holeAnnotation.data.contour.polyline.reverse();
30070
- holeAnnotation.data.contour.windingDirection = targetWindingDirection * -1;
30071
- }
30072
30364
  (0,_stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_4__.addChildAnnotation)(targetAnnotation, holeAnnotation);
30073
30365
  _utilities_contourSegmentation__WEBPACK_IMPORTED_MODULE_6__.removeContourSegmentationAnnotation(holeAnnotation);
30366
+ const { contour: holeContour } = holeAnnotation.data;
30367
+ const holePolyline = convertContourPolylineToCanvasSpace(holeContour.polyline, viewport);
30368
+ _utilities_contours__WEBPACK_IMPORTED_MODULE_5__.updateContourPolyline(holeAnnotation, {
30369
+ points: holePolyline,
30370
+ closed: holeContour.closed,
30371
+ }, viewport);
30074
30372
  const { element } = viewport;
30075
30373
  const enabledElement = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.getEnabledElement)(element);
30076
30374
  const { renderingEngine } = enabledElement;
@@ -30558,7 +30856,7 @@ function _imageChangeEventListener(evt) {
30558
30856
  imageActor.getMapper().setInputData(imageData);
30559
30857
  },
30560
30858
  },
30561
- ], true, false);
30859
+ ]);
30562
30860
  (0,segmentation_triggerSegmentationRender/* default */.Ay)(toolGroup.id);
30563
30861
  return;
30564
30862
  }
@@ -30684,7 +30982,7 @@ function annotationRemovedListener(evt) {
30684
30982
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(61738);
30685
30983
  /* harmony import */ var _store_state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(55588);
30686
30984
  /* harmony import */ var _eventListeners__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(60878);
30687
- /* harmony import */ var _eventDispatchers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(44926);
30985
+ /* harmony import */ var _eventDispatchers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(94101);
30688
30986
  /* harmony import */ var _store_ToolGroupManager__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(52610);
30689
30987
 
30690
30988
 
@@ -30850,6 +31148,8 @@ class AnnotationGroup {
30850
31148
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(92136);
30851
31149
  /* harmony import */ var _annotationLocking__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(48428);
30852
31150
  /* harmony import */ var _annotationVisibility__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(21009);
31151
+ /* harmony import */ var _utilities_defineProperties__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99595);
31152
+
30853
31153
 
30854
31154
 
30855
31155
 
@@ -30946,6 +31246,8 @@ class FrameOfReferenceSpecificAnnotationManager {
30946
31246
  toolSpecificAnnotations.push(annotation);
30947
31247
  (0,_annotationLocking__WEBPACK_IMPORTED_MODULE_2__.checkAndDefineIsLockedProperty)(annotation);
30948
31248
  (0,_annotationVisibility__WEBPACK_IMPORTED_MODULE_3__.checkAndDefineIsVisibleProperty)(annotation);
31249
+ (0,_utilities_defineProperties__WEBPACK_IMPORTED_MODULE_4__/* .checkAndDefineTextBoxProperty */ .Q)(annotation);
31250
+ (0,_utilities_defineProperties__WEBPACK_IMPORTED_MODULE_4__/* .checkAndDefineCachedStatsProperty */ .d)(annotation);
30949
31251
  };
30950
31252
  this.removeAnnotation = (annotationUID) => {
30951
31253
  const { annotations } = this;
@@ -30968,14 +31270,27 @@ class FrameOfReferenceSpecificAnnotationManager {
30968
31270
  };
30969
31271
  this.removeAnnotations = (groupKey, toolName) => {
30970
31272
  const annotations = this.annotations;
30971
- if (annotations[groupKey]) {
30972
- if (toolName) {
30973
- delete annotations[groupKey][toolName];
31273
+ const removedAnnotations = [];
31274
+ if (!annotations[groupKey]) {
31275
+ return removedAnnotations;
31276
+ }
31277
+ if (toolName) {
31278
+ const annotationsForTool = annotations[groupKey][toolName];
31279
+ for (const annotation of annotationsForTool) {
31280
+ this.removeAnnotation(annotation.annotationUID);
31281
+ removedAnnotations.push(annotation);
30974
31282
  }
30975
- else {
30976
- delete annotations[groupKey];
31283
+ }
31284
+ else {
31285
+ for (const toolName in annotations[groupKey]) {
31286
+ const annotationsForTool = annotations[groupKey][toolName];
31287
+ for (const annotation of annotationsForTool) {
31288
+ this.removeAnnotation(annotation.annotationUID);
31289
+ removedAnnotations.push(annotation);
31290
+ }
30977
31291
  }
30978
31292
  }
31293
+ return removedAnnotations;
30979
31294
  };
30980
31295
  this.saveAnnotations = (groupKey, toolName) => {
30981
31296
  const annotations = this.annotations;
@@ -31028,7 +31343,12 @@ class FrameOfReferenceSpecificAnnotationManager {
31028
31343
  return count;
31029
31344
  };
31030
31345
  this.removeAllAnnotations = () => {
31031
- this.annotations = {};
31346
+ const removedAnnotations = [];
31347
+ for (const annotation of this.getAllAnnotations()) {
31348
+ this.removeAnnotation(annotation.annotationUID);
31349
+ removedAnnotations.push(annotation);
31350
+ }
31351
+ return removedAnnotations;
31032
31352
  };
31033
31353
  if (!uid) {
31034
31354
  uid = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.utilities.uuidv4();
@@ -31254,18 +31574,17 @@ __webpack_require__.r(__webpack_exports__);
31254
31574
  /* harmony export */ invalidateAnnotation: () => (/* binding */ invalidateAnnotation),
31255
31575
  /* harmony export */ removeAllAnnotations: () => (/* binding */ removeAllAnnotations),
31256
31576
  /* harmony export */ removeAnnotation: () => (/* binding */ removeAnnotation),
31577
+ /* harmony export */ removeAnnotations: () => (/* binding */ removeAnnotations),
31257
31578
  /* harmony export */ resetAnnotationManager: () => (/* binding */ resetAnnotationManager),
31258
31579
  /* harmony export */ setAnnotationManager: () => (/* binding */ setAnnotationManager)
31259
31580
  /* harmony export */ });
31260
31581
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92136);
31261
- /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(84901);
31262
- /* harmony import */ var _FrameOfReferenceSpecificAnnotationManager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(22581);
31263
- /* harmony import */ var _helpers_state__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(54177);
31582
+ /* harmony import */ var _FrameOfReferenceSpecificAnnotationManager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(22581);
31583
+ /* harmony import */ var _helpers_state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(54177);
31264
31584
 
31265
31585
 
31266
31586
 
31267
-
31268
- let defaultManager = _FrameOfReferenceSpecificAnnotationManager__WEBPACK_IMPORTED_MODULE_2__/* .defaultFrameOfReferenceSpecificAnnotationManager */ .H;
31587
+ let defaultManager = _FrameOfReferenceSpecificAnnotationManager__WEBPACK_IMPORTED_MODULE_1__/* .defaultFrameOfReferenceSpecificAnnotationManager */ .H;
31269
31588
  function getAnnotationManager() {
31270
31589
  return defaultManager;
31271
31590
  }
@@ -31273,7 +31592,7 @@ function setAnnotationManager(annotationManager) {
31273
31592
  defaultManager = annotationManager;
31274
31593
  }
31275
31594
  function resetAnnotationManager() {
31276
- defaultManager = _FrameOfReferenceSpecificAnnotationManager__WEBPACK_IMPORTED_MODULE_2__/* .defaultFrameOfReferenceSpecificAnnotationManager */ .H;
31595
+ defaultManager = _FrameOfReferenceSpecificAnnotationManager__WEBPACK_IMPORTED_MODULE_1__/* .defaultFrameOfReferenceSpecificAnnotationManager */ .H;
31277
31596
  }
31278
31597
  function getAnnotations(toolName, annotationGroupSelector) {
31279
31598
  const manager = getAnnotationManager();
@@ -31323,11 +31642,11 @@ function addAnnotation(annotation, annotationGroupSelector) {
31323
31642
  if (annotationGroupSelector instanceof HTMLDivElement) {
31324
31643
  const groupKey = manager.getGroupKey(annotationGroupSelector);
31325
31644
  manager.addAnnotation(annotation, groupKey);
31326
- (0,_helpers_state__WEBPACK_IMPORTED_MODULE_3__/* .triggerAnnotationAddedForElement */ .$f)(annotation, annotationGroupSelector);
31645
+ (0,_helpers_state__WEBPACK_IMPORTED_MODULE_2__/* .triggerAnnotationAddedForElement */ .$f)(annotation, annotationGroupSelector);
31327
31646
  }
31328
31647
  else {
31329
31648
  manager.addAnnotation(annotation);
31330
- (0,_helpers_state__WEBPACK_IMPORTED_MODULE_3__/* .triggerAnnotationAddedForFOR */ ._3)(annotation);
31649
+ (0,_helpers_state__WEBPACK_IMPORTED_MODULE_2__/* .triggerAnnotationAddedForFOR */ ._3)(annotation);
31331
31650
  }
31332
31651
  return annotation.annotationUID;
31333
31652
  }
@@ -31347,12 +31666,7 @@ function removeAnnotation(annotationUID) {
31347
31666
  }
31348
31667
  annotation.childAnnotationUIDs?.forEach((childAnnotationUID) => removeAnnotation(childAnnotationUID));
31349
31668
  manager.removeAnnotation(annotationUID);
31350
- const eventType = _enums__WEBPACK_IMPORTED_MODULE_1__.Events.ANNOTATION_REMOVED;
31351
- const eventDetail = {
31352
- annotation,
31353
- annotationManagerUID: manager.uid,
31354
- };
31355
- (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.triggerEvent)(_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.eventTarget, eventType, eventDetail);
31669
+ (0,_helpers_state__WEBPACK_IMPORTED_MODULE_2__/* .triggerAnnotationRemoved */ .SH)({ annotation, annotationManagerUID: manager.uid });
31356
31670
  }
31357
31671
  function getAnnotation(annotationUID) {
31358
31672
  const manager = getAnnotationManager();
@@ -31361,7 +31675,24 @@ function getAnnotation(annotationUID) {
31361
31675
  }
31362
31676
  function removeAllAnnotations() {
31363
31677
  const manager = getAnnotationManager();
31364
- manager.removeAllAnnotations();
31678
+ const removedAnnotations = manager.removeAllAnnotations();
31679
+ for (const annotation of removedAnnotations) {
31680
+ (0,_helpers_state__WEBPACK_IMPORTED_MODULE_2__/* .triggerAnnotationRemoved */ .SH)({
31681
+ annotation,
31682
+ annotationManagerUID: manager.uid,
31683
+ });
31684
+ }
31685
+ }
31686
+ function removeAnnotations(toolName, annotationGroupSelector) {
31687
+ const manager = getAnnotationManager();
31688
+ const groupKey = manager.getGroupKey(annotationGroupSelector);
31689
+ const removedAnnotations = manager.removeAnnotations(groupKey, toolName);
31690
+ for (const annotation of removedAnnotations) {
31691
+ (0,_helpers_state__WEBPACK_IMPORTED_MODULE_2__/* .triggerAnnotationRemoved */ .SH)({
31692
+ annotation,
31693
+ annotationManagerUID: manager.uid,
31694
+ });
31695
+ }
31365
31696
  }
31366
31697
  function invalidateAnnotation(annotation) {
31367
31698
  let currAnnotation = annotation;
@@ -31716,6 +32047,7 @@ function getStyleProperty(property, styleSpecifier, state, mode) {
31716
32047
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
31717
32048
  /* harmony export */ $f: () => (/* binding */ triggerAnnotationAddedForElement),
31718
32049
  /* harmony export */ PS: () => (/* binding */ triggerContourAnnotationCompleted),
32050
+ /* harmony export */ SH: () => (/* binding */ triggerAnnotationRemoved),
31719
32051
  /* harmony export */ XF: () => (/* binding */ triggerAnnotationModified),
31720
32052
  /* harmony export */ _3: () => (/* binding */ triggerAnnotationAddedForFOR),
31721
32053
  /* harmony export */ dZ: () => (/* binding */ triggerAnnotationCompleted)
@@ -31765,6 +32097,10 @@ function triggerAnnotationAddedForFOR(annotation) {
31765
32097
  (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.triggerEvent)(_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.eventTarget, eventType, eventDetail);
31766
32098
  });
31767
32099
  }
32100
+ function triggerAnnotationRemoved(eventDetail) {
32101
+ const eventType = _enums__WEBPACK_IMPORTED_MODULE_1__.Events.ANNOTATION_REMOVED;
32102
+ (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.triggerEvent)(_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.eventTarget, eventType, eventDetail);
32103
+ }
31768
32104
  function triggerAnnotationModified(annotation, element, changeType = _enums__WEBPACK_IMPORTED_MODULE_1__.ChangeTypes.HandlesUpdated) {
31769
32105
  const enabledElement = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.getEnabledElement)(element);
31770
32106
  const { viewportId, renderingEngineId } = enabledElement;
@@ -34678,8 +35014,8 @@ function removeTool(ToolClass) {
34678
35014
 
34679
35015
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/eventListeners/index.js + 17 modules
34680
35016
  var eventListeners = __webpack_require__(60878);
34681
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/eventDispatchers/index.js + 7 modules
34682
- var eventDispatchers = __webpack_require__(44926);
35017
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/eventDispatchers/index.js + 8 modules
35018
+ var eventDispatchers = __webpack_require__(94101);
34683
35019
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/triggerAnnotationRender.js
34684
35020
  var triggerAnnotationRender = __webpack_require__(6805);
34685
35021
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/store/addEnabledElement.js
@@ -34701,6 +35037,7 @@ function addEnabledElement(evt) {
34701
35037
  imageRenderedEventDispatcher.enable(element);
34702
35038
  cameraModifiedEventDispatcher.enable(element);
34703
35039
  imageSpacingCalibratedEventDispatcher.enable(element);
35040
+ cameraResetEventDispatcher.enable(element);
34704
35041
  mouseToolEventDispatcher.enable(element);
34705
35042
  keyboardToolEventDispatcher.enable(element);
34706
35043
  touchToolEventDispatcher.enable(element);
@@ -34791,6 +35128,7 @@ function removeEnabledElement(elementDisabledEvt) {
34791
35128
  imageRenderedEventDispatcher.disable(element);
34792
35129
  cameraModifiedEventDispatcher.disable(element);
34793
35130
  imageSpacingCalibratedEventDispatcher.disable(element);
35131
+ cameraResetEventDispatcher.disable(element);
34794
35132
  mouseToolEventDispatcher.disable(element);
34795
35133
  keyboardToolEventDispatcher.disable(element);
34796
35134
  touchToolEventDispatcher.disable(element);
@@ -34997,7 +35335,7 @@ function presentationViewSyncCallback_presentationViewSyncCallback(_synchronizer
34997
35335
  const tViewport = renderingEngine.getViewport(targetViewport.viewportId);
34998
35336
  const sViewport = renderingEngine.getViewport(sourceViewport.viewportId);
34999
35337
  const presentationView = sViewport.getViewPresentation(options);
35000
- tViewport.setView(null, presentationView);
35338
+ tViewport.setViewPresentation(presentationView);
35001
35339
  tViewport.render();
35002
35340
  }
35003
35341
 
@@ -35240,7 +35578,7 @@ const createStackImageSynchronizer = (/* unused pure expression or super */ null
35240
35578
  /* harmony import */ var _stateManagement_annotation_annotationLocking__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(48428);
35241
35579
  /* harmony import */ var _stateManagement_annotation_annotationVisibility__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(21009);
35242
35580
  /* harmony import */ var _stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(54177);
35243
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2746);
35581
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(49574);
35244
35582
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(61738);
35245
35583
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(84901);
35246
35584
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(90252);
@@ -35729,10 +36067,10 @@ class AnnotationEraserTool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .BaseToo
35729
36067
  continue;
35730
36068
  }
35731
36069
  const annotations = (0,_stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_2__.getAnnotations)(toolName, element);
35732
- if (!annotations) {
36070
+ if (!annotations.length) {
35733
36071
  continue;
35734
36072
  }
35735
- const interactableAnnotations = toolInstance.filterInteractableAnnotationsForElement(element, annotations);
36073
+ const interactableAnnotations = toolInstance.filterInteractableAnnotationsForElement(element, annotations) || [];
35736
36074
  for (const annotation of interactableAnnotations) {
35737
36075
  if (toolInstance.isPointNearTool(element, annotation, currentPoints.canvas, 10, interactionType)) {
35738
36076
  annotationsToRemove.push(annotation.annotationUID);
@@ -35764,7 +36102,7 @@ AnnotationEraserTool.toolName = 'Eraser';
35764
36102
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92136);
35765
36103
  /* harmony import */ var _store_ToolGroupManager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52610);
35766
36104
  /* harmony import */ var _stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(38296);
35767
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2746);
36105
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(49574);
35768
36106
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(61738);
35769
36107
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(84901);
35770
36108
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(90252);
@@ -35814,7 +36152,12 @@ class CrosshairsTool extends _base__WEBPACK_IMPORTED_MODULE_3__/* .AnnotationToo
35814
36152
  supportedInteractionTypes: ['Mouse'],
35815
36153
  configuration: {
35816
36154
  shadow: true,
35817
- viewportIndicators: true,
36155
+ viewportIndicators: false,
36156
+ viewportIndicatorsConfig: {
36157
+ radius: 5,
36158
+ x: null,
36159
+ y: null,
36160
+ },
35818
36161
  autoPan: {
35819
36162
  enabled: false,
35820
36163
  panSize: 10,
@@ -35878,12 +36221,20 @@ class CrosshairsTool extends _base__WEBPACK_IMPORTED_MODULE_3__/* .AnnotationToo
35878
36221
  viewportsInfo.forEach(({ viewportId, renderingEngineId }) => {
35879
36222
  const enabledElement = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_4__.getEnabledElementByIds)(viewportId, renderingEngineId);
35880
36223
  const { viewport } = enabledElement;
36224
+ const resetPan = true;
36225
+ const resetZoom = true;
36226
+ const resetToCenter = true;
36227
+ const resetRotation = true;
36228
+ const supressEvents = true;
36229
+ viewport.resetCamera(resetPan, resetZoom, resetToCenter, resetRotation, supressEvents);
36230
+ viewport.resetSlabThickness();
35881
36231
  const { element } = viewport;
35882
36232
  let annotations = this._getAnnotations(enabledElement);
35883
36233
  annotations = this.filterInteractableAnnotationsForElement(element, annotations);
35884
36234
  if (annotations.length) {
35885
36235
  (0,_stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_6__.removeAnnotation)(annotations[0].annotationUID);
35886
36236
  }
36237
+ viewport.render();
35887
36238
  });
35888
36239
  this.computeToolCenter(viewportsInfo);
35889
36240
  };
@@ -36021,6 +36372,9 @@ class CrosshairsTool extends _base__WEBPACK_IMPORTED_MODULE_3__/* .AnnotationToo
36021
36372
  const viewportIdsToRender = (0,_utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_10__.getViewportIdsWithToolToRender)(element, this.getToolName(), requireSameOrientation);
36022
36373
  (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_15__/* ["default"] */ .A)(renderingEngine, viewportIdsToRender);
36023
36374
  };
36375
+ this.onResetCamera = (evt) => {
36376
+ this.resetCrosshairs();
36377
+ };
36024
36378
  this.mouseMoveCallback = (evt, filteredToolAnnotations) => {
36025
36379
  const { element, currentPoints } = evt.detail;
36026
36380
  const canvasCoords = currentPoints.canvas;
@@ -36402,12 +36756,16 @@ class CrosshairsTool extends _base__WEBPACK_IMPORTED_MODULE_3__/* .AnnotationToo
36402
36756
  renderStatus = true;
36403
36757
  data.handles.rotationPoints = newRtpoints;
36404
36758
  data.handles.slabThicknessPoints = newStpoints;
36759
+ debugger;
36405
36760
  if (this.configuration.viewportIndicators) {
36761
+ const { viewportIndicatorsConfig } = this.configuration;
36762
+ const xOffset = viewportIndicatorsConfig?.xOffset || 0.95;
36763
+ const yOffset = viewportIndicatorsConfig?.yOffset || 0.05;
36406
36764
  const referenceColorCoordinates = [
36407
- clientWidth * 0.95,
36408
- clientHeight * 0.05,
36765
+ clientWidth * xOffset,
36766
+ clientHeight * yOffset,
36409
36767
  ];
36410
- const circleRadius = canvasDiagonalLength * 0.01;
36768
+ const circleRadius = viewportIndicatorsConfig?.circleRadius || canvasDiagonalLength * 0.01;
36411
36769
  const circleUID = '0';
36412
36770
  (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_7__.drawCircle)(svgDrawingHelper, annotationUID, circleUID, referenceColorCoordinates, circleRadius, { color, fill: color });
36413
36771
  }
@@ -37773,7 +38131,7 @@ OrientationMarkerTool.toolName = 'OrientationMarker';
37773
38131
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(92136);
37774
38132
  /* harmony import */ var _stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(38296);
37775
38133
  /* harmony import */ var _store_ToolGroupManager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(52610);
37776
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2746);
38134
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(49574);
37777
38135
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(23072);
37778
38136
  /* harmony import */ var _base_AnnotationDisplayTool__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(28062);
37779
38137
 
@@ -38062,7 +38420,7 @@ PlanarRotateTool.toolName = 'PlanarRotate';
38062
38420
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92136);
38063
38421
  /* harmony import */ var _stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(38296);
38064
38422
  /* harmony import */ var _stateManagement_annotation_annotationVisibility__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21009);
38065
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2746);
38423
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49574);
38066
38424
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(90252);
38067
38425
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(23072);
38068
38426
  /* harmony import */ var gl_matrix__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(44753);
@@ -38390,7 +38748,7 @@ ReferenceCursors.toolName = 'ReferenceCursors';
38390
38748
  /* harmony import */ var gl_matrix__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(44753);
38391
38749
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(92136);
38392
38750
  /* harmony import */ var _stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(38296);
38393
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2746);
38751
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49574);
38394
38752
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(90252);
38395
38753
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(23072);
38396
38754
  /* harmony import */ var _base_AnnotationDisplayTool__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(28062);
@@ -38629,7 +38987,7 @@ ReferenceLines.toolName = 'ReferenceLines';
38629
38987
  /* harmony import */ var gl_matrix__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(44753);
38630
38988
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(92136);
38631
38989
  /* harmony import */ var _stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(38296);
38632
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2746);
38990
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(49574);
38633
38991
  /* harmony import */ var _store_ToolGroupManager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52610);
38634
38992
 
38635
38993
 
@@ -38931,8 +39289,8 @@ class ScaleOverlayTool extends _base_AnnotationDisplayTool__WEBPACK_IMPORTED_MOD
38931
39289
  viewportId: enabledElement.viewport.id,
38932
39290
  };
38933
39291
  const canvasSize = {
38934
- width: canvas.width,
38935
- height: canvas.height,
39292
+ width: canvas.width / window.devicePixelRatio || 1,
39293
+ height: canvas.height / window.devicePixelRatio || 1,
38936
39294
  };
38937
39295
  const topLeft = annotation.data.handles.points[0];
38938
39296
  const topRight = annotation.data.handles.points[1];
@@ -39345,7 +39703,7 @@ SculptorTool.toolName = 'SculptorTool';
39345
39703
  "use strict";
39346
39704
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92136);
39347
39705
  /* harmony import */ var _stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(38296);
39348
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2746);
39706
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49574);
39349
39707
  /* harmony import */ var _store_ToolGroupManager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(52610);
39350
39708
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(23072);
39351
39709
  /* harmony import */ var _base_AnnotationDisplayTool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(28062);
@@ -39672,6 +40030,7 @@ class TrackballRotateTool extends _base__WEBPACK_IMPORTED_MODULE_4__/* .BaseTool
39672
40030
  }) {
39673
40031
  super(toolProps, defaultToolProps);
39674
40032
  this._resizeObservers = new Map();
40033
+ this._hasResolutionChanged = false;
39675
40034
  this.preMouseDownCallback = (evt) => {
39676
40035
  const eventDetail = evt.detail;
39677
40036
  const { element } = eventDetail;
@@ -39681,15 +40040,19 @@ class TrackballRotateTool extends _base__WEBPACK_IMPORTED_MODULE_4__/* .BaseTool
39681
40040
  const actor = actorEntry.actor;
39682
40041
  const mapper = actor.getMapper();
39683
40042
  const originalSampleDistance = mapper.getSampleDistance();
39684
- mapper.setSampleDistance(originalSampleDistance * 2);
39685
- if (this.cleanUp !== null) {
39686
- document.removeEventListener('mouseup', this.cleanUp);
40043
+ if (!this._hasResolutionChanged) {
40044
+ mapper.setSampleDistance(originalSampleDistance * 2);
40045
+ this._hasResolutionChanged = true;
40046
+ if (this.cleanUp !== null) {
40047
+ document.removeEventListener('mouseup', this.cleanUp);
40048
+ }
40049
+ this.cleanUp = () => {
40050
+ mapper.setSampleDistance(originalSampleDistance);
40051
+ viewport.render();
40052
+ this._hasResolutionChanged = false;
40053
+ };
40054
+ document.addEventListener('mouseup', this.cleanUp, { once: true });
39687
40055
  }
39688
- this.cleanUp = () => {
39689
- mapper.setSampleDistance(originalSampleDistance);
39690
- viewport.render();
39691
- };
39692
- document.addEventListener('mouseup', this.cleanUp, { once: true });
39693
40056
  return true;
39694
40057
  };
39695
40058
  this._getViewportsInfo = () => {
@@ -39890,6 +40253,248 @@ VolumeRotateMouseWheelTool.toolName = 'VolumeRotateMouseWheel';
39890
40253
  /* unused harmony default export */ var __WEBPACK_DEFAULT_EXPORT__ = ((/* unused pure expression or super */ null && (VolumeRotateMouseWheelTool)));
39891
40254
 
39892
40255
 
40256
+ /***/ }),
40257
+
40258
+ /***/ 60747:
40259
+ /***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => {
40260
+
40261
+ "use strict";
40262
+ /* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96214);
40263
+ /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(92136);
40264
+ /* harmony import */ var _stateManagement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95778);
40265
+ /* harmony import */ var _stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(54177);
40266
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(49574);
40267
+ /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(61738);
40268
+ /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(84901);
40269
+ /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(90252);
40270
+ /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(40233);
40271
+ /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(23072);
40272
+ /* harmony import */ var _utilities_voi__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(14149);
40273
+ /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(74119);
40274
+
40275
+
40276
+
40277
+
40278
+
40279
+
40280
+
40281
+
40282
+
40283
+
40284
+
40285
+
40286
+ class WindowLevelRegionTool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .AnnotationTool */ .EC {
40287
+ constructor(toolProps = {}, defaultToolProps = {
40288
+ supportedInteractionTypes: ['Mouse', 'Touch'],
40289
+ configuration: {
40290
+ minWindowWidth: 10,
40291
+ },
40292
+ }) {
40293
+ super(toolProps, defaultToolProps);
40294
+ this.addNewAnnotation = (evt) => {
40295
+ const eventDetail = evt.detail;
40296
+ const { currentPoints, element } = eventDetail;
40297
+ const worldPos = currentPoints.world;
40298
+ const enabledElement = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.getEnabledElement)(element);
40299
+ const { viewport, renderingEngine } = enabledElement;
40300
+ this.isDrawing = true;
40301
+ const camera = viewport.getCamera();
40302
+ const { viewPlaneNormal, viewUp } = camera;
40303
+ const referencedImageId = this.getReferencedImageId(viewport, worldPos, viewPlaneNormal, viewUp);
40304
+ const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
40305
+ const annotation = {
40306
+ invalidated: true,
40307
+ highlighted: true,
40308
+ metadata: {
40309
+ toolName: this.getToolName(),
40310
+ viewPlaneNormal: [...viewPlaneNormal],
40311
+ viewUp: [...viewUp],
40312
+ FrameOfReferenceUID,
40313
+ referencedImageId,
40314
+ },
40315
+ data: {
40316
+ handles: {
40317
+ points: [
40318
+ [...worldPos],
40319
+ [...worldPos],
40320
+ [...worldPos],
40321
+ [...worldPos],
40322
+ ],
40323
+ },
40324
+ cachedStats: {},
40325
+ },
40326
+ };
40327
+ (0,_stateManagement__WEBPACK_IMPORTED_MODULE_2__/* .addAnnotation */ .lC)(annotation, element);
40328
+ const viewportIdsToRender = (0,_utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_7__.getViewportIdsWithToolToRender)(element, this.getToolName());
40329
+ this.editData = {
40330
+ annotation,
40331
+ viewportIdsToRender,
40332
+ };
40333
+ this._activateDraw(element);
40334
+ (0,_cursors_elementCursor__WEBPACK_IMPORTED_MODULE_8__.hideElementCursor)(element);
40335
+ evt.preventDefault();
40336
+ (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(renderingEngine, viewportIdsToRender);
40337
+ return annotation;
40338
+ };
40339
+ this._endCallback = (evt) => {
40340
+ const eventDetail = evt.detail;
40341
+ const { element } = eventDetail;
40342
+ const { annotation, viewportIdsToRender } = this.editData;
40343
+ this._deactivateDraw(element);
40344
+ (0,_cursors_elementCursor__WEBPACK_IMPORTED_MODULE_8__.resetElementCursor)(element);
40345
+ const { renderingEngine } = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.getEnabledElement)(element);
40346
+ this.editData = null;
40347
+ this.isDrawing = false;
40348
+ (0,_stateManagement__WEBPACK_IMPORTED_MODULE_2__/* .removeAnnotation */ .O8)(annotation.annotationUID);
40349
+ (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(renderingEngine, viewportIdsToRender);
40350
+ (0,_stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_3__/* .triggerAnnotationCompleted */ .dZ)(annotation);
40351
+ this.applyWindowLevelRegion(annotation, element);
40352
+ };
40353
+ this._dragCallback = (evt) => {
40354
+ this.isDrawing = true;
40355
+ const eventDetail = evt.detail;
40356
+ const { element } = eventDetail;
40357
+ const { annotation, viewportIdsToRender } = this.editData;
40358
+ const { data } = annotation;
40359
+ const { currentPoints } = eventDetail;
40360
+ const enabledElement = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.getEnabledElement)(element);
40361
+ const { worldToCanvas, canvasToWorld } = enabledElement.viewport;
40362
+ const worldPos = currentPoints.world;
40363
+ const { points } = data.handles;
40364
+ const DEFAULT_HANDLE_INDEX = 3;
40365
+ points[DEFAULT_HANDLE_INDEX] = [...worldPos];
40366
+ const bottomLeftCanvas = worldToCanvas(points[0]);
40367
+ const topRightCanvas = worldToCanvas(points[3]);
40368
+ const bottomRightCanvas = [
40369
+ topRightCanvas[0],
40370
+ bottomLeftCanvas[1],
40371
+ ];
40372
+ const topLeftCanvas = [
40373
+ bottomLeftCanvas[0],
40374
+ topRightCanvas[1],
40375
+ ];
40376
+ const bottomRightWorld = canvasToWorld(bottomRightCanvas);
40377
+ const topLeftWorld = canvasToWorld(topLeftCanvas);
40378
+ points[1] = bottomRightWorld;
40379
+ points[2] = topLeftWorld;
40380
+ annotation.invalidated = true;
40381
+ const { renderingEngine } = enabledElement;
40382
+ (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(renderingEngine, viewportIdsToRender);
40383
+ };
40384
+ this._activateDraw = (element) => {
40385
+ _store__WEBPACK_IMPORTED_MODULE_5__/* .state */ .wk.isInteractingWithTool = true;
40386
+ element.addEventListener(_enums__WEBPACK_IMPORTED_MODULE_6__.Events.MOUSE_UP, this._endCallback);
40387
+ element.addEventListener(_enums__WEBPACK_IMPORTED_MODULE_6__.Events.MOUSE_DRAG, this._dragCallback);
40388
+ element.addEventListener(_enums__WEBPACK_IMPORTED_MODULE_6__.Events.MOUSE_MOVE, this._dragCallback);
40389
+ element.addEventListener(_enums__WEBPACK_IMPORTED_MODULE_6__.Events.MOUSE_CLICK, this._endCallback);
40390
+ element.addEventListener(_enums__WEBPACK_IMPORTED_MODULE_6__.Events.TOUCH_END, this._endCallback);
40391
+ element.addEventListener(_enums__WEBPACK_IMPORTED_MODULE_6__.Events.TOUCH_DRAG, this._dragCallback);
40392
+ element.addEventListener(_enums__WEBPACK_IMPORTED_MODULE_6__.Events.TOUCH_TAP, this._endCallback);
40393
+ };
40394
+ this._deactivateDraw = (element) => {
40395
+ _store__WEBPACK_IMPORTED_MODULE_5__/* .state */ .wk.isInteractingWithTool = false;
40396
+ element.removeEventListener(_enums__WEBPACK_IMPORTED_MODULE_6__.Events.MOUSE_UP, this._endCallback);
40397
+ element.removeEventListener(_enums__WEBPACK_IMPORTED_MODULE_6__.Events.MOUSE_DRAG, this._dragCallback);
40398
+ element.removeEventListener(_enums__WEBPACK_IMPORTED_MODULE_6__.Events.MOUSE_MOVE, this._dragCallback);
40399
+ element.removeEventListener(_enums__WEBPACK_IMPORTED_MODULE_6__.Events.MOUSE_CLICK, this._endCallback);
40400
+ element.removeEventListener(_enums__WEBPACK_IMPORTED_MODULE_6__.Events.TOUCH_END, this._endCallback);
40401
+ element.removeEventListener(_enums__WEBPACK_IMPORTED_MODULE_6__.Events.TOUCH_DRAG, this._dragCallback);
40402
+ element.removeEventListener(_enums__WEBPACK_IMPORTED_MODULE_6__.Events.TOUCH_TAP, this._endCallback);
40403
+ };
40404
+ this.renderAnnotation = (enabledElement, svgDrawingHelper) => {
40405
+ let renderStatus = false;
40406
+ const { viewport } = enabledElement;
40407
+ const { element } = viewport;
40408
+ let annotations = (0,_stateManagement__WEBPACK_IMPORTED_MODULE_2__/* .getAnnotations */ .Rh)(this.getToolName(), element);
40409
+ if (!annotations?.length) {
40410
+ return renderStatus;
40411
+ }
40412
+ annotations = this.filterInteractableAnnotationsForElement(element, annotations);
40413
+ if (!annotations?.length) {
40414
+ return renderStatus;
40415
+ }
40416
+ const styleSpecifier = {
40417
+ toolGroupId: this.toolGroupId,
40418
+ toolName: this.getToolName(),
40419
+ viewportId: enabledElement.viewport.id,
40420
+ };
40421
+ for (let i = 0; i < annotations.length; i++) {
40422
+ const annotation = annotations[i];
40423
+ const { annotationUID, data } = annotation;
40424
+ const { points } = data.handles;
40425
+ const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p));
40426
+ styleSpecifier.annotationUID = annotationUID;
40427
+ const { color, lineWidth, lineDash } = this.getAnnotationStyle({
40428
+ annotation,
40429
+ styleSpecifier,
40430
+ });
40431
+ if (!viewport.getRenderingEngine()) {
40432
+ console.warn('Rendering Engine has been destroyed');
40433
+ return renderStatus;
40434
+ }
40435
+ const dataId = `${annotationUID}-rect`;
40436
+ const rectangleUID = '0';
40437
+ (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_4__.drawRect)(svgDrawingHelper, annotationUID, rectangleUID, canvasCoordinates[0], canvasCoordinates[3], {
40438
+ color,
40439
+ lineDash,
40440
+ lineWidth,
40441
+ }, dataId);
40442
+ renderStatus = true;
40443
+ }
40444
+ return renderStatus;
40445
+ };
40446
+ this.applyWindowLevelRegion = (annotation, element) => {
40447
+ const enabledElement = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.getEnabledElement)(element);
40448
+ const { viewport } = enabledElement;
40449
+ const imageData = _utilities_voi__WEBPACK_IMPORTED_MODULE_10__.windowLevel.extractWindowLevelRegionToolData(viewport);
40450
+ const { data } = annotation;
40451
+ const { points } = data.handles;
40452
+ const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p));
40453
+ const startCanvas = canvasCoordinates[0];
40454
+ const endCanvas = canvasCoordinates[3];
40455
+ let left = Math.min(startCanvas[0], endCanvas[0]);
40456
+ let top = Math.min(startCanvas[1], endCanvas[1]);
40457
+ let width = Math.abs(startCanvas[0] - endCanvas[0]);
40458
+ let height = Math.abs(startCanvas[1] - endCanvas[1]);
40459
+ left = (0,_utilities__WEBPACK_IMPORTED_MODULE_11__.clip)(left, 0, imageData.width);
40460
+ top = (0,_utilities__WEBPACK_IMPORTED_MODULE_11__.clip)(top, 0, imageData.height);
40461
+ width = Math.floor(Math.min(width, Math.abs(imageData.width - left)));
40462
+ height = Math.floor(Math.min(height, Math.abs(imageData.height - top)));
40463
+ const pixelLuminanceData = _utilities_voi__WEBPACK_IMPORTED_MODULE_10__.windowLevel.getLuminanceFromRegion(imageData, Math.round(left), Math.round(top), width, height);
40464
+ const minMaxMean = _utilities_voi__WEBPACK_IMPORTED_MODULE_10__.windowLevel.calculateMinMaxMean(pixelLuminanceData, imageData.minPixelValue, imageData.maxPixelValue);
40465
+ if (this.configuration.minWindowWidth === undefined) {
40466
+ this.configuration.minWindowWidth = 10;
40467
+ }
40468
+ const windowWidth = Math.max(Math.abs(minMaxMean.max - minMaxMean.min), this.configuration.minWindowWidth);
40469
+ const windowCenter = minMaxMean.mean;
40470
+ const voiRange = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.utilities.windowLevel.toLowHighRange(windowWidth, windowCenter);
40471
+ viewport.setProperties({ voiRange });
40472
+ viewport.render();
40473
+ };
40474
+ this.cancel = () => {
40475
+ return null;
40476
+ };
40477
+ this.isPointNearTool = () => {
40478
+ return null;
40479
+ };
40480
+ this.toolSelectedCallback = () => {
40481
+ return null;
40482
+ };
40483
+ this.handleSelectedCallback = () => {
40484
+ return null;
40485
+ };
40486
+ this._activateModify = () => {
40487
+ return null;
40488
+ };
40489
+ this._deactivateModify = () => {
40490
+ return null;
40491
+ };
40492
+ }
40493
+ }
40494
+ WindowLevelRegionTool.toolName = 'WindowLevelRegion';
40495
+ /* unused harmony default export */ var __WEBPACK_DEFAULT_EXPORT__ = ((/* unused pure expression or super */ null && (WindowLevelRegionTool)));
40496
+
40497
+
39893
40498
  /***/ }),
39894
40499
 
39895
40500
  /***/ 455:
@@ -40301,7 +40906,7 @@ ZoomTool.toolName = 'Zoom';
40301
40906
  /* harmony import */ var _utilities_math_line__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(21954);
40302
40907
  /* harmony import */ var _utilities_math_angle_angleBetweenLines__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(52475);
40303
40908
  /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(74119);
40304
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(2746);
40909
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(49574);
40305
40910
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(61738);
40306
40911
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(90252);
40307
40912
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(23072);
@@ -40357,6 +40962,7 @@ class AngleTool extends _base__WEBPACK_IMPORTED_MODULE_2__/* .AnnotationTool */
40357
40962
  viewUp: [...viewUp],
40358
40963
  FrameOfReferenceUID,
40359
40964
  referencedImageId,
40965
+ ...viewport.getViewReference({ points: [worldPos] }),
40360
40966
  },
40361
40967
  data: {
40362
40968
  handles: {
@@ -40770,7 +41376,7 @@ AngleTool.toolName = 'Angle';
40770
41376
  /* harmony import */ var _stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(38296);
40771
41377
  /* harmony import */ var _stateManagement_annotation_annotationLocking__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(48428);
40772
41378
  /* harmony import */ var _utilities_math_line__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(21954);
40773
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2746);
41379
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(49574);
40774
41380
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(61738);
40775
41381
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(90252);
40776
41382
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(23072);
@@ -40822,6 +41428,7 @@ class ArrowAnnotateTool extends _base__WEBPACK_IMPORTED_MODULE_2__/* .Annotation
40822
41428
  viewUp: [...viewUp],
40823
41429
  FrameOfReferenceUID,
40824
41430
  referencedImageId,
41431
+ ...viewport.getViewReference({ points: [worldPos] }),
40825
41432
  },
40826
41433
  data: {
40827
41434
  text: '',
@@ -41219,7 +41826,7 @@ ArrowAnnotateTool.toolName = 'ArrowAnnotate';
41219
41826
  /* harmony import */ var _stateManagement_annotation_annotationLocking__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(48428);
41220
41827
  /* harmony import */ var _stateManagement_annotation_annotationVisibility__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(21009);
41221
41828
  /* harmony import */ var _stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(54177);
41222
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(2746);
41829
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(49574);
41223
41830
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(61738);
41224
41831
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(84901);
41225
41832
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(90252);
@@ -41289,6 +41896,7 @@ class CircleROITool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .AnnotationTool
41289
41896
  viewUp: [...viewUp],
41290
41897
  FrameOfReferenceUID,
41291
41898
  referencedImageId,
41899
+ ...viewport.getViewReference({ points: [worldPos] }),
41292
41900
  },
41293
41901
  data: {
41294
41902
  label: '',
@@ -41838,7 +42446,7 @@ CircleROITool.toolName = 'CircleROI';
41838
42446
  /* harmony import */ var _utilities_math_line__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(21954);
41839
42447
  /* harmony import */ var _utilities_math_angle_angleBetweenLines__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(52475);
41840
42448
  /* harmony import */ var _utilities_math_midPoint__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(76727);
41841
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(2746);
42449
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(49574);
41842
42450
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(61738);
41843
42451
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(90252);
41844
42452
  /* harmony import */ var _utilities_drawing__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(10910);
@@ -41897,6 +42505,7 @@ class CobbAngleTool extends _base__WEBPACK_IMPORTED_MODULE_3__/* .AnnotationTool
41897
42505
  viewUp: [...viewUp],
41898
42506
  FrameOfReferenceUID,
41899
42507
  referencedImageId,
42508
+ ...viewport.getViewReference({ points: [worldPos] }),
41900
42509
  },
41901
42510
  data: {
41902
42511
  handles: {
@@ -42536,7 +43145,7 @@ CobbAngleTool.toolName = 'CobbAngle';
42536
43145
 
42537
43146
  "use strict";
42538
43147
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92136);
42539
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2746);
43148
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49574);
42540
43149
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(90252);
42541
43150
  /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(40233);
42542
43151
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(23072);
@@ -42694,7 +43303,7 @@ DragProbeTool.toolName = 'DragProbe';
42694
43303
  /* harmony import */ var _stateManagement_annotation_annotationLocking__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(48428);
42695
43304
  /* harmony import */ var _stateManagement_annotation_annotationVisibility__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(21009);
42696
43305
  /* harmony import */ var _stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(54177);
42697
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(2746);
43306
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(49574);
42698
43307
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(61738);
42699
43308
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(84901);
42700
43309
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(90252);
@@ -42763,6 +43372,7 @@ class EllipticalROITool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .Annotation
42763
43372
  viewUp: [...viewUp],
42764
43373
  FrameOfReferenceUID,
42765
43374
  referencedImageId,
43375
+ ...viewport.getViewReference({ points: [worldPos] }),
42766
43376
  },
42767
43377
  data: {
42768
43378
  label: '',
@@ -43271,63 +43881,55 @@ class EllipticalROITool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .Annotation
43271
43881
  post2Index[0] = Math.floor(post2Index[0]);
43272
43882
  post2Index[1] = Math.floor(post2Index[1]);
43273
43883
  post2Index[2] = Math.floor(post2Index[2]);
43274
- if (this._isInsideVolume(pos1Index, post2Index, dimensions)) {
43275
- this.isHandleOutsideImage = false;
43276
- const iMin = Math.min(pos1Index[0], post2Index[0]);
43277
- const iMax = Math.max(pos1Index[0], post2Index[0]);
43278
- const jMin = Math.min(pos1Index[1], post2Index[1]);
43279
- const jMax = Math.max(pos1Index[1], post2Index[1]);
43280
- const kMin = Math.min(pos1Index[2], post2Index[2]);
43281
- const kMax = Math.max(pos1Index[2], post2Index[2]);
43282
- const boundsIJK = [
43283
- [iMin, iMax],
43284
- [jMin, jMax],
43285
- [kMin, kMax],
43286
- ];
43287
- const center = [
43288
- (topLeftWorld[0] + bottomRightWorld[0]) / 2,
43289
- (topLeftWorld[1] + bottomRightWorld[1]) / 2,
43290
- (topLeftWorld[2] + bottomRightWorld[2]) / 2,
43291
- ];
43292
- const ellipseObj = {
43293
- center,
43294
- xRadius: Math.abs(topLeftWorld[0] - bottomRightWorld[0]) / 2,
43295
- yRadius: Math.abs(topLeftWorld[1] - bottomRightWorld[1]) / 2,
43296
- zRadius: Math.abs(topLeftWorld[2] - bottomRightWorld[2]) / 2,
43297
- };
43298
- const { worldWidth, worldHeight } = (0,_utilities_planar_getWorldWidthAndHeightFromTwoPoints__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .A)(viewPlaneNormal, viewUp, worldPos1, worldPos2);
43299
- const isEmptyArea = worldWidth === 0 && worldHeight === 0;
43300
- const handles = [pos1Index, post2Index];
43301
- const { scale, areaUnits } = (0,_utilities_getCalibratedUnits__WEBPACK_IMPORTED_MODULE_2__/* .getCalibratedLengthUnitsAndScale */ .Op)(image, handles);
43302
- const area = Math.abs(Math.PI * (worldWidth / 2) * (worldHeight / 2)) /
43303
- scale /
43304
- scale;
43305
- const modalityUnitOptions = {
43306
- isPreScaled: (0,_utilities_viewport_isViewportPreScaled__WEBPACK_IMPORTED_MODULE_19__/* .isViewportPreScaled */ .u)(viewport, targetId),
43307
- isSuvScaled: this.isSuvScaled(viewport, targetId, annotation.metadata.referencedImageId),
43308
- };
43309
- const modalityUnit = (0,_utilities_getModalityUnit__WEBPACK_IMPORTED_MODULE_18__/* .getModalityUnit */ .c)(metadata.Modality, annotation.metadata.referencedImageId, modalityUnitOptions);
43310
- const pointsInShape = (0,_utilities__WEBPACK_IMPORTED_MODULE_3__.pointInShapeCallback)(imageData, (pointLPS) => (0,_utilities_math_ellipse__WEBPACK_IMPORTED_MODULE_15__.pointInEllipse)(ellipseObj, pointLPS, { fast: true }), this.configuration.statsCalculator.statsCallback, boundsIJK);
43311
- const stats = this.configuration.statsCalculator.getStatistics();
43312
- cachedStats[targetId] = {
43313
- Modality: metadata.Modality,
43314
- area,
43315
- mean: stats.mean?.value,
43316
- max: stats.max?.value,
43317
- stdDev: stats.stdDev?.value,
43318
- statsArray: stats.array,
43319
- pointsInShape,
43320
- isEmptyArea,
43321
- areaUnit: areaUnits,
43322
- modalityUnit,
43323
- };
43324
- }
43325
- else {
43326
- this.isHandleOutsideImage = true;
43327
- cachedStats[targetId] = {
43328
- Modality: metadata.Modality,
43329
- };
43330
- }
43884
+ this.isHandleOutsideImage = !this._isInsideVolume(pos1Index, post2Index, dimensions);
43885
+ const iMin = Math.min(pos1Index[0], post2Index[0]);
43886
+ const iMax = Math.max(pos1Index[0], post2Index[0]);
43887
+ const jMin = Math.min(pos1Index[1], post2Index[1]);
43888
+ const jMax = Math.max(pos1Index[1], post2Index[1]);
43889
+ const kMin = Math.min(pos1Index[2], post2Index[2]);
43890
+ const kMax = Math.max(pos1Index[2], post2Index[2]);
43891
+ const boundsIJK = [
43892
+ [iMin, iMax],
43893
+ [jMin, jMax],
43894
+ [kMin, kMax],
43895
+ ];
43896
+ const center = [
43897
+ (topLeftWorld[0] + bottomRightWorld[0]) / 2,
43898
+ (topLeftWorld[1] + bottomRightWorld[1]) / 2,
43899
+ (topLeftWorld[2] + bottomRightWorld[2]) / 2,
43900
+ ];
43901
+ const ellipseObj = {
43902
+ center,
43903
+ xRadius: Math.abs(topLeftWorld[0] - bottomRightWorld[0]) / 2,
43904
+ yRadius: Math.abs(topLeftWorld[1] - bottomRightWorld[1]) / 2,
43905
+ zRadius: Math.abs(topLeftWorld[2] - bottomRightWorld[2]) / 2,
43906
+ };
43907
+ const { worldWidth, worldHeight } = (0,_utilities_planar_getWorldWidthAndHeightFromTwoPoints__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .A)(viewPlaneNormal, viewUp, worldPos1, worldPos2);
43908
+ const isEmptyArea = worldWidth === 0 && worldHeight === 0;
43909
+ const handles = [pos1Index, post2Index];
43910
+ const { scale, areaUnits } = (0,_utilities_getCalibratedUnits__WEBPACK_IMPORTED_MODULE_2__/* .getCalibratedLengthUnitsAndScale */ .Op)(image, handles);
43911
+ const area = Math.abs(Math.PI * (worldWidth / 2) * (worldHeight / 2)) /
43912
+ scale /
43913
+ scale;
43914
+ const modalityUnitOptions = {
43915
+ isPreScaled: (0,_utilities_viewport_isViewportPreScaled__WEBPACK_IMPORTED_MODULE_19__/* .isViewportPreScaled */ .u)(viewport, targetId),
43916
+ isSuvScaled: this.isSuvScaled(viewport, targetId, annotation.metadata.referencedImageId),
43917
+ };
43918
+ const modalityUnit = (0,_utilities_getModalityUnit__WEBPACK_IMPORTED_MODULE_18__/* .getModalityUnit */ .c)(metadata.Modality, annotation.metadata.referencedImageId, modalityUnitOptions);
43919
+ const pointsInShape = (0,_utilities__WEBPACK_IMPORTED_MODULE_3__.pointInShapeCallback)(imageData, (pointLPS) => (0,_utilities_math_ellipse__WEBPACK_IMPORTED_MODULE_15__.pointInEllipse)(ellipseObj, pointLPS, { fast: true }), this.configuration.statsCalculator.statsCallback, boundsIJK);
43920
+ const stats = this.configuration.statsCalculator.getStatistics();
43921
+ cachedStats[targetId] = {
43922
+ Modality: metadata.Modality,
43923
+ area,
43924
+ mean: stats.mean?.value,
43925
+ max: stats.max?.value,
43926
+ stdDev: stats.stdDev?.value,
43927
+ statsArray: stats.array,
43928
+ pointsInShape,
43929
+ isEmptyArea,
43930
+ areaUnit: areaUnits,
43931
+ modalityUnit,
43932
+ };
43331
43933
  }
43332
43934
  annotation.invalidated = false;
43333
43935
  (0,_stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_8__/* .triggerAnnotationModified */ .XF)(annotation, element);
@@ -43398,7 +44000,7 @@ EllipticalROITool.toolName = 'EllipticalROI';
43398
44000
  /* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(96214);
43399
44001
  /* harmony import */ var _stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(38296);
43400
44002
  /* harmony import */ var _stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(54177);
43401
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2746);
44003
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(49574);
43402
44004
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(61738);
43403
44005
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(90252);
43404
44006
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(23072);
@@ -43597,7 +44199,7 @@ KeyImageTool.toolName = 'KeyImage';
43597
44199
  /* harmony import */ var _stateManagement_annotation_annotationVisibility__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(21009);
43598
44200
  /* harmony import */ var _stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(54177);
43599
44201
  /* harmony import */ var _utilities_math_line__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(21954);
43600
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(2746);
44202
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(49574);
43601
44203
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(61738);
43602
44204
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(90252);
43603
44205
  /* harmony import */ var _utilities_drawing__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(10910);
@@ -44043,7 +44645,7 @@ LengthTool.toolName = 'Length';
44043
44645
  /* harmony import */ var _utilities_livewire_LiveWirePath__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1320);
44044
44646
  /* harmony import */ var _stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(54177);
44045
44647
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(84901);
44046
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2746);
44648
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(49574);
44047
44649
 
44048
44650
 
44049
44651
 
@@ -44096,7 +44698,7 @@ class LivewireContourSegmentationTool extends _LivewireContourTool__WEBPACK_IMPO
44096
44698
  }
44097
44699
  this.updateAnnotation(acceptedPath);
44098
44700
  this.scissors = null;
44099
- this.scissorsRight = null;
44701
+ this.scissorsNext = null;
44100
44702
  this.editData = null;
44101
44703
  annotation.data.handles.interpolationSources = null;
44102
44704
  if (repeatInterpolation) {
@@ -44147,7 +44749,7 @@ LivewireContourSegmentationTool.toolName = 'LivewireContourSegmentationTool';
44147
44749
  /* harmony import */ var gl_matrix__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(44753);
44148
44750
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(92136);
44149
44751
  /* harmony import */ var _stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(38296);
44150
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2746);
44752
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49574);
44151
44753
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(61738);
44152
44754
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(84901);
44153
44755
  /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(40233);
@@ -44442,7 +45044,7 @@ class LivewireContourTool extends _base_ContourSegmentationBaseTool__WEBPACK_IMP
44442
45044
  element.removeEventListener(_enums__WEBPACK_IMPORTED_MODULE_5__.Events.TOUCH_TAP, this._mouseDownCallback);
44443
45045
  };
44444
45046
  }
44445
- setupBaseEditData(worldPos, element, annotation, rightPos, contourHoleProcessingEnabled) {
45047
+ setupBaseEditData(worldPos, element, annotation, nextPos, contourHoleProcessingEnabled) {
44446
45048
  const enabledElement = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.getEnabledElement)(element);
44447
45049
  const { viewport } = enabledElement;
44448
45050
  this.isDrawing = true;
@@ -44485,12 +45087,12 @@ class LivewireContourTool extends _base_ContourSegmentationBaseTool__WEBPACK_IMP
44485
45087
  const { voiRange } = viewport.getProperties();
44486
45088
  const startPos = worldToSlice(worldPos);
44487
45089
  this.scissors = _utilities_livewire_LivewireScissors__WEBPACK_IMPORTED_MODULE_12__/* .LivewireScissors */ .f.createInstanceFromRawPixelData(scalarData, width, height, voiRange);
44488
- if (rightPos) {
44489
- this.scissorsRight = _utilities_livewire_LivewireScissors__WEBPACK_IMPORTED_MODULE_12__/* .LivewireScissors */ .f.createInstanceFromRawPixelData(scalarData, width, height, voiRange);
44490
- this.scissorsRight.startSearch(worldToSlice(rightPos));
45090
+ if (nextPos) {
45091
+ this.scissorsNext = _utilities_livewire_LivewireScissors__WEBPACK_IMPORTED_MODULE_12__/* .LivewireScissors */ .f.createInstanceFromRawPixelData(scalarData, width, height, voiRange);
45092
+ this.scissorsNext.startSearch(worldToSlice(nextPos));
44491
45093
  }
44492
45094
  this.scissors.startSearch(startPos);
44493
- const newAnnotation = !rightPos;
45095
+ const newAnnotation = !nextPos;
44494
45096
  const confirmedPath = new _utilities_livewire_LiveWirePath__WEBPACK_IMPORTED_MODULE_13__/* .LivewirePath */ .j();
44495
45097
  const currentPath = new _utilities_livewire_LiveWirePath__WEBPACK_IMPORTED_MODULE_13__/* .LivewirePath */ .j();
44496
45098
  const currentPathNext = newAnnotation ? undefined : new _utilities_livewire_LiveWirePath__WEBPACK_IMPORTED_MODULE_13__/* .LivewirePath */ .j();
@@ -44506,7 +45108,7 @@ class LivewireContourTool extends _base_ContourSegmentationBaseTool__WEBPACK_IMP
44506
45108
  lastCanvasPoint,
44507
45109
  confirmedPath,
44508
45110
  currentPath,
44509
- confirmedPathRight: currentPathNext,
45111
+ confirmedPathNext: currentPathNext,
44510
45112
  closed: false,
44511
45113
  handleIndex: this.editData?.handleIndex ?? annotation.handles?.activeHandleIndex,
44512
45114
  worldToSlice,
@@ -44532,7 +45134,7 @@ class LivewireContourTool extends _base_ContourSegmentationBaseTool__WEBPACK_IMP
44532
45134
  clearEditData() {
44533
45135
  this.editData = null;
44534
45136
  this.scissors = null;
44535
- this.scissorsRight = null;
45137
+ this.scissorsNext = null;
44536
45138
  this.isDrawing = false;
44537
45139
  }
44538
45140
  editHandle(worldPos, element, annotation, handleIndex) {
@@ -44541,11 +45143,11 @@ class LivewireContourTool extends _base_ContourSegmentationBaseTool__WEBPACK_IMP
44541
45143
  const { length: numHandles } = handlePoints;
44542
45144
  const previousHandle = handlePoints[(handleIndex - 1 + numHandles) % numHandles];
44543
45145
  const nextHandle = handlePoints[(handleIndex + 1) % numHandles];
44544
- if (!this.editData?.confirmedPathRight) {
45146
+ if (!this.editData?.confirmedPathNext) {
44545
45147
  this.setupBaseEditData(previousHandle, element, annotation, nextHandle);
44546
45148
  const { polyline } = data.contour;
44547
45149
  const confirmedPath = new _utilities_livewire_LiveWirePath__WEBPACK_IMPORTED_MODULE_13__/* .LivewirePath */ .j();
44548
- const confirmedPathRight = new _utilities_livewire_LiveWirePath__WEBPACK_IMPORTED_MODULE_13__/* .LivewirePath */ .j();
45150
+ const confirmedPathNext = new _utilities_livewire_LiveWirePath__WEBPACK_IMPORTED_MODULE_13__/* .LivewirePath */ .j();
44549
45151
  const { worldToSlice } = this.editData;
44550
45152
  const previousIndex = (0,_utilities_contours_findHandlePolylineIndex__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(annotation, handleIndex - 1);
44551
45153
  const nextIndex = (0,_utilities_contours_findHandlePolylineIndex__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(annotation, handleIndex + 1);
@@ -44553,17 +45155,14 @@ class LivewireContourTool extends _base_ContourSegmentationBaseTool__WEBPACK_IMP
44553
45155
  throw new Error(`Can't find handle index ${nextIndex === -1 && nextHandle} ${previousIndex === -1 && previousHandle}`);
44554
45156
  }
44555
45157
  if (handleIndex === 0) {
44556
- confirmedPathRight.addPoints(polyline.slice(nextIndex + 1, previousIndex).map(worldToSlice));
44557
- }
44558
- else if (nextIndex < previousIndex) {
44559
- throw new Error(`Expected right index after left index, but were: ${previousIndex} ${nextIndex}`);
45158
+ confirmedPathNext.addPoints(polyline.slice(nextIndex + 1, previousIndex).map(worldToSlice));
44560
45159
  }
44561
45160
  else {
44562
45161
  confirmedPath.addPoints(polyline.slice(0, previousIndex + 1).map(worldToSlice));
44563
- confirmedPathRight.addPoints(polyline.slice(nextIndex, polyline.length).map(worldToSlice));
45162
+ confirmedPathNext.addPoints(polyline.slice(nextIndex, polyline.length).map(worldToSlice));
44564
45163
  }
44565
45164
  this.editData.confirmedPath = confirmedPath;
44566
- this.editData.confirmedPathRight = confirmedPathRight;
45165
+ this.editData.confirmedPathNext = confirmedPathNext;
44567
45166
  }
44568
45167
  const { editData, scissors } = this;
44569
45168
  const { worldToSlice, sliceToWorld } = editData;
@@ -44583,14 +45182,14 @@ class LivewireContourTool extends _base_ContourSegmentationBaseTool__WEBPACK_IMP
44583
45182
  }
44584
45183
  handlePoints[handleIndex] = sliceToWorld(slicePos);
44585
45184
  const pathPointsLeft = scissors.findPathToPoint(slicePos);
44586
- const pathPointsRight = this.scissorsRight.findPathToPoint(slicePos);
45185
+ const pathPointsRight = this.scissorsNext.findPathToPoint(slicePos);
44587
45186
  const currentPath = new _utilities_livewire_LiveWirePath__WEBPACK_IMPORTED_MODULE_13__/* .LivewirePath */ .j();
44588
45187
  currentPath.prependPath(editData.confirmedPath);
44589
45188
  if (handleIndex !== 0) {
44590
45189
  currentPath.addPoints(pathPointsLeft);
44591
45190
  }
44592
45191
  currentPath.addPoints(pathPointsRight.reverse());
44593
- currentPath.appendPath(editData.confirmedPathRight);
45192
+ currentPath.appendPath(editData.confirmedPathNext);
44594
45193
  if (handleIndex === 0) {
44595
45194
  currentPath.addPoints(pathPointsLeft);
44596
45195
  }
@@ -44649,17 +45248,19 @@ class LivewireContourTool extends _base_ContourSegmentationBaseTool__WEBPACK_IMP
44649
45248
  if (!this.editData || !livewirePath) {
44650
45249
  return;
44651
45250
  }
44652
- const { annotation, sliceToWorld } = this.editData;
45251
+ const { annotation, sliceToWorld, worldToSlice, closed, newAnnotation } = this.editData;
44653
45252
  let { pointArray: imagePoints } = livewirePath;
44654
45253
  if (imagePoints.length > 1) {
44655
45254
  imagePoints = [...imagePoints, imagePoints[0]];
44656
45255
  }
45256
+ const targetWindingDirection = newAnnotation && closed ? _types_ContourAnnotation__WEBPACK_IMPORTED_MODULE_10__/* .ContourWindingDirection */ .W.Clockwise : undefined;
44657
45257
  this.updateContourPolyline(annotation, {
44658
45258
  points: imagePoints,
44659
- closed: annotation.data.contour.closed,
44660
- targetWindingDirection: _types_ContourAnnotation__WEBPACK_IMPORTED_MODULE_10__/* .ContourWindingDirection */ .W.Clockwise,
45259
+ closed,
45260
+ targetWindingDirection,
44661
45261
  }, {
44662
45262
  canvasToWorld: sliceToWorld,
45263
+ worldToCanvas: worldToSlice,
44663
45264
  });
44664
45265
  }
44665
45266
  }
@@ -44726,7 +45327,7 @@ PlanarFreehandContourSegmentationTool.toolName =
44726
45327
  /* harmony import */ var _stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(38296);
44727
45328
  /* harmony import */ var _stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(54177);
44728
45329
  /* harmony import */ var _utilities_getCalibratedUnits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(24592);
44729
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2746);
45330
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(49574);
44730
45331
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(61738);
44731
45332
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(84901);
44732
45333
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(90252);
@@ -45106,7 +45707,7 @@ ProbeTool.toolName = 'Probe';
45106
45707
  /* harmony import */ var _stateManagement_annotation_annotationLocking__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(48428);
45107
45708
  /* harmony import */ var _stateManagement_annotation_annotationVisibility__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(21009);
45108
45709
  /* harmony import */ var _stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(54177);
45109
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(2746);
45710
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(49574);
45110
45711
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(61738);
45111
45712
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(84901);
45112
45713
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(90252);
@@ -45172,6 +45773,7 @@ class RectangleROITool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .AnnotationT
45172
45773
  viewUp: [...viewUp],
45173
45774
  FrameOfReferenceUID,
45174
45775
  referencedImageId,
45776
+ ...viewport.getViewReference({ points: [worldPos] }),
45175
45777
  },
45176
45778
  data: {
45177
45779
  label: '',
@@ -45519,7 +46121,7 @@ class RectangleROITool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .AnnotationT
45519
46121
  }
45520
46122
  const dataId = `${annotationUID}-rect`;
45521
46123
  const rectangleUID = '0';
45522
- (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_9__.drawRect)(svgDrawingHelper, annotationUID, rectangleUID, canvasCoordinates[0], canvasCoordinates[3], {
46124
+ (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_9__.drawRectByCoordinates)(svgDrawingHelper, annotationUID, rectangleUID, canvasCoordinates, {
45523
46125
  color,
45524
46126
  lineDash,
45525
46127
  lineWidth,
@@ -45703,7 +46305,7 @@ SplineContourSegmentationTool.toolName = 'SplineContourSegmentationTool';
45703
46305
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92136);
45704
46306
  /* harmony import */ var gl_matrix__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(44753);
45705
46307
  /* harmony import */ var _stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(38296);
45706
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2746);
46308
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49574);
45707
46309
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(61738);
45708
46310
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(84901);
45709
46311
  /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(40233);
@@ -46457,7 +47059,7 @@ SplineROITool.toolName = 'SplineROI';
46457
47059
  /* harmony import */ var _utilities_throttle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(21090);
46458
47060
  /* harmony import */ var _stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(38296);
46459
47061
  /* harmony import */ var _stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(54177);
46460
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2746);
47062
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(49574);
46461
47063
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(61738);
46462
47064
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(90252);
46463
47065
  /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(74119);
@@ -46942,7 +47544,7 @@ UltrasoundDirectionalTool.toolName = 'UltrasoundDirectionalTool';
46942
47544
  /* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(96214);
46943
47545
  /* harmony import */ var _utilities_throttle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(21090);
46944
47546
  /* harmony import */ var _stateManagement__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(95778);
46945
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2746);
47547
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(49574);
46946
47548
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(61738);
46947
47549
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(84901);
46948
47550
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(90252);
@@ -47967,7 +48569,7 @@ async function _addLabelmapToViewport(viewport, labelmapData, segmentationRepres
47967
48569
  /* harmony import */ var _strategies_fillCircle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4069);
47968
48570
  /* harmony import */ var _strategies_eraseCircle__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(11852);
47969
48571
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(84901);
47970
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(2746);
48572
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(49574);
47971
48573
  /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(40233);
47972
48574
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(23072);
47973
48575
  /* harmony import */ var _stateManagement_segmentation__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(63421);
@@ -48439,7 +49041,7 @@ BrushTool.toolName = 'Brush';
48439
49041
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(84901);
48440
49042
  /* harmony import */ var _stateManagement_annotation_annotationState__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(38296);
48441
49043
  /* harmony import */ var _stateManagement_annotation_annotationLocking__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(48428);
48442
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2746);
49044
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(49574);
48443
49045
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(90252);
48444
49046
  /* harmony import */ var _utilities_throttle__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(21090);
48445
49047
  /* harmony import */ var _stateManagement_annotation_annotationVisibility__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(21009);
@@ -48803,7 +49405,7 @@ CircleROIStartEndThresholdTool.toolName = 'CircleROIStartEndThreshold';
48803
49405
  /* harmony import */ var _strategies_fillCircle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4069);
48804
49406
  /* harmony import */ var _strategies_eraseCircle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(11852);
48805
49407
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(84901);
48806
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2746);
49408
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(49574);
48807
49409
  /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(40233);
48808
49410
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(23072);
48809
49411
  /* harmony import */ var _stateManagement_segmentation__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(63421);
@@ -49300,7 +49902,7 @@ PaintFillTool.toolName = 'PaintFill';
49300
49902
  /* harmony import */ var _strategies_eraseRectangle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(66211);
49301
49903
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(90252);
49302
49904
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(84901);
49303
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2746);
49905
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(49574);
49304
49906
  /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(40233);
49305
49907
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(23072);
49306
49908
  /* harmony import */ var _stateManagement_segmentation__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(63421);
@@ -49670,7 +50272,7 @@ SegmentSelectTool.toolName = 'SegmentSelectTool';
49670
50272
  /* harmony import */ var _strategies_fillSphere__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(61604);
49671
50273
  /* harmony import */ var _strategies_eraseSphere__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4373);
49672
50274
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(84901);
49673
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2746);
50275
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(49574);
49674
50276
  /* harmony import */ var _cursors_elementCursor__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(40233);
49675
50277
  /* harmony import */ var _utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(23072);
49676
50278
  /* harmony import */ var _stateManagement_segmentation__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(63421);
@@ -50271,7 +50873,7 @@ function triggerSegmentationRender(toolGroupId) {
50271
50873
  /* unused harmony exports annotationRenderingEngine, triggerAnnotationRender */
50272
50874
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92136);
50273
50875
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(84901);
50274
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2746);
50876
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49574);
50275
50877
  /* harmony import */ var _getToolsWithModesForElement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(42360);
50276
50878
 
50277
50879