@ohif/app 3.12.0-beta.52 → 3.12.0-beta.54

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 (38) hide show
  1. package/dist/{1447.bundle.f58681b8a8c6746c3256.js → 1447.bundle.b15051ce6a9bcec1ac6a.js} +2 -2
  2. package/dist/{1919.bundle.b1390ab4c85106c069e2.js → 1919.bundle.7c1b4166b95e7dffe973.js} +1 -0
  3. package/dist/{2243.bundle.92d2afd8756bda5e2ca3.js → 2243.bundle.727d1f866dda05467f19.js} +1 -0
  4. package/dist/{2518.bundle.fbbfa351f8e8c446599b.js → 2518.bundle.57c229a14e22d23db384.js} +1 -0
  5. package/dist/{2974.bundle.ec95e58b346dbe30a362.js → 2974.bundle.a90a9df917b90bc02c69.js} +1 -0
  6. package/dist/{4019.bundle.c5b332003e3cd00868ce.js → 4019.bundle.13e7f662a9e489b74a27.js} +70 -3
  7. package/dist/{4759.bundle.8686abdd7bcf4aa7d107.js → 4759.bundle.c3bfca952eea20a0d6f9.js} +1 -0
  8. package/dist/{5674.bundle.24de237ef15879b25714.js → 5674.bundle.8c34228471ff9e53b8c3.js} +1 -0
  9. package/dist/{6991.bundle.d0c8eb5e352477b0d42e.js → 6991.bundle.48929c562b9d3012e468.js} +1 -0
  10. package/dist/{7412.bundle.80f68b38041e891c64a8.js → 7412.bundle.c7950ea929406915ba33.js} +342 -84
  11. package/dist/{8558.bundle.9ee1f10769f9cac46bb3.js → 8558.bundle.9f596952dd6a5fa6f629.js} +1 -0
  12. package/dist/{934.bundle.d028841173058da9793c.js → 934.bundle.cce2fe2754a928b8cd6d.js} +1 -0
  13. package/dist/{9819.bundle.f9a684737e748002f1c2.js → 9819.bundle.d029289c240373cfb898.js} +16 -6
  14. package/dist/{9856.bundle.8e21e8c0322a0837862b.js → 9856.bundle.9a1396fddc3af67dcaf4.js} +169 -14
  15. package/dist/{9892.bundle.83de6c11c8a9eb4bba25.js → 9892.bundle.14e773b29e191babc8e4.js} +326 -79
  16. package/dist/{app.bundle.7ea0ea630b0467e32f40.js → app.bundle.3759d6a4606059b97022.js} +11 -4
  17. package/dist/{compute.bundle.f176731b761d630f358c.js → compute.bundle.afdef7ac00941da4dd32.js} +1 -1
  18. package/dist/index.html +1 -1
  19. package/dist/{polySeg.bundle.1ab7dd310985596b4098.js → polySeg.bundle.ba4364ed21d03c7a9df1.js} +1 -1
  20. package/dist/sw.js +1 -1
  21. package/package.json +21 -21
  22. /package/dist/{1459.bundle.26bd313381a55ecd59f7.js → 1459.bundle.d4ef552f8dec2c8b15fc.js} +0 -0
  23. /package/dist/{1604.bundle.813a49f279de52122def.js → 1604.bundle.ba4b8c8f64d258a40850.js} +0 -0
  24. /package/dist/{1807.bundle.9609cc9a5502d3c5c4ba.js → 1807.bundle.ddc2996069271a8652a5.js} +0 -0
  25. /package/dist/{213.bundle.844009eea53b5e7b71bf.js → 213.bundle.d174db20fab2fdfed4f8.js} +0 -0
  26. /package/dist/{2424.bundle.d3c0fa7cda17e7a40fc9.js → 2424.bundle.132b9ea62e24599d01f7.js} +0 -0
  27. /package/dist/{3409.bundle.c756a8ccaa7faa1d9235.js → 3409.bundle.257f7edb1585ea06ba3c.js} +0 -0
  28. /package/dist/{4113.bundle.31fe4e2a2956ce6c5d2d.js → 4113.bundle.85916db39290d43aa53b.js} +0 -0
  29. /package/dist/{414.bundle.113bc87916aa22d4cccc.js → 414.bundle.6f9b2a00f06626f05c27.js} +0 -0
  30. /package/dist/{5457.bundle.1d6b074af89e69a54dde.js → 5457.bundle.51285f55e1389d654257.js} +0 -0
  31. /package/dist/{5485.bundle.ae87fca794a3248efdaa.js → 5485.bundle.371660cf6663e90cd622.js} +0 -0
  32. /package/dist/{6027.bundle.2b0e82eb38b6a028a255.js → 6027.bundle.f220a72a6e4232c38a87.js} +0 -0
  33. /package/dist/{6201.bundle.0d8aa2fba299a8cc92a9.js → 6201.bundle.40aca7bfb7513a6ebda7.js} +0 -0
  34. /package/dist/{7197.bundle.7cc9bb98050e4ae0294d.js → 7197.bundle.52da128e3f00a7ad7902.js} +0 -0
  35. /package/dist/{7639.bundle.fb8c61c6588c528d336f.js → 7639.bundle.1226ddb2bc46f5cae750.js} +0 -0
  36. /package/dist/{810.bundle.04da3bf08f7df9589091.js → 810.bundle.4f3a7ca74971239c1498.js} +0 -0
  37. /package/dist/{85.bundle.72ca9e62d8bcef003e42.js → 85.bundle.cc4e5b3a9acca13007a5.js} +0 -0
  38. /package/dist/{8815.bundle.c5c714fe2a3ff31aacad.js → 8815.bundle.525c88f93f5bd57e4980.js} +0 -0
@@ -3348,9 +3348,11 @@ class FrameOfReferenceSpecificAnnotationManager {
3348
3348
  }
3349
3349
  if (toolName) {
3350
3350
  const annotationsForTool = annotations[groupKey][toolName];
3351
- for (const annotation of annotationsForTool) {
3352
- this.removeAnnotation(annotation.annotationUID);
3353
- removedAnnotations.push(annotation);
3351
+ if (annotationsForTool) {
3352
+ for (const annotation of annotationsForTool) {
3353
+ this.removeAnnotation(annotation.annotationUID);
3354
+ removedAnnotations.push(annotation);
3355
+ }
3354
3356
  }
3355
3357
  }
3356
3358
  else {
@@ -12163,6 +12165,9 @@ OverlayGridTool.toolName = 'OverlayGrid';
12163
12165
  class PanTool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .BaseTool */ .oS {
12164
12166
  constructor(toolProps = {}, defaultToolProps = {
12165
12167
  supportedInteractionTypes: ['Mouse', 'Touch'],
12168
+ configuration: {
12169
+ limitToViewport: false,
12170
+ },
12166
12171
  }) {
12167
12172
  super(toolProps, defaultToolProps);
12168
12173
  }
@@ -12172,17 +12177,77 @@ class PanTool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .BaseTool */ .oS {
12172
12177
  mouseDragCallback(evt) {
12173
12178
  this._dragCallback(evt);
12174
12179
  }
12180
+ _checkImageInViewport(viewport, deltaPointsCanvas) {
12181
+ const { canvas } = viewport;
12182
+ const ratio = window.devicePixelRatio;
12183
+ const viewportLeft = 0;
12184
+ const viewportRight = canvas.width / ratio;
12185
+ const viewportTop = 0;
12186
+ const viewportBottom = canvas.height / ratio;
12187
+ const defaultActor = viewport.getDefaultActor();
12188
+ const renderer = viewport.getRenderer();
12189
+ let bounds;
12190
+ if (defaultActor && _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.utilities.isImageActor(defaultActor)) {
12191
+ const imageData = defaultActor.actor.getMapper().getInputData();
12192
+ bounds = imageData.getBounds();
12193
+ }
12194
+ else {
12195
+ bounds = renderer.computeVisiblePropBounds();
12196
+ }
12197
+ const [imageLeft, imageTop] = viewport.worldToCanvas([
12198
+ bounds[0],
12199
+ bounds[2],
12200
+ bounds[4],
12201
+ ]);
12202
+ const [imageRight, imageBottom] = viewport.worldToCanvas([
12203
+ bounds[1],
12204
+ bounds[3],
12205
+ bounds[5],
12206
+ ]);
12207
+ const zoom = viewport.getZoom();
12208
+ if (zoom <= 1) {
12209
+ if ((imageLeft + deltaPointsCanvas[0] < viewportLeft &&
12210
+ deltaPointsCanvas[0] < 0) ||
12211
+ (imageRight + deltaPointsCanvas[0] > viewportRight &&
12212
+ deltaPointsCanvas[0] > 0) ||
12213
+ (imageTop + deltaPointsCanvas[1] < viewportTop &&
12214
+ deltaPointsCanvas[1] < 0) ||
12215
+ (imageBottom + deltaPointsCanvas[1] > viewportBottom &&
12216
+ deltaPointsCanvas[1] > 0)) {
12217
+ return false;
12218
+ }
12219
+ }
12220
+ else {
12221
+ if ((imageLeft + deltaPointsCanvas[0] > viewportLeft &&
12222
+ deltaPointsCanvas[0] > 0) ||
12223
+ (imageRight + deltaPointsCanvas[0] < viewportRight &&
12224
+ deltaPointsCanvas[0] < 0) ||
12225
+ (imageTop + deltaPointsCanvas[1] > viewportTop &&
12226
+ deltaPointsCanvas[1] > 0) ||
12227
+ (imageBottom + deltaPointsCanvas[1] < viewportBottom &&
12228
+ deltaPointsCanvas[1] < 0)) {
12229
+ return false;
12230
+ }
12231
+ }
12232
+ return true;
12233
+ }
12175
12234
  _dragCallback(evt) {
12176
12235
  const { element, deltaPoints } = evt.detail;
12177
12236
  const enabledElement = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.getEnabledElement)(element);
12178
12237
  const deltaPointsWorld = deltaPoints.world;
12238
+ const deltaPointsCanvas = deltaPoints.canvas;
12179
12239
  if (deltaPointsWorld[0] === 0 &&
12180
12240
  deltaPointsWorld[1] === 0 &&
12181
12241
  deltaPointsWorld[2] === 0) {
12182
12242
  return;
12183
12243
  }
12184
- const camera = enabledElement.viewport.getCamera();
12244
+ const viewport = enabledElement.viewport;
12245
+ const camera = viewport.getCamera();
12185
12246
  const { focalPoint, position } = camera;
12247
+ if (this.configuration.limitToViewport &&
12248
+ !this._checkImageInViewport(viewport, deltaPointsCanvas)) {
12249
+ return;
12250
+ }
12186
12251
  const updatedPosition = [
12187
12252
  position[0] - deltaPointsWorld[0],
12188
12253
  position[1] - deltaPointsWorld[1],
@@ -12193,11 +12258,11 @@ class PanTool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .BaseTool */ .oS {
12193
12258
  focalPoint[1] - deltaPointsWorld[1],
12194
12259
  focalPoint[2] - deltaPointsWorld[2],
12195
12260
  ];
12196
- enabledElement.viewport.setCamera({
12261
+ viewport.setCamera({
12197
12262
  focalPoint: updatedFocalPoint,
12198
12263
  position: updatedPosition,
12199
12264
  });
12200
- enabledElement.viewport.render();
12265
+ viewport.render();
12201
12266
  }
12202
12267
  }
12203
12268
  PanTool.toolName = 'Pan';
@@ -21442,68 +21507,79 @@ class EllipticalROITool extends _base__WEBPACK_IMPORTED_MODULE_0__/* .Annotation
21442
21507
  pos1Index[0] = Math.floor(pos1Index[0]);
21443
21508
  pos1Index[1] = Math.floor(pos1Index[1]);
21444
21509
  pos1Index[2] = Math.floor(pos1Index[2]);
21445
- const post2Index = transformWorldToIndex(imageData, worldPos2);
21446
- post2Index[0] = Math.floor(post2Index[0]);
21447
- post2Index[1] = Math.floor(post2Index[1]);
21448
- post2Index[2] = Math.floor(post2Index[2]);
21449
- this.isHandleOutsideImage = !this._isInsideVolume(pos1Index, post2Index, dimensions);
21450
- const iMin = Math.min(pos1Index[0], post2Index[0]);
21451
- const iMax = Math.max(pos1Index[0], post2Index[0]);
21452
- const jMin = Math.min(pos1Index[1], post2Index[1]);
21453
- const jMax = Math.max(pos1Index[1], post2Index[1]);
21454
- const kMin = Math.min(pos1Index[2], post2Index[2]);
21455
- const kMax = Math.max(pos1Index[2], post2Index[2]);
21456
- const boundsIJK = [
21457
- [iMin, iMax],
21458
- [jMin, jMax],
21459
- [kMin, kMax],
21460
- ];
21461
- const center = [
21462
- (topLeftWorld[0] + bottomRightWorld[0]) / 2,
21463
- (topLeftWorld[1] + bottomRightWorld[1]) / 2,
21464
- (topLeftWorld[2] + bottomRightWorld[2]) / 2,
21465
- ];
21466
- const ellipseObj = {
21467
- center,
21468
- xRadius: Math.abs(topLeftWorld[0] - bottomRightWorld[0]) / 2,
21469
- yRadius: Math.abs(topLeftWorld[1] - bottomRightWorld[1]) / 2,
21470
- zRadius: Math.abs(topLeftWorld[2] - bottomRightWorld[2]) / 2,
21471
- };
21472
- const { worldWidth, worldHeight } = (0,_utilities_planar_getWorldWidthAndHeightFromTwoPoints__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .A)(viewPlaneNormal, viewUp, worldPos1, worldPos2);
21473
- const isEmptyArea = worldWidth === 0 && worldHeight === 0;
21474
- const handles = [pos1Index, post2Index];
21475
- const { scale, areaUnit } = (0,_utilities_getCalibratedUnits__WEBPACK_IMPORTED_MODULE_2__/* .getCalibratedLengthUnitsAndScale */ .Op)(image, handles);
21476
- const area = Math.abs(Math.PI * (worldWidth / 2) * (worldHeight / 2)) /
21477
- scale /
21478
- scale;
21479
- const pixelUnitsOptions = {
21480
- isPreScaled: (0,_utilities_viewport_isViewportPreScaled__WEBPACK_IMPORTED_MODULE_18__/* .isViewportPreScaled */ .u)(viewport, targetId),
21481
- isSuvScaled: this.isSuvScaled(viewport, targetId, annotation.metadata.referencedImageId),
21482
- };
21483
- const modalityUnit = (0,_utilities_getPixelValueUnits__WEBPACK_IMPORTED_MODULE_17__/* .getPixelValueUnits */ .j)(metadata.Modality, annotation.metadata.referencedImageId, pixelUnitsOptions);
21484
- let pointsInShape;
21485
- if (voxelManager) {
21486
- const pointsInShape = voxelManager.forEach(this.configuration.statsCalculator.statsCallback, {
21487
- boundsIJK,
21488
- imageData,
21489
- isInObject: (pointLPS) => (0,_utilities_math_ellipse__WEBPACK_IMPORTED_MODULE_14__.pointInEllipse)(ellipseObj, pointLPS, { fast: true }),
21490
- returnPoints: this.configuration.storePointData,
21491
- });
21510
+ const pos2Index = transformWorldToIndex(imageData, worldPos2);
21511
+ pos2Index[0] = Math.floor(pos2Index[0]);
21512
+ pos2Index[1] = Math.floor(pos2Index[1]);
21513
+ pos2Index[2] = Math.floor(pos2Index[2]);
21514
+ if (this._isInsideVolume(pos1Index, pos2Index, dimensions)) {
21515
+ const iMin = Math.min(pos1Index[0], pos2Index[0]);
21516
+ const iMax = Math.max(pos1Index[0], pos2Index[0]);
21517
+ const jMin = Math.min(pos1Index[1], pos2Index[1]);
21518
+ const jMax = Math.max(pos1Index[1], pos2Index[1]);
21519
+ const kMin = Math.min(pos1Index[2], pos2Index[2]);
21520
+ const kMax = Math.max(pos1Index[2], pos2Index[2]);
21521
+ const boundsIJK = [
21522
+ [iMin, iMax],
21523
+ [jMin, jMax],
21524
+ [kMin, kMax],
21525
+ ];
21526
+ const center = [
21527
+ (topLeftWorld[0] + bottomRightWorld[0]) / 2,
21528
+ (topLeftWorld[1] + bottomRightWorld[1]) / 2,
21529
+ (topLeftWorld[2] + bottomRightWorld[2]) / 2,
21530
+ ];
21531
+ const xRadius = Math.abs(topLeftWorld[0] - bottomRightWorld[0]) / 2;
21532
+ const yRadius = Math.abs(topLeftWorld[1] - bottomRightWorld[1]) / 2;
21533
+ const zRadius = Math.abs(topLeftWorld[2] - bottomRightWorld[2]) / 2;
21534
+ const ellipseObj = {
21535
+ center,
21536
+ xRadius: xRadius < _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.EPSILON / 2 ? 0 : xRadius,
21537
+ yRadius: yRadius < _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.EPSILON / 2 ? 0 : yRadius,
21538
+ zRadius: zRadius < _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.EPSILON / 2 ? 0 : zRadius,
21539
+ };
21540
+ const { worldWidth, worldHeight } = (0,_utilities_planar_getWorldWidthAndHeightFromTwoPoints__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .A)(viewPlaneNormal, viewUp, worldPos1, worldPos2);
21541
+ const isEmptyArea = worldWidth === 0 && worldHeight === 0;
21542
+ const handles = [pos1Index, pos2Index];
21543
+ const { scale, unit, areaUnit } = (0,_utilities_getCalibratedUnits__WEBPACK_IMPORTED_MODULE_2__/* .getCalibratedLengthUnitsAndScale */ .Op)(image, handles);
21544
+ const aspect = (0,_utilities_getCalibratedUnits__WEBPACK_IMPORTED_MODULE_2__/* .getCalibratedAspect */ .CQ)(image);
21545
+ const area = Math.abs(Math.PI *
21546
+ (worldWidth / scale / 2) *
21547
+ (worldHeight / aspect / scale / 2));
21548
+ const pixelUnitsOptions = {
21549
+ isPreScaled: (0,_utilities_viewport_isViewportPreScaled__WEBPACK_IMPORTED_MODULE_18__/* .isViewportPreScaled */ .u)(viewport, targetId),
21550
+ isSuvScaled: this.isSuvScaled(viewport, targetId, annotation.metadata.referencedImageId),
21551
+ };
21552
+ const modalityUnit = (0,_utilities_getPixelValueUnits__WEBPACK_IMPORTED_MODULE_17__/* .getPixelValueUnits */ .j)(metadata.Modality, annotation.metadata.referencedImageId, pixelUnitsOptions);
21553
+ let pointsInShape;
21554
+ if (voxelManager) {
21555
+ pointsInShape = voxelManager.forEach(this.configuration.statsCalculator.statsCallback, {
21556
+ isInObject: (pointLPS) => (0,_utilities_math_ellipse__WEBPACK_IMPORTED_MODULE_14__.pointInEllipse)(ellipseObj, pointLPS, { fast: true }),
21557
+ boundsIJK,
21558
+ imageData,
21559
+ returnPoints: this.configuration.storePointData,
21560
+ });
21561
+ }
21562
+ const stats = this.configuration.statsCalculator.getStatistics();
21563
+ cachedStats[targetId] = {
21564
+ Modality: metadata.Modality,
21565
+ area,
21566
+ mean: stats.mean?.value,
21567
+ max: stats.max?.value,
21568
+ min: stats.min?.value,
21569
+ stdDev: stats.stdDev?.value,
21570
+ statsArray: stats.array,
21571
+ pointsInShape,
21572
+ isEmptyArea,
21573
+ areaUnit,
21574
+ modalityUnit,
21575
+ };
21576
+ }
21577
+ else {
21578
+ this.isHandleOutsideImage = true;
21579
+ cachedStats[targetId] = {
21580
+ Modality: metadata.Modality,
21581
+ };
21492
21582
  }
21493
- const stats = this.configuration.statsCalculator.getStatistics();
21494
- cachedStats[targetId] = {
21495
- Modality: metadata.Modality,
21496
- area,
21497
- mean: stats.mean?.value,
21498
- max: stats.max?.value,
21499
- min: stats.min?.value,
21500
- stdDev: stats.stdDev?.value,
21501
- statsArray: stats.array,
21502
- pointsInShape,
21503
- isEmptyArea,
21504
- areaUnit,
21505
- modalityUnit,
21506
- };
21507
21583
  }
21508
21584
  const invalidated = annotation.invalidated;
21509
21585
  annotation.invalidated = false;
@@ -29996,6 +30072,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
29996
30072
  },
29997
30073
  }) {
29998
30074
  super(toolProps, defaultToolProps);
30075
+ this._lastDragInfo = null;
29999
30076
  this.onSetToolPassive = (evt) => {
30000
30077
  this.disableCursor();
30001
30078
  };
@@ -30007,14 +30084,24 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
30007
30084
  };
30008
30085
  this.preMouseDownCallback = (evt) => {
30009
30086
  const eventData = evt.detail;
30010
- const { element } = eventData;
30087
+ const { element, currentPoints } = eventData;
30011
30088
  const enabledElement = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.getEnabledElement)(element);
30089
+ const { viewport } = enabledElement;
30012
30090
  this._editData = this.createEditData(element);
30013
30091
  this._activateDraw(element);
30014
30092
  (0,_cursors_elementCursor__WEBPACK_IMPORTED_MODULE_8__.hideElementCursor)(element);
30015
30093
  evt.preventDefault();
30016
30094
  this._previewData.isDrag = false;
30017
30095
  this._previewData.timerStart = Date.now();
30096
+ const canvasPoint = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec2.clone */ .Zc.clone(currentPoints.canvas);
30097
+ const worldPoint = viewport.canvasToWorld([
30098
+ canvasPoint[0],
30099
+ canvasPoint[1],
30100
+ ]);
30101
+ this._lastDragInfo = {
30102
+ canvas: canvasPoint,
30103
+ world: gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.clone */ .eR.clone(worldPoint),
30104
+ };
30018
30105
  const hoverData = this._hoverData || this.createHoverData(element);
30019
30106
  (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(hoverData.viewportIdsToRender);
30020
30107
  const operationData = this.getOperationData(element);
@@ -30089,6 +30176,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
30089
30176
  const eventData = evt.detail;
30090
30177
  const { element, currentPoints } = eventData;
30091
30178
  const enabledElement = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.getEnabledElement)(element);
30179
+ const { viewport } = enabledElement;
30092
30180
  this.updateCursor(evt);
30093
30181
  const { viewportIdsToRender } = this._hoverData;
30094
30182
  (0,_utilities_triggerAnnotationRenderForViewportIds__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(viewportIdsToRender);
@@ -30103,11 +30191,39 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
30103
30191
  window.clearTimeout(this._previewData.timer);
30104
30192
  this._previewData.timer = null;
30105
30193
  }
30106
- this._previewData.preview = this.applyActiveStrategy(enabledElement, this.getOperationData(element));
30194
+ if (!this._lastDragInfo) {
30195
+ const startCanvas = this._previewData.startPoint;
30196
+ const startWorld = viewport.canvasToWorld([
30197
+ startCanvas[0],
30198
+ startCanvas[1],
30199
+ ]);
30200
+ this._lastDragInfo = {
30201
+ canvas: gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec2.clone */ .Zc.clone(startCanvas),
30202
+ world: gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.clone */ .eR.clone(startWorld),
30203
+ };
30204
+ }
30205
+ const currentCanvas = currentPoints.canvas;
30206
+ const currentWorld = viewport.canvasToWorld([
30207
+ currentCanvas[0],
30208
+ currentCanvas[1],
30209
+ ]);
30210
+ this._hoverData = this.createHoverData(element, currentCanvas);
30211
+ this._calculateCursor(element, currentCanvas);
30212
+ const operationData = this.getOperationData(element);
30213
+ operationData.strokePointsWorld = [
30214
+ gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.clone */ .eR.clone(this._lastDragInfo.world),
30215
+ gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.clone */ .eR.clone(currentWorld),
30216
+ ];
30217
+ this._previewData.preview = this.applyActiveStrategy(enabledElement, operationData);
30218
+ const currentCanvasClone = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec2.clone */ .Zc.clone(currentCanvas);
30219
+ this._lastDragInfo = {
30220
+ canvas: currentCanvasClone,
30221
+ world: gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.clone */ .eR.clone(currentWorld),
30222
+ };
30107
30223
  this._previewData.element = element;
30108
30224
  this._previewData.timerStart = Date.now() + dragTimeMs;
30109
30225
  this._previewData.isDrag = true;
30110
- this._previewData.startPoint = currentPoints.canvas;
30226
+ this._previewData.startPoint = currentCanvasClone;
30111
30227
  };
30112
30228
  this._endCallback = (evt) => {
30113
30229
  const eventData = evt.detail;
@@ -30122,6 +30238,7 @@ class BrushTool extends _LabelmapBaseTool__WEBPACK_IMPORTED_MODULE_10__/* ["defa
30122
30238
  (0,_cursors_elementCursor__WEBPACK_IMPORTED_MODULE_8__.resetElementCursor)(element);
30123
30239
  this.updateCursor(evt);
30124
30240
  this._editData = null;
30241
+ this._lastDragInfo = null;
30125
30242
  this.applyActiveStrategyCallback(enabledElement, operationData, _enums__WEBPACK_IMPORTED_MODULE_2__.StrategyCallbacks.OnInteractionEnd);
30126
30243
  if (!this._previewData.isDrag) {
30127
30244
  this.acceptPreview(element);
@@ -31152,6 +31269,7 @@ class LabelMapEditWithContourTool extends _annotation_PlanarFreehandContourSegme
31152
31269
  _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.eventTarget.addEventListener(_enums__WEBPACK_IMPORTED_MODULE_0__.Events.ANNOTATION_COMPLETED, this.annotationCompleted);
31153
31270
  _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.eventTarget.addEventListener(_enums__WEBPACK_IMPORTED_MODULE_0__.Events.TOOLGROUP_VIEWPORT_ADDED, this.onViewportAddedToToolGroupBinded);
31154
31271
  _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.eventTarget.addEventListener(_enums__WEBPACK_IMPORTED_MODULE_0__.Events.SEGMENTATION_MODIFIED, this.onSegmentationModifiedBinded);
31272
+ _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.eventTarget.addEventListener(_enums__WEBPACK_IMPORTED_MODULE_0__.Events.SEGMENTATION_REPRESENTATION_MODIFIED, this.onSegmentationModifiedBinded);
31155
31273
  }
31156
31274
  cleanUpListeners() {
31157
31275
  LabelMapEditWithContourTool.annotationsToViewportMap.clear();
@@ -31160,6 +31278,7 @@ class LabelMapEditWithContourTool extends _annotation_PlanarFreehandContourSegme
31160
31278
  _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.eventTarget.removeEventListener(_enums__WEBPACK_IMPORTED_MODULE_0__.Events.ANNOTATION_COMPLETED, this.annotationCompleted);
31161
31279
  _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.eventTarget.removeEventListener(_enums__WEBPACK_IMPORTED_MODULE_0__.Events.TOOLGROUP_VIEWPORT_ADDED, this.onViewportAddedToToolGroup.bind(this));
31162
31280
  _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.eventTarget.removeEventListener(_enums__WEBPACK_IMPORTED_MODULE_0__.Events.SEGMENTATION_MODIFIED, this.onSegmentationModified.bind(this));
31281
+ _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.eventTarget.removeEventListener(_enums__WEBPACK_IMPORTED_MODULE_0__.Events.SEGMENTATION_REPRESENTATION_MODIFIED, this.onSegmentationModified.bind(this));
31163
31282
  }
31164
31283
  async checkContourSegmentation(viewportId) {
31165
31284
  if (LabelMapEditWithContourTool.viewportIdsChecked.includes(viewportId)) {
@@ -33307,7 +33426,7 @@ SphereScissorsTool.toolName = 'SphereScissor';
33307
33426
  /* harmony export */ pB: () => (/* binding */ CIRCLE_STRATEGY),
33308
33427
  /* harmony export */ q: () => (/* binding */ thresholdInsideCircle)
33309
33428
  /* harmony export */ });
33310
- /* unused harmony export CIRCLE_THRESHOLD_STRATEGY */
33429
+ /* unused harmony exports CIRCLE_THRESHOLD_STRATEGY, createPointInEllipse */
33311
33430
  /* harmony import */ var gl_matrix__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3823);
33312
33431
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(15327);
33313
33432
  /* harmony import */ var _utilities_boundingBox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(72282);
@@ -33322,7 +33441,7 @@ SphereScissorsTool.toolName = 'SphereScissor';
33322
33441
 
33323
33442
 
33324
33443
 
33325
- const { transformWorldToIndex, isEqual } = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.utilities;
33444
+ const { transformWorldToIndex, transformIndexToWorld, isEqual } = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__.utilities;
33326
33445
  function getEllipseCornersFromCanvasCoordinates(canvasCoordinates) {
33327
33446
  const [bottom, top, left, right] = canvasCoordinates;
33328
33447
  const topLeft = [left[0], top[1]];
@@ -33331,9 +33450,82 @@ function getEllipseCornersFromCanvasCoordinates(canvasCoordinates) {
33331
33450
  const topRight = [right[0], top[1]];
33332
33451
  return [topLeft, bottomRight, bottomLeft, topRight];
33333
33452
  }
33453
+ function createCircleCornersForCenter(center, viewUp, viewRight, radius) {
33454
+ const centerVec = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.fromValues */ .eR.fromValues(center[0], center[1], center[2]);
33455
+ const top = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.create */ .eR.create();
33456
+ gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.scaleAndAdd */ .eR.scaleAndAdd(top, centerVec, viewUp, radius);
33457
+ const bottom = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.create */ .eR.create();
33458
+ gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.scaleAndAdd */ .eR.scaleAndAdd(bottom, centerVec, viewUp, -radius);
33459
+ const right = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.create */ .eR.create();
33460
+ gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.scaleAndAdd */ .eR.scaleAndAdd(right, centerVec, viewRight, radius);
33461
+ const left = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.create */ .eR.create();
33462
+ gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.scaleAndAdd */ .eR.scaleAndAdd(left, centerVec, viewRight, -radius);
33463
+ return [
33464
+ bottom,
33465
+ top,
33466
+ left,
33467
+ right,
33468
+ ];
33469
+ }
33470
+ function createStrokePredicate(centers, radius) {
33471
+ if (!centers.length || radius <= 0) {
33472
+ return null;
33473
+ }
33474
+ const radiusSquared = radius * radius;
33475
+ const centerVecs = centers.map((point) => [point[0], point[1], point[2]]);
33476
+ const segments = [];
33477
+ for (let i = 1; i < centerVecs.length; i++) {
33478
+ const start = centerVecs[i - 1];
33479
+ const end = centerVecs[i];
33480
+ const dx = end[0] - start[0];
33481
+ const dy = end[1] - start[1];
33482
+ const dz = end[2] - start[2];
33483
+ const lengthSquared = dx * dx + dy * dy + dz * dz;
33484
+ segments.push({ start, vector: [dx, dy, dz], lengthSquared });
33485
+ }
33486
+ return (worldPoint) => {
33487
+ if (!worldPoint) {
33488
+ return false;
33489
+ }
33490
+ for (const centerVec of centerVecs) {
33491
+ const dx = worldPoint[0] - centerVec[0];
33492
+ const dy = worldPoint[1] - centerVec[1];
33493
+ const dz = worldPoint[2] - centerVec[2];
33494
+ if (dx * dx + dy * dy + dz * dz <= radiusSquared) {
33495
+ return true;
33496
+ }
33497
+ }
33498
+ for (const { start, vector, lengthSquared } of segments) {
33499
+ if (lengthSquared === 0) {
33500
+ const dx = worldPoint[0] - start[0];
33501
+ const dy = worldPoint[1] - start[1];
33502
+ const dz = worldPoint[2] - start[2];
33503
+ if (dx * dx + dy * dy + dz * dz <= radiusSquared) {
33504
+ return true;
33505
+ }
33506
+ continue;
33507
+ }
33508
+ const dx = worldPoint[0] - start[0];
33509
+ const dy = worldPoint[1] - start[1];
33510
+ const dz = worldPoint[2] - start[2];
33511
+ const dot = dx * vector[0] + dy * vector[1] + dz * vector[2];
33512
+ const t = Math.max(0, Math.min(1, dot / lengthSquared));
33513
+ const projX = start[0] + vector[0] * t;
33514
+ const projY = start[1] + vector[1] * t;
33515
+ const projZ = start[2] + vector[2] * t;
33516
+ const distX = worldPoint[0] - projX;
33517
+ const distY = worldPoint[1] - projY;
33518
+ const distZ = worldPoint[2] - projZ;
33519
+ if (distX * distX + distY * distY + distZ * distZ <= radiusSquared) {
33520
+ return true;
33521
+ }
33522
+ }
33523
+ return false;
33524
+ };
33525
+ }
33334
33526
  const initializeCircle = {
33335
33527
  [_enums__WEBPACK_IMPORTED_MODULE_4__.StrategyCallbacks.Initialize]: (operationData) => {
33336
- const { points, viewport, segmentationImageData, } = operationData;
33528
+ const { points, viewport, segmentationImageData, viewUp, viewPlaneNormal, } = operationData;
33337
33529
  if (!points) {
33338
33530
  return;
33339
33531
  }
@@ -33347,18 +33539,35 @@ const initializeCircle = {
33347
33539
  }
33348
33540
  operationData.centerWorld = center;
33349
33541
  operationData.centerIJK = transformWorldToIndex(segmentationImageData, center);
33542
+ const brushRadius = points.length >= 2 ? gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.distance */ .eR.distance(points[0], points[1]) / 2 : 0;
33350
33543
  const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p));
33351
33544
  const corners = getEllipseCornersFromCanvasCoordinates(canvasCoordinates);
33352
33545
  const cornersInWorld = corners.map((corner) => viewport.canvasToWorld(corner));
33353
- const circleCornersIJK = points.map((world) => {
33354
- return transformWorldToIndex(segmentationImageData, world);
33355
- });
33546
+ const normalizedViewUp = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.fromValues */ .eR.fromValues(viewUp[0], viewUp[1], viewUp[2]);
33547
+ gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.normalize */ .eR.normalize(normalizedViewUp, normalizedViewUp);
33548
+ const normalizedPlaneNormal = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.fromValues */ .eR.fromValues(viewPlaneNormal[0], viewPlaneNormal[1], viewPlaneNormal[2]);
33549
+ gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.normalize */ .eR.normalize(normalizedPlaneNormal, normalizedPlaneNormal);
33550
+ const viewRight = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.create */ .eR.create();
33551
+ gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.cross */ .eR.cross(viewRight, normalizedViewUp, normalizedPlaneNormal);
33552
+ gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.normalize */ .eR.normalize(viewRight, viewRight);
33553
+ const strokeCentersSource = operationData.strokePointsWorld &&
33554
+ operationData.strokePointsWorld.length > 0
33555
+ ? operationData.strokePointsWorld
33556
+ : [operationData.centerWorld];
33557
+ const strokeCenters = strokeCentersSource.map((point) => gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.clone */ .eR.clone(point));
33558
+ const strokeCornersWorld = strokeCenters.flatMap((centerPoint) => createCircleCornersForCenter(centerPoint, normalizedViewUp, viewRight, brushRadius));
33559
+ const circleCornersIJK = strokeCornersWorld.map((world) => transformWorldToIndex(segmentationImageData, world));
33356
33560
  const boundsIJK = (0,_utilities_boundingBox__WEBPACK_IMPORTED_MODULE_2__.getBoundingBoxAroundShapeIJK)(circleCornersIJK, segmentationImageData.getDimensions());
33357
- operationData.isInObject = createPointInEllipse(cornersInWorld);
33561
+ operationData.strokePointsWorld = strokeCenters;
33562
+ operationData.isInObject = createPointInEllipse(cornersInWorld, {
33563
+ strokePointsWorld: strokeCenters,
33564
+ segmentationImageData,
33565
+ radius: brushRadius,
33566
+ });
33358
33567
  operationData.isInObjectBoundsIJK = boundsIJK;
33359
33568
  },
33360
33569
  };
33361
- function createPointInEllipse(cornersInWorld = []) {
33570
+ function createPointInEllipse(cornersInWorld = [], options = {}) {
33362
33571
  if (!cornersInWorld || cornersInWorld.length !== 4) {
33363
33572
  throw new Error('createPointInEllipse: cornersInWorld must have 4 points');
33364
33573
  }
@@ -33377,6 +33586,8 @@ function createPointInEllipse(cornersInWorld = []) {
33377
33586
  const normal = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.create */ .eR.create();
33378
33587
  gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.cross */ .eR.cross(normal, majorAxisVec, minorAxisVec);
33379
33588
  gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.normalize */ .eR.normalize(normal, normal);
33589
+ const radiusForStroke = options.radius ?? Math.max(xRadius, yRadius);
33590
+ const strokePredicate = createStrokePredicate(options.strokePointsWorld || [], radiusForStroke);
33380
33591
  if (isEqual(xRadius, yRadius)) {
33381
33592
  const radius = xRadius;
33382
33593
  const sphereObj = {
@@ -33384,11 +33595,33 @@ function createPointInEllipse(cornersInWorld = []) {
33384
33595
  radius,
33385
33596
  radius2: radius * radius,
33386
33597
  };
33387
- return (pointLPS) => (0,_utilities_math_sphere__WEBPACK_IMPORTED_MODULE_6__/* .pointInSphere */ .d)(sphereObj, pointLPS);
33598
+ return (pointLPS, pointIJK) => {
33599
+ let worldPoint = pointLPS;
33600
+ if (!worldPoint && pointIJK && options.segmentationImageData) {
33601
+ worldPoint = transformIndexToWorld(options.segmentationImageData, pointIJK);
33602
+ }
33603
+ if (!worldPoint) {
33604
+ return false;
33605
+ }
33606
+ if (strokePredicate?.(worldPoint)) {
33607
+ return true;
33608
+ }
33609
+ return (0,_utilities_math_sphere__WEBPACK_IMPORTED_MODULE_6__/* .pointInSphere */ .d)(sphereObj, worldPoint);
33610
+ };
33388
33611
  }
33389
- return (pointLPS) => {
33612
+ return (pointLPS, pointIJK) => {
33613
+ let worldPoint = pointLPS;
33614
+ if (!worldPoint && pointIJK && options.segmentationImageData) {
33615
+ worldPoint = transformIndexToWorld(options.segmentationImageData, pointIJK);
33616
+ }
33617
+ if (!worldPoint) {
33618
+ return false;
33619
+ }
33620
+ if (strokePredicate?.(worldPoint)) {
33621
+ return true;
33622
+ }
33390
33623
  const pointVec = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.create */ .eR.create();
33391
- gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.subtract */ .eR.subtract(pointVec, pointLPS, center);
33624
+ gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.subtract */ .eR.subtract(pointVec, worldPoint, center);
33392
33625
  const distToPlane = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.dot */ .eR.dot(pointVec, normal);
33393
33626
  const proj = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.create */ .eR.create();
33394
33627
  gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.scaleAndAdd */ .eR.scaleAndAdd(proj, pointVec, normal, -distToPlane);
@@ -35075,14 +35308,21 @@ function addSegmentInSegmentation(segmentation, { segmentIndex, label, color })
35075
35308
  if (!segmentation?.segments) {
35076
35309
  return;
35077
35310
  }
35078
- segmentation.segments[segmentIndex] = {
35311
+ const segmentData = segmentation.segments[segmentIndex] ?? {
35079
35312
  active: false,
35080
35313
  locked: false,
35081
- label,
35082
35314
  segmentIndex,
35083
35315
  cachedStats: {},
35316
+ label,
35084
35317
  color,
35085
35318
  };
35319
+ if (label !== undefined) {
35320
+ segmentData.label = label;
35321
+ }
35322
+ if (color !== undefined) {
35323
+ segmentData.color = color;
35324
+ }
35325
+ segmentation.segments[segmentIndex] = segmentData;
35086
35326
  }
35087
35327
  function removeAnnotations(annotationUIDList) {
35088
35328
  annotationUIDList.forEach((annotationUID) => {
@@ -42353,6 +42593,8 @@ function setAnnotationLabel(annotation, element, updatedLabel) {
42353
42593
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(15327);
42354
42594
  /* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30045);
42355
42595
  /* harmony import */ var _stackPrefetchUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(94762);
42596
+ /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99737);
42597
+
42356
42598
 
42357
42599
 
42358
42600
 
@@ -42460,6 +42702,13 @@ function prefetch(element, priority = 0) {
42460
42702
  }
42461
42703
  }
42462
42704
  }
42705
+ if (stackPrefetch.indicesToRequest.length === 0) {
42706
+ const eventDetail = {
42707
+ element: element,
42708
+ lastPrefetchedImageId: imageId,
42709
+ };
42710
+ (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.triggerEvent)(_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.eventTarget, _enums__WEBPACK_IMPORTED_MODULE_3__.Events.STACK_PREFETCH_COMPLETE, eventDetail);
42711
+ }
42463
42712
  }
42464
42713
  const requestFn = (imageId, options) => {
42465
42714
  const { retrieveOptions = {} } = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.metaData.get(imageRetrieveMetadataProvider.IMAGE_RETRIEVE_CONFIGURATION, imageId, 'stack') || {};
@@ -42597,6 +42846,8 @@ const stackContextPrefetch = {
42597
42846
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(15327);
42598
42847
  /* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30045);
42599
42848
  /* harmony import */ var _stackPrefetchUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(94762);
42849
+ /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99737);
42850
+
42600
42851
 
42601
42852
 
42602
42853
 
@@ -42659,6 +42910,13 @@ function prefetch(element) {
42659
42910
  console.log('prefetch done: %s', imageId);
42660
42911
  const imageIdIndex = stack.imageIds.indexOf(imageId);
42661
42912
  removeFromList(imageIdIndex);
42913
+ if (stackPrefetch.indicesToRequest.length === 0) {
42914
+ const eventDetail = {
42915
+ element: element,
42916
+ lastPrefetchedImageId: imageId,
42917
+ };
42918
+ (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.triggerEvent)(_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.eventTarget, _enums__WEBPACK_IMPORTED_MODULE_3__.Events.STACK_PREFETCH_COMPLETE, eventDetail);
42919
+ }
42662
42920
  }
42663
42921
  let lowerIndex = nearest.low;
42664
42922
  let higherIndex = nearest.high;
@@ -43798,7 +44056,7 @@ __webpack_require__.r(__webpack_exports__);
43798
44056
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
43799
44057
  /* harmony export */ r: () => (/* binding */ version)
43800
44058
  /* harmony export */ });
43801
- const version = '4.3.14';
44059
+ const version = '4.5.3';
43802
44060
 
43803
44061
 
43804
44062
  /***/ }),
@@ -39,6 +39,7 @@ var Events;
39
39
  Events["CROSSHAIR_TOOL_CENTER_CHANGED"] = "CORNERSTONE_TOOLS_CROSSHAIR_TOOL_CENTER_CHANGED";
40
40
  Events["VOLUMECROPPINGCONTROL_TOOL_CHANGED"] = "CORNERSTONE_TOOLS_VOLUMECROPPINGCONTROL_TOOL_CHANGED";
41
41
  Events["VOLUMECROPPING_TOOL_CHANGED"] = "CORNERSTONE_TOOLS_VOLUMECROPPING_TOOL_CHANGED";
42
+ Events["STACK_PREFETCH_COMPLETE"] = "CORNERSTONE_TOOLS_STACK_PREFETCH_COMPLETE";
42
43
  Events["ANNOTATION_ADDED"] = "CORNERSTONE_TOOLS_ANNOTATION_ADDED";
43
44
  Events["ANNOTATION_COMPLETED"] = "CORNERSTONE_TOOLS_ANNOTATION_COMPLETED";
44
45
  Events["ANNOTATION_MODIFIED"] = "CORNERSTONE_TOOLS_ANNOTATION_MODIFIED";
@@ -39,6 +39,7 @@ var Events;
39
39
  Events["CROSSHAIR_TOOL_CENTER_CHANGED"] = "CORNERSTONE_TOOLS_CROSSHAIR_TOOL_CENTER_CHANGED";
40
40
  Events["VOLUMECROPPINGCONTROL_TOOL_CHANGED"] = "CORNERSTONE_TOOLS_VOLUMECROPPINGCONTROL_TOOL_CHANGED";
41
41
  Events["VOLUMECROPPING_TOOL_CHANGED"] = "CORNERSTONE_TOOLS_VOLUMECROPPING_TOOL_CHANGED";
42
+ Events["STACK_PREFETCH_COMPLETE"] = "CORNERSTONE_TOOLS_STACK_PREFETCH_COMPLETE";
42
43
  Events["ANNOTATION_ADDED"] = "CORNERSTONE_TOOLS_ANNOTATION_ADDED";
43
44
  Events["ANNOTATION_COMPLETED"] = "CORNERSTONE_TOOLS_ANNOTATION_COMPLETED";
44
45
  Events["ANNOTATION_MODIFIED"] = "CORNERSTONE_TOOLS_ANNOTATION_MODIFIED";