@ohif/app 3.9.0-beta.57 → 3.9.0-beta.59

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 (41) hide show
  1. package/dist/{29.bundle.976319462f33868497c2.js → 117.bundle.403581eea72534ff9c7e.js} +1765 -582
  2. package/dist/{169.bundle.483057ed84ca3e92513a.js → 169.bundle.d28df3cf2d600fc3e146.js} +7 -5
  3. package/dist/{210.bundle.368d53177dc659dc6af0.js → 210.bundle.ea52c75bb27ab002dc4d.js} +2 -2
  4. package/dist/{281.bundle.49da07d997da7cc01705.js → 281.bundle.719e9e222fecb4e9e9c6.js} +18 -4
  5. package/dist/{360.bundle.2c117803c05f0bc31424.js → 360.bundle.9a0c682beae1ef7e40b1.js} +5 -5
  6. package/dist/{372.bundle.d97377781382080306bd.js → 372.bundle.9891a9938b28db4b36ce.js} +5 -4
  7. package/dist/424.bundle.1caecbb1bbefc271b621.js +663 -0
  8. package/dist/{497.bundle.ee102d6243f984113f08.js → 497.bundle.bbc07cef12d598653a65.js} +149 -117
  9. package/dist/{498.bundle.bb47c493dd02451f77ef.js → 498.bundle.e5ccb2bc38e4bfdd564b.js} +1 -1
  10. package/dist/{516.bundle.d777e4126814a5a47117.js → 516.bundle.e59c26f055d145ce835e.js} +47 -12
  11. package/dist/{196.bundle.cf8c2311aafb5312bbf7.js → 579.bundle.0b78fc095924efac431d.js} +1705 -493
  12. package/dist/{552.bundle.85aaefb5e22d6d1bffa9.js → 65.bundle.d15cc84a0b991e182649.js} +15 -680
  13. package/dist/{129.bundle.3102eccbd5c78524c3dd.js → 650.bundle.a65389abf76ad921aa17.js} +2671 -2975
  14. package/dist/{793.bundle.c92f52ddff0e3bf506e6.js → 793.bundle.e4c759b5cdfcc3c7494f.js} +2 -2
  15. package/dist/{818.bundle.cda4e369fdee5459a544.js → 818.bundle.b64fae7e982e16a82ca2.js} +133 -69
  16. package/dist/{842.bundle.a5533bc77e6f57b0ee30.js → 842.bundle.cccbb7e3611e3d220f07.js} +2 -2
  17. package/dist/{888.bundle.7ff5dfd3c14072cee2a9.js → 888.bundle.d3b2a82cb17155725342.js} +9 -3
  18. package/dist/{428.bundle.744fc5865b2d747de88a.js → 904.bundle.008f8a2095669f4eabba.js} +88 -50
  19. package/dist/{962.bundle.d5f55c85407221bbce7b.js → 962.bundle.868b30361a52b0ffa504.js} +2 -2
  20. package/dist/{993.bundle.aa31ebda5a5f62c44de5.js → 993.bundle.302a286ebb6e3fc0c35a.js} +1265 -485
  21. package/dist/{994.bundle.c4709bfb7fd9dcde0551.js → 994.bundle.3b5f396b62cce2990c03.js} +15 -1
  22. package/dist/{app.bundle.a69624a3e0becd131c65.js → app.bundle.14f126e3ec4491bb1948.js} +1393 -1321
  23. package/dist/app.bundle.css +2 -2
  24. package/dist/dicom-microscopy-viewer/dicomMicroscopyViewer.min.js.map +1 -0
  25. package/dist/{histogram-worker.bundle.e7e9fea2c3236b0e747a.js → histogram-worker.bundle.89729ccb99d170ff2f2f.js} +2 -1
  26. package/dist/index.html +3 -1
  27. package/dist/{polySeg.bundle.b25c61224998018d0f79.js → polySeg.bundle.d8943427beee7694621a.js} +3 -22
  28. package/dist/{suv-peak-worker.bundle.eb11e71db02e52601ecf.js → suv-peak-worker.bundle.15dcb8d1ab8e0528bfd9.js} +3 -22
  29. package/dist/sw.js +1 -1
  30. package/package.json +18 -18
  31. /package/dist/{153.bundle.62dad8e9c7532474e95c.js → 153.bundle.42a66f99ced5972aa0c0.js} +0 -0
  32. /package/dist/{202.bundle.bb0e8196739bb896dc9e.js → 202.bundle.f6d9ca4b1c16b1aa227f.js} +0 -0
  33. /package/dist/{246.bundle.27aca95ea22cd5fcd414.js → 246.bundle.912e9f8342cd5d6228e6.js} +0 -0
  34. /package/dist/{353.bundle.a741604612f3f1d18398.js → 353.bundle.5b11e6b395c5d5cc33bf.js} +0 -0
  35. /package/dist/{376.bundle.2657056d8bc2b11fb0e8.js → 376.bundle.ac0e23dc830cd982fd18.js} +0 -0
  36. /package/dist/{552.css → 424.css} +0 -0
  37. /package/dist/{502.bundle.e7e6c345146aef00a169.js → 502.bundle.823682db96d52df1b8cf.js} +0 -0
  38. /package/dist/{591.bundle.aa91409b528ae6b601e0.js → 591.bundle.39fa1e6e7285929f2e29.js} +0 -0
  39. /package/dist/{791.bundle.d614182fa975e92cf4f5.js → 791.bundle.ecf9b1f8892d5f8962a3.js} +0 -0
  40. /package/dist/{944.bundle.c2bcb49d5077bd6fcc87.js → 944.bundle.93eddec203a43754e826.js} +0 -0
  41. /package/dist/{978.bundle.cd27543a62e7230557b2.js → 978.bundle.c12902cf44dca926bcb8.js} +0 -0
@@ -1,4 +1,731 @@
1
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[29,497],{
1
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[117,497],{
2
+
3
+ /***/ 49001:
4
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
5
+
6
+ "use strict";
7
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8
+ /* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
9
+ /* harmony export */ });
10
+ /* harmony import */ var gl_matrix__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72076);
11
+ /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7187);
12
+ /* harmony import */ var _metaData__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(30023);
13
+ /* harmony import */ var _helpers_cpuFallback_rendering_transform__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(30742);
14
+ /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(56309);
15
+ /* harmony import */ var _Viewport__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(77614);
16
+ /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(25281);
17
+ /* harmony import */ var _CanvasActor__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(40046);
18
+ /* harmony import */ var _cache__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(82253);
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+ class VideoViewport extends _Viewport__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z {
29
+ constructor(props) {
30
+ super({
31
+ ...props,
32
+ canvas: props.canvas || (0,_helpers__WEBPACK_IMPORTED_MODULE_6__/* .getOrCreateCanvas */ .uy)(props.element),
33
+ });
34
+ this.videoWidth = 0;
35
+ this.videoHeight = 0;
36
+ this.loop = true;
37
+ this.mute = true;
38
+ this.isPlaying = false;
39
+ this.scrollSpeed = 1;
40
+ this.playbackRate = 1;
41
+ this.frameRange = [0, 0];
42
+ this.fps = 30;
43
+ this.videoCamera = {
44
+ panWorld: [0, 0],
45
+ parallelScale: 1,
46
+ };
47
+ this.voiRange = {
48
+ lower: 0,
49
+ upper: 255,
50
+ };
51
+ this.getProperties = () => {
52
+ return {
53
+ loop: this.videoElement.loop,
54
+ muted: this.videoElement.muted,
55
+ playbackRate: this.playbackRate,
56
+ scrollSpeed: this.scrollSpeed,
57
+ voiRange: { ...this.voiRange },
58
+ };
59
+ };
60
+ this.resetCamera = () => {
61
+ this.refreshRenderValues();
62
+ this.canvasContext.fillRect(0, 0, this.canvas.width, this.canvas.height);
63
+ if (this.isPlaying === false) {
64
+ this.renderFrame();
65
+ }
66
+ return true;
67
+ };
68
+ this.getNumberOfSlices = () => {
69
+ const computedSlices = Math.round((this.videoElement.duration * this.fps) / this.scrollSpeed);
70
+ return isNaN(computedSlices) ? this.numberOfFrames : computedSlices;
71
+ };
72
+ this.getFrameOfReferenceUID = () => {
73
+ return this.videoElement.src;
74
+ };
75
+ this.resize = () => {
76
+ const canvas = this.canvas;
77
+ const { clientWidth, clientHeight } = canvas;
78
+ if (canvas.width !== clientWidth || canvas.height !== clientHeight) {
79
+ canvas.width = clientWidth;
80
+ canvas.height = clientHeight;
81
+ }
82
+ this.refreshRenderValues();
83
+ if (this.isPlaying === false) {
84
+ this.renderFrame();
85
+ }
86
+ };
87
+ this.canvasToWorld = (canvasPos, destPos = [0, 0, 0]) => {
88
+ const pan = this.videoCamera.panWorld;
89
+ const worldToCanvasRatio = this.getWorldToCanvasRatio();
90
+ const panOffsetCanvas = [
91
+ pan[0] * worldToCanvasRatio,
92
+ pan[1] * worldToCanvasRatio,
93
+ ];
94
+ const subCanvasPos = [
95
+ canvasPos[0] - panOffsetCanvas[0],
96
+ canvasPos[1] - panOffsetCanvas[1],
97
+ ];
98
+ destPos.splice(0, 2, subCanvasPos[0] / worldToCanvasRatio, subCanvasPos[1] / worldToCanvasRatio);
99
+ return destPos;
100
+ };
101
+ this.worldToCanvas = (worldPos) => {
102
+ const pan = this.videoCamera.panWorld;
103
+ const worldToCanvasRatio = this.getWorldToCanvasRatio();
104
+ const canvasPos = [
105
+ (worldPos[0] + pan[0]) * worldToCanvasRatio,
106
+ (worldPos[1] + pan[1]) * worldToCanvasRatio,
107
+ ];
108
+ return canvasPos;
109
+ };
110
+ this.getRotation = () => 0;
111
+ this.canvasToIndex = (canvasPos) => {
112
+ const transform = this.getTransform();
113
+ transform.invert();
114
+ return transform.transformPoint(canvasPos.map((it) => it * devicePixelRatio));
115
+ };
116
+ this.indexToCanvas = (indexPos) => {
117
+ const transform = this.getTransform();
118
+ return (transform.transformPoint(indexPos).map((it) => it / devicePixelRatio));
119
+ };
120
+ this.customRenderViewportToCanvas = () => {
121
+ this.renderFrame();
122
+ };
123
+ this.renderFrame = () => {
124
+ const transform = this.getTransform();
125
+ const transformationMatrix = transform.getMatrix();
126
+ const ctx = this.canvasContext;
127
+ ctx.resetTransform();
128
+ ctx.transform(transformationMatrix[0], transformationMatrix[1], transformationMatrix[2], transformationMatrix[3], transformationMatrix[4], transformationMatrix[5]);
129
+ ctx.drawImage(this.videoElement, 0, 0, this.videoWidth || 1024, this.videoHeight || 1024);
130
+ for (const actor of this.getActors()) {
131
+ actor.actor.render(this, this.canvasContext);
132
+ }
133
+ this.canvasContext.resetTransform();
134
+ (0,_utilities__WEBPACK_IMPORTED_MODULE_4__.triggerEvent)(this.element, _enums__WEBPACK_IMPORTED_MODULE_1__.Events.STACK_NEW_IMAGE, {
135
+ element: this.element,
136
+ viewportId: this.id,
137
+ viewport: this,
138
+ renderingEngineId: this.renderingEngineId,
139
+ time: this.videoElement.currentTime,
140
+ duration: this.videoElement.duration,
141
+ });
142
+ (0,_utilities__WEBPACK_IMPORTED_MODULE_4__.triggerEvent)(this.element, _enums__WEBPACK_IMPORTED_MODULE_1__.Events.IMAGE_RENDERED, {
143
+ element: this.element,
144
+ viewportId: this.id,
145
+ viewport: this,
146
+ imageIndex: this.getCurrentImageIdIndex(),
147
+ numberOfSlices: this.numberOfFrames,
148
+ renderingEngineId: this.renderingEngineId,
149
+ time: this.videoElement.currentTime,
150
+ duration: this.videoElement.duration,
151
+ });
152
+ this.initialRender?.();
153
+ const frame = this.getFrameNumber();
154
+ if (this.isPlaying) {
155
+ if (frame < this.frameRange[0]) {
156
+ this.setFrameNumber(this.frameRange[0]);
157
+ }
158
+ else if (frame > this.frameRange[1]) {
159
+ if (this.loop) {
160
+ this.setFrameNumber(this.frameRange[0]);
161
+ }
162
+ else {
163
+ this.pause();
164
+ }
165
+ }
166
+ }
167
+ };
168
+ this.renderWhilstPlaying = () => {
169
+ this.renderFrame();
170
+ if (this.isPlaying) {
171
+ requestAnimationFrame(this.renderWhilstPlaying);
172
+ }
173
+ };
174
+ this.canvasContext = this.canvas.getContext('2d');
175
+ this.renderingEngineId = props.renderingEngineId;
176
+ this.element.setAttribute('data-viewport-uid', this.id);
177
+ this.element.setAttribute('data-rendering-engine-uid', this.renderingEngineId);
178
+ this.videoElement = document.createElement('video');
179
+ this.videoElement.muted = this.mute;
180
+ this.videoElement.loop = this.loop;
181
+ this.videoElement.autoplay = true;
182
+ this.videoElement.crossOrigin = 'anonymous';
183
+ this.addEventListeners();
184
+ this.resize();
185
+ }
186
+ static { this.frameRangeExtractor = /(\/frames\/|[&?]frameNumber=)([^/&?]*)/i; }
187
+ static get useCustomRenderingPipeline() {
188
+ return true;
189
+ }
190
+ addEventListeners() {
191
+ this.canvas.addEventListener(_enums__WEBPACK_IMPORTED_MODULE_1__.Events.ELEMENT_DISABLED, this.elementDisabledHandler);
192
+ }
193
+ removeEventListeners() {
194
+ this.canvas.removeEventListener(_enums__WEBPACK_IMPORTED_MODULE_1__.Events.ELEMENT_DISABLED, this.elementDisabledHandler);
195
+ }
196
+ elementDisabledHandler() {
197
+ this.removeEventListeners();
198
+ this.videoElement.remove();
199
+ }
200
+ getImageDataMetadata(image) {
201
+ const imageId = typeof image === 'string' ? image : image.imageId;
202
+ const imagePlaneModule = _metaData__WEBPACK_IMPORTED_MODULE_2__.get(_enums__WEBPACK_IMPORTED_MODULE_1__.MetadataModules.IMAGE_PLANE, imageId);
203
+ let rowCosines = imagePlaneModule.rowCosines;
204
+ let columnCosines = imagePlaneModule.columnCosines;
205
+ if (rowCosines == null || columnCosines == null) {
206
+ rowCosines = [1, 0, 0];
207
+ columnCosines = [0, 1, 0];
208
+ }
209
+ const rowCosineVec = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.fromValues */ .R3.fromValues(rowCosines[0], rowCosines[1], rowCosines[2]);
210
+ const colCosineVec = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.fromValues */ .R3.fromValues(columnCosines[0], columnCosines[1], columnCosines[2]);
211
+ const { rows, columns } = imagePlaneModule;
212
+ const scanAxisNormal = gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.create */ .R3.create();
213
+ gl_matrix__WEBPACK_IMPORTED_MODULE_0__/* .vec3.cross */ .R3.cross(scanAxisNormal, rowCosineVec, colCosineVec);
214
+ let origin = imagePlaneModule.imagePositionPatient;
215
+ if (origin == null) {
216
+ origin = [0, 0, 0];
217
+ }
218
+ const xSpacing = imagePlaneModule.columnPixelSpacing || 1;
219
+ const ySpacing = imagePlaneModule.rowPixelSpacing || 1;
220
+ const xVoxels = imagePlaneModule.columns;
221
+ const yVoxels = imagePlaneModule.rows;
222
+ const zSpacing = 1;
223
+ const zVoxels = 1;
224
+ this.hasPixelSpacing = !!imagePlaneModule.columnPixelSpacing;
225
+ return {
226
+ bitsAllocated: 8,
227
+ numComps: 3,
228
+ origin,
229
+ rows,
230
+ columns,
231
+ direction: [...rowCosineVec, ...colCosineVec, ...scanAxisNormal],
232
+ dimensions: [xVoxels, yVoxels, zVoxels],
233
+ spacing: [xSpacing, ySpacing, zSpacing],
234
+ hasPixelSpacing: this.hasPixelSpacing,
235
+ numVoxels: xVoxels * yVoxels * zVoxels,
236
+ imagePlaneModule,
237
+ };
238
+ }
239
+ setDataIds(imageIds, options) {
240
+ this.setVideo(imageIds[0], options?.viewReference?.sliceIndex || 1);
241
+ }
242
+ setVideo(imageId, frameNumber) {
243
+ this.imageId = Array.isArray(imageId) ? imageId[0] : imageId;
244
+ const imageUrlModule = _metaData__WEBPACK_IMPORTED_MODULE_2__.get(_enums__WEBPACK_IMPORTED_MODULE_1__.MetadataModules.IMAGE_URL, imageId);
245
+ if (!imageUrlModule?.rendered) {
246
+ throw new Error(`Video Image ID ${imageId} does not have a rendered video view`);
247
+ }
248
+ const { rendered } = imageUrlModule;
249
+ const generalSeries = _metaData__WEBPACK_IMPORTED_MODULE_2__.get(_enums__WEBPACK_IMPORTED_MODULE_1__.MetadataModules.GENERAL_SERIES, imageId);
250
+ this.modality = generalSeries?.Modality;
251
+ this.metadata = this.getImageDataMetadata(imageId);
252
+ let { cineRate, numberOfFrames } = _metaData__WEBPACK_IMPORTED_MODULE_2__.get(_enums__WEBPACK_IMPORTED_MODULE_1__.MetadataModules.CINE, imageId);
253
+ this.numberOfFrames = numberOfFrames;
254
+ return this.setVideoURL(rendered).then(() => {
255
+ if (!numberOfFrames || numberOfFrames === 1) {
256
+ numberOfFrames = Math.round(this.videoElement.duration * (cineRate || 30));
257
+ }
258
+ if (!cineRate) {
259
+ cineRate = Math.round(numberOfFrames / this.videoElement.duration);
260
+ }
261
+ this.fps = cineRate;
262
+ this.numberOfFrames = numberOfFrames;
263
+ this.setFrameRange([1, numberOfFrames]);
264
+ this.initialRender = () => {
265
+ this.initialRender = null;
266
+ this.pause();
267
+ this.setFrameNumber(frameNumber || 1);
268
+ };
269
+ return new Promise((resolve) => {
270
+ window.setTimeout(() => {
271
+ this.setFrameNumber(frameNumber || 1);
272
+ resolve(this);
273
+ }, 25);
274
+ });
275
+ });
276
+ }
277
+ async setVideoURL(videoURL) {
278
+ return new Promise((resolve) => {
279
+ this.videoElement.src = videoURL;
280
+ this.videoElement.preload = 'auto';
281
+ const loadedMetadataEventHandler = () => {
282
+ this.videoWidth = this.videoElement.videoWidth;
283
+ this.videoHeight = this.videoElement.videoHeight;
284
+ this.videoElement.removeEventListener('loadedmetadata', loadedMetadataEventHandler);
285
+ this.refreshRenderValues();
286
+ resolve(true);
287
+ };
288
+ this.videoElement.addEventListener('loadedmetadata', loadedMetadataEventHandler);
289
+ });
290
+ }
291
+ getImageIds() {
292
+ const imageIds = new Array(this.numberOfFrames);
293
+ const baseImageId = this.imageId.replace(/[0-9]+$/, '');
294
+ for (let i = 0; i < this.numberOfFrames; i++) {
295
+ imageIds[i] = `${baseImageId}${i + 1}`;
296
+ }
297
+ return imageIds;
298
+ }
299
+ togglePlayPause() {
300
+ if (this.isPlaying) {
301
+ this.pause();
302
+ return false;
303
+ }
304
+ else {
305
+ this.play();
306
+ return true;
307
+ }
308
+ }
309
+ async play() {
310
+ try {
311
+ if (!this.isPlaying) {
312
+ this.isPlaying = true;
313
+ await this.videoElement.play();
314
+ this.renderWhilstPlaying();
315
+ }
316
+ }
317
+ catch (e) {
318
+ }
319
+ }
320
+ pause() {
321
+ try {
322
+ this.isPlaying = false;
323
+ this.videoElement.pause();
324
+ }
325
+ catch (e) {
326
+ }
327
+ }
328
+ async scroll(delta = 1) {
329
+ await this.pause();
330
+ const videoElement = this.videoElement;
331
+ const renderFrame = this.renderFrame;
332
+ const currentTime = videoElement.currentTime;
333
+ const newTime = currentTime + (delta * this.scrollSpeed) / this.fps;
334
+ videoElement.currentTime = newTime;
335
+ const seekEventListener = (evt) => {
336
+ renderFrame();
337
+ videoElement.removeEventListener('seeked', seekEventListener);
338
+ };
339
+ videoElement.addEventListener('seeked', seekEventListener);
340
+ }
341
+ async start() {
342
+ const videoElement = this.videoElement;
343
+ const renderFrame = this.renderFrame;
344
+ videoElement.currentTime = 0;
345
+ if (videoElement.paused) {
346
+ const seekEventListener = (evt) => {
347
+ renderFrame();
348
+ videoElement.removeEventListener('seeked', seekEventListener);
349
+ };
350
+ videoElement.addEventListener('seeked', seekEventListener);
351
+ }
352
+ }
353
+ async end() {
354
+ const videoElement = this.videoElement;
355
+ const renderFrame = this.renderFrame;
356
+ videoElement.currentTime = videoElement.duration;
357
+ if (videoElement.paused) {
358
+ const seekEventListener = (evt) => {
359
+ renderFrame();
360
+ videoElement.removeEventListener('seeked', seekEventListener);
361
+ };
362
+ videoElement.addEventListener('seeked', seekEventListener);
363
+ }
364
+ }
365
+ async setTime(timeInSeconds) {
366
+ const videoElement = this.videoElement;
367
+ const renderFrame = this.renderFrame;
368
+ videoElement.currentTime = timeInSeconds;
369
+ if (videoElement.paused) {
370
+ const seekEventListener = (evt) => {
371
+ renderFrame();
372
+ videoElement.removeEventListener('seeked', seekEventListener);
373
+ };
374
+ videoElement.addEventListener('seeked', seekEventListener);
375
+ }
376
+ }
377
+ async setFrameNumber(frame) {
378
+ this.setTime((frame - 1) / this.fps);
379
+ }
380
+ setFrameRange(frameRange) {
381
+ if (!frameRange) {
382
+ this.frameRange = [1, this.numberOfFrames];
383
+ return;
384
+ }
385
+ if (frameRange.length !== 2 || frameRange[0] === frameRange[1]) {
386
+ return;
387
+ }
388
+ this.frameRange = [frameRange[0], frameRange[1]];
389
+ }
390
+ getFrameRange() {
391
+ return this.frameRange;
392
+ }
393
+ setProperties(props) {
394
+ if (props.loop !== undefined) {
395
+ this.videoElement.loop = props.loop;
396
+ }
397
+ if (props.muted !== undefined) {
398
+ this.videoElement.muted = props.muted;
399
+ }
400
+ if (props.playbackRate !== undefined) {
401
+ this.setPlaybackRate(props.playbackRate);
402
+ }
403
+ if (props.scrollSpeed !== undefined) {
404
+ this.setScrollSpeed(props.scrollSpeed);
405
+ }
406
+ if (props.voiRange) {
407
+ this.setVOI(props.voiRange);
408
+ }
409
+ }
410
+ setPlaybackRate(rate = 1) {
411
+ this.playbackRate = rate;
412
+ if (rate < 0.0625) {
413
+ this.pause();
414
+ return;
415
+ }
416
+ if (!this.videoElement) {
417
+ return;
418
+ }
419
+ this.videoElement.playbackRate = rate;
420
+ this.play();
421
+ }
422
+ setScrollSpeed(scrollSpeed = 1, unit = _enums__WEBPACK_IMPORTED_MODULE_1__.VideoEnums.SpeedUnit.FRAME) {
423
+ this.scrollSpeed =
424
+ unit === _enums__WEBPACK_IMPORTED_MODULE_1__.VideoEnums.SpeedUnit.SECOND
425
+ ? scrollSpeed * this.fps
426
+ : scrollSpeed;
427
+ }
428
+ resetProperties() {
429
+ this.setProperties({
430
+ loop: false,
431
+ muted: true,
432
+ });
433
+ }
434
+ getScalarData() {
435
+ if (this.scalarData?.frameNumber === this.getFrameNumber()) {
436
+ return this.scalarData;
437
+ }
438
+ const canvas = document.createElement('canvas');
439
+ canvas.width = this.videoWidth;
440
+ canvas.height = this.videoHeight;
441
+ const context = canvas.getContext('2d');
442
+ context.drawImage(this.videoElement, 0, 0);
443
+ const canvasData = context.getImageData(0, 0, this.videoWidth, this.videoHeight);
444
+ const scalarData = canvasData.data;
445
+ scalarData.getRange = () => [0, 255];
446
+ scalarData.frameNumber = this.getFrameNumber();
447
+ this.scalarData = scalarData;
448
+ return scalarData;
449
+ }
450
+ getImageData() {
451
+ const { metadata } = this;
452
+ const spacing = metadata.spacing;
453
+ const imageData = {
454
+ dimensions: metadata.dimensions,
455
+ spacing,
456
+ origin: metadata.origin,
457
+ direction: metadata.direction,
458
+ metadata: { Modality: this.modality },
459
+ getScalarData: () => this.getScalarData(),
460
+ imageData: {
461
+ getDirection: () => metadata.direction,
462
+ getDimensions: () => metadata.dimensions,
463
+ getRange: () => [0, 255],
464
+ getScalarData: () => this.getScalarData(),
465
+ getSpacing: () => metadata.spacing,
466
+ worldToIndex: (point) => {
467
+ const canvasPoint = this.worldToCanvas(point);
468
+ const pixelCoord = this.canvasToIndex(canvasPoint);
469
+ return [pixelCoord[0], pixelCoord[1], 0];
470
+ },
471
+ indexToWorld: (point, destPoint) => {
472
+ const canvasPoint = this.indexToCanvas([point[0], point[1]]);
473
+ return this.canvasToWorld(canvasPoint, destPoint);
474
+ },
475
+ },
476
+ hasPixelSpacing: this.hasPixelSpacing,
477
+ calibration: this.calibration,
478
+ preScale: {
479
+ scaled: false,
480
+ },
481
+ };
482
+ Object.defineProperty(imageData, 'scalarData', {
483
+ get: () => this.getScalarData(),
484
+ enumerable: true,
485
+ });
486
+ return imageData;
487
+ }
488
+ hasImageURI(imageURI) {
489
+ const framesMatch = imageURI.match(VideoViewport.frameRangeExtractor);
490
+ const testURI = framesMatch
491
+ ? imageURI.substring(0, framesMatch.index)
492
+ : imageURI;
493
+ return this.imageId.indexOf(testURI) !== -1;
494
+ }
495
+ setVOI(voiRange) {
496
+ this.voiRange = voiRange;
497
+ this.setColorTransform();
498
+ }
499
+ setWindowLevel(windowWidth = 256, windowCenter = 128) {
500
+ const lower = windowCenter - windowWidth / 2;
501
+ const upper = windowCenter + windowWidth / 2 - 1;
502
+ this.setVOI({ lower, upper });
503
+ this.setColorTransform();
504
+ }
505
+ setAverageWhite(averageWhite) {
506
+ this.averageWhite = averageWhite;
507
+ this.setColorTransform();
508
+ }
509
+ setColorTransform() {
510
+ if (!this.voiRange && !this.averageWhite) {
511
+ this.feFilter = null;
512
+ return;
513
+ }
514
+ const white = this.averageWhite || [255, 255, 255];
515
+ const maxWhite = Math.max(...white);
516
+ const scaleWhite = white.map((c) => maxWhite / c);
517
+ const { lower = 0, upper = 255 } = this.voiRange || {};
518
+ const wlScale = (upper - lower + 1) / 255;
519
+ const wlDelta = lower / 255;
520
+ this.feFilter = `url('data:image/svg+xml,\
521
+ <svg xmlns="http://www.w3.org/2000/svg">\
522
+ <filter id="colour" color-interpolation-filters="linearRGB">\
523
+ <feColorMatrix type="matrix" \
524
+ values="\
525
+ ${scaleWhite[0] * wlScale} 0 0 0 ${wlDelta} \
526
+ 0 ${scaleWhite[1] * wlScale} 0 0 ${wlDelta} \
527
+ 0 0 ${scaleWhite[2] * wlScale} 0 ${wlDelta} \
528
+ 0 0 0 1 0" />\
529
+ </filter>\
530
+ </svg>#colour')`;
531
+ this.canvas.style.filter = this.feFilter;
532
+ }
533
+ setCamera(camera) {
534
+ const { parallelScale, focalPoint } = camera;
535
+ if (parallelScale) {
536
+ this.videoCamera.parallelScale =
537
+ this.element.clientHeight / 2 / parallelScale;
538
+ }
539
+ if (focalPoint !== undefined) {
540
+ const focalPointCanvas = this.worldToCanvas(focalPoint);
541
+ const canvasCenter = [
542
+ this.element.clientWidth / 2,
543
+ this.element.clientHeight / 2,
544
+ ];
545
+ const panWorldDelta = [
546
+ (focalPointCanvas[0] - canvasCenter[0]) /
547
+ this.videoCamera.parallelScale,
548
+ (focalPointCanvas[1] - canvasCenter[1]) /
549
+ this.videoCamera.parallelScale,
550
+ ];
551
+ this.videoCamera.panWorld = [
552
+ this.videoCamera.panWorld[0] - panWorldDelta[0],
553
+ this.videoCamera.panWorld[1] - panWorldDelta[1],
554
+ ];
555
+ }
556
+ this.canvasContext.fillStyle = 'rgba(0,0,0,1)';
557
+ this.canvasContext.fillRect(0, 0, this.canvas.width, this.canvas.height);
558
+ if (this.isPlaying === false) {
559
+ this.renderFrame();
560
+ }
561
+ }
562
+ getCurrentImageId() {
563
+ const current = this.imageId.replace('/frames/1', this.isPlaying
564
+ ? `/frames/${this.frameRange[0]}-${this.frameRange[1]}`
565
+ : `/frames/${this.getFrameNumber()}`);
566
+ return current;
567
+ }
568
+ getReferenceId(specifier = {}) {
569
+ const { sliceIndex: sliceIndex } = specifier;
570
+ if (sliceIndex === undefined) {
571
+ return `videoId:${this.getCurrentImageId()}`;
572
+ }
573
+ if (Array.isArray(sliceIndex)) {
574
+ return `videoId:${this.imageId.substring(0, this.imageId.length - 1)}${sliceIndex[0] + 1}-${sliceIndex[1] + 1}`;
575
+ }
576
+ const baseTarget = this.imageId.replace('/frames/1', `/frames/${1 + sliceIndex}`);
577
+ return `videoId:${baseTarget}`;
578
+ }
579
+ isReferenceViewable(viewRef, options = {}) {
580
+ let { imageURI } = options;
581
+ const { referencedImageId, sliceIndex: sliceIndex } = viewRef;
582
+ if (!super.isReferenceViewable(viewRef)) {
583
+ return false;
584
+ }
585
+ const imageId = this.getCurrentImageId();
586
+ if (!imageURI) {
587
+ const colonIndex = imageId.indexOf(':');
588
+ imageURI = imageId.substring(colonIndex + 1, imageId.length - 1);
589
+ }
590
+ if (options.withNavigation) {
591
+ return true;
592
+ }
593
+ const currentIndex = this.getSliceIndex();
594
+ if (Array.isArray(sliceIndex)) {
595
+ return currentIndex >= sliceIndex[0] && currentIndex <= sliceIndex[1];
596
+ }
597
+ if (sliceIndex !== undefined) {
598
+ return currentIndex === sliceIndex;
599
+ }
600
+ if (!referencedImageId) {
601
+ return false;
602
+ }
603
+ const match = referencedImageId.match(VideoViewport.frameRangeExtractor);
604
+ if (!match || !match[2]) {
605
+ return true;
606
+ }
607
+ const range = match[2].split('-').map((it) => Number(it));
608
+ const frame = currentIndex + 1;
609
+ return range[0] <= frame && frame <= (range[1] ?? range[0]);
610
+ }
611
+ setViewReference(viewRef) {
612
+ if (typeof viewRef.sliceIndex === 'number') {
613
+ this.setFrameNumber(viewRef.sliceIndex + 1);
614
+ }
615
+ else if (Array.isArray(viewRef.sliceIndex)) {
616
+ this.setFrameRange(viewRef.sliceIndex);
617
+ }
618
+ }
619
+ getViewReference(viewRefSpecifier) {
620
+ let sliceIndex = viewRefSpecifier?.sliceIndex;
621
+ if (!sliceIndex) {
622
+ sliceIndex = this.isPlaying
623
+ ? [this.frameRange[0] - 1, this.frameRange[1] - 1]
624
+ : this.getCurrentImageIdIndex();
625
+ }
626
+ return {
627
+ ...super.getViewReference(viewRefSpecifier),
628
+ referencedImageId: this.getReferenceId(viewRefSpecifier),
629
+ sliceIndex: sliceIndex,
630
+ };
631
+ }
632
+ getFrameNumber() {
633
+ return 1 + this.getCurrentImageIdIndex();
634
+ }
635
+ getCurrentImageIdIndex() {
636
+ return Math.round(this.videoElement.currentTime * this.fps);
637
+ }
638
+ getSliceIndex() {
639
+ return this.getCurrentImageIdIndex() / this.scrollSpeed;
640
+ }
641
+ getCamera() {
642
+ const { parallelScale } = this.videoCamera;
643
+ const canvasCenter = [
644
+ this.element.clientWidth / 2,
645
+ this.element.clientHeight / 2,
646
+ ];
647
+ const canvasCenterWorld = this.canvasToWorld(canvasCenter);
648
+ return {
649
+ parallelProjection: true,
650
+ focalPoint: canvasCenterWorld,
651
+ position: [0, 0, 0],
652
+ viewUp: [0, -1, 0],
653
+ parallelScale: this.element.clientHeight / 2 / parallelScale,
654
+ viewPlaneNormal: [0, 0, 1],
655
+ };
656
+ }
657
+ getFrameRate() {
658
+ return this.fps;
659
+ }
660
+ getPan() {
661
+ const panWorld = this.videoCamera.panWorld;
662
+ return [panWorld[0], panWorld[1]];
663
+ }
664
+ refreshRenderValues() {
665
+ let worldToCanvasRatio = this.canvas.offsetWidth / this.videoWidth;
666
+ if (this.videoHeight * worldToCanvasRatio > this.canvas.height) {
667
+ worldToCanvasRatio = this.canvas.offsetHeight / this.videoHeight;
668
+ }
669
+ const drawWidth = Math.floor(this.videoWidth * worldToCanvasRatio);
670
+ const drawHeight = Math.floor(this.videoHeight * worldToCanvasRatio);
671
+ const xOffsetCanvas = (this.canvas.offsetWidth - drawWidth) / 2;
672
+ const yOffsetCanvas = (this.canvas.offsetHeight - drawHeight) / 2;
673
+ const xOffsetWorld = xOffsetCanvas / worldToCanvasRatio;
674
+ const yOffsetWorld = yOffsetCanvas / worldToCanvasRatio;
675
+ this.videoCamera.panWorld = [xOffsetWorld, yOffsetWorld];
676
+ this.videoCamera.parallelScale = worldToCanvasRatio;
677
+ }
678
+ getWorldToCanvasRatio() {
679
+ return this.videoCamera.parallelScale;
680
+ }
681
+ getCanvasToWorldRatio() {
682
+ return 1.0 / this.videoCamera.parallelScale;
683
+ }
684
+ getTransform() {
685
+ const panWorld = this.videoCamera.panWorld;
686
+ const devicePixelRatio = window.devicePixelRatio || 1;
687
+ const worldToCanvasRatio = this.getWorldToCanvasRatio();
688
+ const canvasToWorldRatio = this.getCanvasToWorldRatio();
689
+ const halfCanvas = [
690
+ this.canvas.offsetWidth / 2,
691
+ this.canvas.offsetHeight / 2,
692
+ ];
693
+ const halfCanvasWorldCoordinates = [
694
+ halfCanvas[0] * canvasToWorldRatio,
695
+ halfCanvas[1] * canvasToWorldRatio,
696
+ ];
697
+ const transform = new _helpers_cpuFallback_rendering_transform__WEBPACK_IMPORTED_MODULE_3__/* .Transform */ .w();
698
+ transform.scale(devicePixelRatio, devicePixelRatio);
699
+ transform.translate(halfCanvas[0], halfCanvas[1]);
700
+ transform.scale(worldToCanvasRatio, worldToCanvasRatio);
701
+ transform.translate(panWorld[0], panWorld[1]);
702
+ transform.translate(-halfCanvasWorldCoordinates[0], -halfCanvasWorldCoordinates[1]);
703
+ return transform;
704
+ }
705
+ updateCameraClippingPlanesAndRange() {
706
+ }
707
+ addImages(stackInputs) {
708
+ const actors = this.getActors();
709
+ stackInputs.forEach((stackInput) => {
710
+ const image = _cache__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .ZP.getImage(stackInput.imageId);
711
+ const imageActor = this.createActorMapper(image);
712
+ if (imageActor) {
713
+ actors.push({ uid: stackInput.actorUID, actor: imageActor });
714
+ if (stackInput.callback) {
715
+ stackInput.callback({ imageActor, imageId: stackInput.imageId });
716
+ }
717
+ }
718
+ });
719
+ this.setActors(actors);
720
+ }
721
+ createActorMapper(image) {
722
+ return new _CanvasActor__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z(this, image);
723
+ }
724
+ }
725
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (VideoViewport);
726
+
727
+
728
+ /***/ }),
2
729
 
3
730
  /***/ 68467:
4
731
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1023,8 +1750,8 @@ function storedPixelDataToCanvasImageDataPseudocolorLUTPET(image, lutFunction, c
1023
1750
  }
1024
1751
  /* harmony default export */ const rendering_storedPixelDataToCanvasImageDataPseudocolorLUTPET = (storedPixelDataToCanvasImageDataPseudocolorLUTPET);
1025
1752
 
1026
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/index.js + 67 modules
1027
- var utilities = __webpack_require__(11723);
1753
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/index.js + 66 modules
1754
+ var utilities = __webpack_require__(56309);
1028
1755
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/renderPseudoColorImage.js
1029
1756
 
1030
1757
 
@@ -1633,6 +2360,97 @@ function relativeRescale(enabledElement, oldCanvasWidth, oldCanvasHeight) {
1633
2360
  }
1634
2361
 
1635
2362
 
2363
+ /***/ }),
2364
+
2365
+ /***/ 30742:
2366
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2367
+
2368
+ "use strict";
2369
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2370
+ /* harmony export */ w: () => (/* binding */ Transform)
2371
+ /* harmony export */ });
2372
+ class Transform {
2373
+ constructor() {
2374
+ this.reset();
2375
+ }
2376
+ getMatrix() {
2377
+ return this.m;
2378
+ }
2379
+ reset() {
2380
+ this.m = [1, 0, 0, 1, 0, 0];
2381
+ }
2382
+ clone() {
2383
+ const transform = new Transform();
2384
+ transform.m[0] = this.m[0];
2385
+ transform.m[1] = this.m[1];
2386
+ transform.m[2] = this.m[2];
2387
+ transform.m[3] = this.m[3];
2388
+ transform.m[4] = this.m[4];
2389
+ transform.m[5] = this.m[5];
2390
+ return transform;
2391
+ }
2392
+ multiply(matrix) {
2393
+ const m11 = this.m[0] * matrix[0] + this.m[2] * matrix[1];
2394
+ const m12 = this.m[1] * matrix[0] + this.m[3] * matrix[1];
2395
+ const m21 = this.m[0] * matrix[2] + this.m[2] * matrix[3];
2396
+ const m22 = this.m[1] * matrix[2] + this.m[3] * matrix[3];
2397
+ const dx = this.m[0] * matrix[4] + this.m[2] * matrix[5] + this.m[4];
2398
+ const dy = this.m[1] * matrix[4] + this.m[3] * matrix[5] + this.m[5];
2399
+ this.m[0] = m11;
2400
+ this.m[1] = m12;
2401
+ this.m[2] = m21;
2402
+ this.m[3] = m22;
2403
+ this.m[4] = dx;
2404
+ this.m[5] = dy;
2405
+ }
2406
+ invert() {
2407
+ const d = 1 / (this.m[0] * this.m[3] - this.m[1] * this.m[2]);
2408
+ const m0 = this.m[3] * d;
2409
+ const m1 = -this.m[1] * d;
2410
+ const m2 = -this.m[2] * d;
2411
+ const m3 = this.m[0] * d;
2412
+ const m4 = d * (this.m[2] * this.m[5] - this.m[3] * this.m[4]);
2413
+ const m5 = d * (this.m[1] * this.m[4] - this.m[0] * this.m[5]);
2414
+ this.m[0] = m0;
2415
+ this.m[1] = m1;
2416
+ this.m[2] = m2;
2417
+ this.m[3] = m3;
2418
+ this.m[4] = m4;
2419
+ this.m[5] = m5;
2420
+ }
2421
+ rotate(rad) {
2422
+ const c = Math.cos(rad);
2423
+ const s = Math.sin(rad);
2424
+ const m11 = this.m[0] * c + this.m[2] * s;
2425
+ const m12 = this.m[1] * c + this.m[3] * s;
2426
+ const m21 = this.m[0] * -s + this.m[2] * c;
2427
+ const m22 = this.m[1] * -s + this.m[3] * c;
2428
+ this.m[0] = m11;
2429
+ this.m[1] = m12;
2430
+ this.m[2] = m21;
2431
+ this.m[3] = m22;
2432
+ }
2433
+ translate(x, y) {
2434
+ this.m[4] += this.m[0] * x + this.m[2] * y;
2435
+ this.m[5] += this.m[1] * x + this.m[3] * y;
2436
+ }
2437
+ scale(sx, sy) {
2438
+ this.m[0] *= sx;
2439
+ this.m[1] *= sx;
2440
+ this.m[2] *= sy;
2441
+ this.m[3] *= sy;
2442
+ }
2443
+ transformPoint(point) {
2444
+ const x = point[0];
2445
+ const y = point[1];
2446
+ return [
2447
+ x * this.m[0] + y * this.m[2] + this.m[4],
2448
+ x * this.m[1] + y * this.m[3] + this.m[5],
2449
+ ];
2450
+ }
2451
+ }
2452
+
2453
+
1636
2454
  /***/ }),
1637
2455
 
1638
2456
  /***/ 6737:
@@ -1820,8 +2638,8 @@ var vtkVolume$1 = {
1820
2638
  var volumeLoader = __webpack_require__(18588);
1821
2639
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/RenderingEngine/helpers/createVolumeMapper.js
1822
2640
  var createVolumeMapper = __webpack_require__(49046);
1823
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/index.js + 67 modules
1824
- var utilities = __webpack_require__(11723);
2641
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/index.js + 66 modules
2642
+ var utilities = __webpack_require__(56309);
1825
2643
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/index.js + 4 modules
1826
2644
  var enums = __webpack_require__(7187);
1827
2645
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.js
@@ -1891,7 +2709,7 @@ function triggerVOIModified(element, viewportId, volumeActor, volumeId) {
1891
2709
  /* harmony export */ });
1892
2710
  /* harmony import */ var _loaders_imageLoader__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62990);
1893
2711
  /* harmony import */ var _metaData__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30023);
1894
- /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(11723);
2712
+ /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(56309);
1895
2713
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7187);
1896
2714
  /* harmony import */ var _cache__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(82253);
1897
2715
 
@@ -2072,240 +2890,35 @@ const newInstance = _kitware_vtk_js_macros__WEBPACK_IMPORTED_MODULE_0__/* ["defa
2072
2890
 
2073
2891
  /***/ }),
2074
2892
 
2075
- /***/ 90261:
2893
+ /***/ 5287:
2076
2894
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2077
2895
 
2078
2896
  "use strict";
2079
2897
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2080
- /* harmony export */ Z: () => (/* binding */ Settings)
2898
+ /* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
2081
2899
  /* harmony export */ });
2082
- const DEFAULT_SETTINGS = Symbol('DefaultSettings');
2083
- const RUNTIME_SETTINGS = Symbol('RuntimeSettings');
2084
- const OBJECT_SETTINGS_MAP = Symbol('ObjectSettingsMap');
2085
- const DICTIONARY = Symbol('Dictionary');
2086
- class Settings {
2087
- constructor(base) {
2088
- const dictionary = Object.create((base instanceof Settings && DICTIONARY in base
2089
- ? base[DICTIONARY]
2090
- : null));
2091
- Object.seal(Object.defineProperty(this, DICTIONARY, {
2092
- value: dictionary,
2093
- }));
2094
- }
2095
- set(key, value) {
2096
- return set(this[DICTIONARY], key, value, null);
2097
- }
2098
- get(key) {
2099
- return get(this[DICTIONARY], key);
2100
- }
2101
- unset(key) {
2102
- return unset(this[DICTIONARY], key + '');
2103
- }
2104
- forEach(callback) {
2105
- iterate(this[DICTIONARY], callback);
2106
- }
2107
- extend() {
2108
- return new Settings(this);
2109
- }
2110
- import(root) {
2111
- if (isPlainObject(root)) {
2112
- Object.keys(root).forEach((key) => {
2113
- set(this[DICTIONARY], key, root[key], null);
2114
- });
2115
- }
2116
- }
2117
- dump() {
2118
- const context = {};
2119
- iterate(this[DICTIONARY], (key, value) => {
2120
- if (typeof value !== 'undefined') {
2121
- deepSet(context, key, value);
2122
- }
2123
- });
2124
- return context;
2125
- }
2126
- static assert(subject) {
2127
- return subject instanceof Settings
2128
- ? subject
2129
- : Settings.getRuntimeSettings();
2130
- }
2131
- static getDefaultSettings(subfield = null) {
2132
- let defaultSettings = Settings[DEFAULT_SETTINGS];
2133
- if (!(defaultSettings instanceof Settings)) {
2134
- defaultSettings = new Settings();
2135
- Settings[DEFAULT_SETTINGS] = defaultSettings;
2136
- }
2137
- if (subfield) {
2138
- const settingObj = {};
2139
- defaultSettings.forEach((name) => {
2140
- if (name.startsWith(subfield)) {
2141
- const setting = name.split(`${subfield}.`)[1];
2142
- settingObj[setting] = defaultSettings.get(name);
2143
- }
2144
- });
2145
- return settingObj;
2146
- }
2147
- return defaultSettings;
2148
- }
2149
- static getRuntimeSettings() {
2150
- let runtimeSettings = Settings[RUNTIME_SETTINGS];
2151
- if (!(runtimeSettings instanceof Settings)) {
2152
- runtimeSettings = new Settings(Settings.getDefaultSettings());
2153
- Settings[RUNTIME_SETTINGS] = runtimeSettings;
2154
- }
2155
- return runtimeSettings;
2156
- }
2157
- static getObjectSettings(subject, from) {
2158
- let settings = null;
2159
- if (subject instanceof Settings) {
2160
- settings = subject;
2161
- }
2162
- else if (typeof subject === 'object' && subject !== null) {
2163
- let objectSettingsMap = Settings[OBJECT_SETTINGS_MAP];
2164
- if (!(objectSettingsMap instanceof WeakMap)) {
2165
- objectSettingsMap = new WeakMap();
2166
- Settings[OBJECT_SETTINGS_MAP] = objectSettingsMap;
2167
- }
2168
- settings = objectSettingsMap.get(subject);
2169
- if (!(settings instanceof Settings)) {
2170
- settings = new Settings(Settings.assert(Settings.getObjectSettings(from)));
2171
- objectSettingsMap.set(subject, settings);
2172
- }
2173
- }
2174
- return settings;
2175
- }
2176
- static extendRuntimeSettings() {
2177
- return Settings.getRuntimeSettings().extend();
2178
- }
2179
- }
2180
- function unset(dictionary, name) {
2181
- if (name.endsWith('.')) {
2182
- let deleteCount = 0;
2183
- const namespace = name;
2184
- const base = namespace.slice(0, -1);
2185
- const deleteAll = base.length === 0;
2186
- for (const key in dictionary) {
2187
- if (Object.prototype.hasOwnProperty.call(dictionary, key) &&
2188
- (deleteAll || key.startsWith(namespace) || key === base)) {
2189
- delete dictionary[key];
2190
- ++deleteCount;
2191
- }
2192
- }
2193
- return deleteCount > 0;
2194
- }
2195
- return delete dictionary[name];
2196
- }
2197
- function iterate(dictionary, callback) {
2198
- for (const key in dictionary) {
2199
- callback(key, dictionary[key]);
2200
- }
2201
- }
2202
- function setAll(dictionary, prefix, record, references) {
2203
- let failCount;
2204
- if (references.has(record)) {
2205
- return set(dictionary, prefix, null, references);
2206
- }
2207
- references.add(record);
2208
- failCount = 0;
2209
- for (const field in record) {
2210
- if (Object.prototype.hasOwnProperty.call(record, field)) {
2211
- const key = field.length === 0 ? prefix : `${prefix}.${field}`;
2212
- if (!set(dictionary, key, record[field], references)) {
2213
- ++failCount;
2214
- }
2215
- }
2216
- }
2217
- references.delete(record);
2218
- return failCount === 0;
2219
- }
2220
- function set(dictionary, key, value, references) {
2221
- if (isValidKey(key)) {
2222
- if (isPlainObject(value)) {
2223
- return setAll(dictionary, key, value, references instanceof WeakSet ? references : new WeakSet());
2224
- }
2225
- dictionary[key] = value;
2226
- return true;
2227
- }
2228
- return false;
2229
- }
2230
- function get(dictionary, key) {
2231
- return dictionary[key];
2232
- }
2233
- function isValidKey(key) {
2234
- let last, current, previous;
2235
- if (typeof key !== 'string' || (last = key.length - 1) < 0) {
2236
- return false;
2237
- }
2238
- previous = -1;
2239
- while ((current = key.indexOf('.', previous + 1)) >= 0) {
2240
- if (current - previous < 2 || current === last) {
2241
- return false;
2242
- }
2243
- previous = current;
2244
- }
2245
- return true;
2246
- }
2247
- function isPlainObject(subject) {
2248
- if (typeof subject === 'object' && subject !== null) {
2249
- const prototype = Object.getPrototypeOf(subject);
2250
- if (prototype === Object.prototype || prototype === null) {
2251
- return true;
2252
- }
2253
- }
2254
- return false;
2255
- }
2256
- function deepSet(context, key, value) {
2257
- const separator = key.indexOf('.');
2258
- if (separator >= 0) {
2259
- const subKey = key.slice(0, separator);
2260
- let subContext = context[subKey];
2261
- if (typeof subContext !== 'object' || subContext === null) {
2262
- const subContextValue = subContext;
2263
- subContext = {};
2264
- if (typeof subContextValue !== 'undefined') {
2265
- subContext[''] = subContextValue;
2266
- }
2267
- context[subKey] = subContext;
2268
- }
2269
- deepSet(subContext, key.slice(separator + 1, key.length), value);
2270
- }
2271
- else {
2272
- context[key] = value;
2273
- }
2274
- }
2275
- Settings.getDefaultSettings().set('useCursors', true);
2276
-
2277
-
2278
- /***/ }),
2279
-
2280
- /***/ 5287:
2281
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2282
-
2283
- "use strict";
2284
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2285
- /* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
2286
- /* harmony export */ });
2287
- /* unused harmony export Cache */
2288
- /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(11723);
2289
- /* harmony import */ var _eventTarget__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74238);
2290
- /* harmony import */ var _enums_Events__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(19546);
2291
- /* harmony import */ var _classes_ImageVolume__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(84326);
2292
-
2293
-
2294
-
2295
-
2296
- const ONE_GB = 1073741824;
2297
- class Cache {
2298
- constructor() {
2299
- this._imageCache = new Map();
2300
- this._volumeCache = new Map();
2301
- this._imageCacheSize = 0;
2302
- this._volumeCacheSize = 0;
2303
- this._maxCacheSize = 3 * ONE_GB;
2304
- this._maxInstanceSize = 4 * ONE_GB - 8;
2305
- this.setMaxCacheSize = (newMaxCacheSize) => {
2306
- if (!newMaxCacheSize || typeof newMaxCacheSize !== 'number') {
2307
- const errorMessage = `New max cacheSize ${this._maxCacheSize} should be defined and should be a number.`;
2308
- throw new Error(errorMessage);
2900
+ /* unused harmony export Cache */
2901
+ /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(56309);
2902
+ /* harmony import */ var _eventTarget__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74238);
2903
+ /* harmony import */ var _enums_Events__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(19546);
2904
+ /* harmony import */ var _classes_ImageVolume__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(84326);
2905
+
2906
+
2907
+
2908
+
2909
+ const ONE_GB = 1073741824;
2910
+ class Cache {
2911
+ constructor() {
2912
+ this._imageCache = new Map();
2913
+ this._volumeCache = new Map();
2914
+ this._imageCacheSize = 0;
2915
+ this._volumeCacheSize = 0;
2916
+ this._maxCacheSize = 3 * ONE_GB;
2917
+ this._maxInstanceSize = 4 * ONE_GB - 8;
2918
+ this.setMaxCacheSize = (newMaxCacheSize) => {
2919
+ if (!newMaxCacheSize || typeof newMaxCacheSize !== 'number') {
2920
+ const errorMessage = `New max cacheSize ${this._maxCacheSize} should be defined and should be a number.`;
2921
+ throw new Error(errorMessage);
2309
2922
  }
2310
2923
  this._maxCacheSize = newMaxCacheSize;
2311
2924
  };
@@ -2322,7 +2935,11 @@ class Cache {
2322
2935
  this.getMaxInstanceSize = () => this._maxInstanceSize;
2323
2936
  this.getCacheSize = () => this._imageCacheSize + this._volumeCacheSize;
2324
2937
  this._decacheImage = (imageId) => {
2325
- const { imageLoadObject } = this._imageCache.get(imageId);
2938
+ const cachedImage = this._imageCache.get(imageId);
2939
+ if (!cachedImage) {
2940
+ return;
2941
+ }
2942
+ const { imageLoadObject } = cachedImage;
2326
2943
  if (imageLoadObject.cancelFn) {
2327
2944
  imageLoadObject.cancelFn();
2328
2945
  }
@@ -2333,7 +2950,13 @@ class Cache {
2333
2950
  };
2334
2951
  this._decacheVolume = (volumeId) => {
2335
2952
  const cachedVolume = this._volumeCache.get(volumeId);
2953
+ if (!cachedVolume) {
2954
+ return;
2955
+ }
2336
2956
  const { volumeLoadObject, volume } = cachedVolume;
2957
+ if (!volume) {
2958
+ return;
2959
+ }
2337
2960
  if (volume.cancelLoading) {
2338
2961
  volume.cancelLoading();
2339
2962
  }
@@ -2379,7 +3002,7 @@ class Cache {
2379
3002
  throw new Error('getVolumeLoadObject: volumeId must not be undefined');
2380
3003
  }
2381
3004
  const cachedVolume = this._volumeCache.get(volumeId);
2382
- if (cachedVolume === undefined) {
3005
+ if (!cachedVolume) {
2383
3006
  return;
2384
3007
  }
2385
3008
  cachedVolume.timeStamp = Date.now();
@@ -2390,7 +3013,7 @@ class Cache {
2390
3013
  throw new Error('getGeometry: geometryId must not be undefined');
2391
3014
  }
2392
3015
  const cachedGeometry = this._geometryCache.get(geometryId);
2393
- if (cachedGeometry === undefined) {
3016
+ if (!cachedGeometry) {
2394
3017
  return;
2395
3018
  }
2396
3019
  cachedGeometry.timeStamp = Date.now();
@@ -2401,7 +3024,7 @@ class Cache {
2401
3024
  throw new Error('getImage: imageId must not be undefined');
2402
3025
  }
2403
3026
  const cachedImage = this._imageCache.get(imageId);
2404
- if (cachedImage === undefined) {
3027
+ if (!cachedImage) {
2405
3028
  return;
2406
3029
  }
2407
3030
  cachedImage.timeStamp = Date.now();
@@ -2412,7 +3035,7 @@ class Cache {
2412
3035
  throw new Error('getVolume: volumeId must not be undefined');
2413
3036
  }
2414
3037
  const cachedVolume = this._volumeCache.get(volumeId);
2415
- if (cachedVolume === undefined) {
3038
+ if (!cachedVolume) {
2416
3039
  return;
2417
3040
  }
2418
3041
  cachedVolume.timeStamp = Date.now();
@@ -2433,7 +3056,7 @@ class Cache {
2433
3056
  throw new Error('removeImageLoadObject: imageId must not be undefined');
2434
3057
  }
2435
3058
  const cachedImage = this._imageCache.get(imageId);
2436
- if (cachedImage === undefined) {
3059
+ if (!cachedImage) {
2437
3060
  throw new Error('removeImageLoadObject: imageId was not present in imageCache');
2438
3061
  }
2439
3062
  this.incrementImageCacheSize(-cachedImage.sizeInBytes);
@@ -2449,7 +3072,7 @@ class Cache {
2449
3072
  throw new Error('removeVolumeLoadObject: volumeId must not be undefined');
2450
3073
  }
2451
3074
  const cachedVolume = this._volumeCache.get(volumeId);
2452
- if (cachedVolume === undefined) {
3075
+ if (!cachedVolume) {
2453
3076
  throw new Error('removeVolumeLoadObject: volumeId was not present in volumeCache');
2454
3077
  }
2455
3078
  this.incrementVolumeCacheSize(-cachedVolume.sizeInBytes);
@@ -2616,7 +3239,7 @@ class Cache {
2616
3239
  throw new Error('getImageLoadObject: imageId must not be undefined');
2617
3240
  }
2618
3241
  const cachedImage = this._imageCache.get(imageId);
2619
- if (cachedImage === undefined) {
3242
+ if (!cachedImage) {
2620
3243
  return;
2621
3244
  }
2622
3245
  cachedImage.timeStamp = Date.now();
@@ -2634,6 +3257,9 @@ class Cache {
2634
3257
  const imageIdToUse = (0,_utilities__WEBPACK_IMPORTED_MODULE_0__.imageIdToURI)(imageId);
2635
3258
  for (const volumeId of volumeIds) {
2636
3259
  const cachedVolume = this._volumeCache.get(volumeId);
3260
+ if (!cachedVolume) {
3261
+ return;
3262
+ }
2637
3263
  const { volume } = cachedVolume;
2638
3264
  if (!volume?.imageIds?.length) {
2639
3265
  return;
@@ -2739,32 +3365,49 @@ const cache = new Cache();
2739
3365
 
2740
3366
  /***/ }),
2741
3367
 
2742
- /***/ 34061:
3368
+ /***/ 19247:
2743
3369
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2744
3370
 
2745
3371
  "use strict";
2746
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2747
- /* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
2748
- /* harmony export */ });
2749
- const EPSILON = 1e-3;
2750
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EPSILON);
2751
-
2752
3372
 
2753
- /***/ }),
3373
+ // EXPORTS
3374
+ __webpack_require__.d(__webpack_exports__, {
3375
+ EPSILON: () => (/* reexport */ epsilon),
3376
+ MPR_CAMERA_VALUES: () => (/* reexport */ mprCameraValues/* default */.Z),
3377
+ RENDERING_DEFAULTS: () => (/* reexport */ rendering),
3378
+ VIEWPORT_PRESETS: () => (/* reexport */ viewportPresets/* default */.Z)
3379
+ });
2754
3380
 
2755
- /***/ 87525:
2756
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3381
+ // UNUSED EXPORTS: BACKGROUND_COLORS, CPU_COLORMAPS
2757
3382
 
2758
- "use strict";
2759
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2760
- /* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
2761
- /* harmony export */ });
3383
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/constants/cpuColormaps.js
3384
+ var cpuColormaps = __webpack_require__(52813);
3385
+ ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/constants/rendering.js
2762
3386
  const RENDERING_DEFAULTS = {
2763
3387
  MINIMUM_SLAB_THICKNESS: 5e-2,
2764
3388
  MAXIMUM_RAY_DISTANCE: 1e6,
2765
3389
  };
2766
3390
  Object.freeze(RENDERING_DEFAULTS);
2767
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RENDERING_DEFAULTS);
3391
+ /* harmony default export */ const rendering = (RENDERING_DEFAULTS);
3392
+
3393
+ ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/constants/epsilon.js
3394
+ const EPSILON = 1e-3;
3395
+ /* harmony default export */ const epsilon = (EPSILON);
3396
+
3397
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/constants/mprCameraValues.js + 1 modules
3398
+ var mprCameraValues = __webpack_require__(21306);
3399
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/constants/viewportPresets.js
3400
+ var viewportPresets = __webpack_require__(89469);
3401
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/constants/backgroundColors.js
3402
+ var backgroundColors = __webpack_require__(43220);
3403
+ ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/constants/index.js
3404
+
3405
+
3406
+
3407
+
3408
+
3409
+
3410
+
2768
3411
 
2769
3412
 
2770
3413
  /***/ }),
@@ -2811,98 +3454,478 @@ var ViewportStatus;
2811
3454
  /***/ 7187:
2812
3455
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2813
3456
 
2814
- "use strict";
3457
+ "use strict";
3458
+
3459
+ // EXPORTS
3460
+ __webpack_require__.d(__webpack_exports__, {
3461
+ BlendModes: () => (/* reexport */ enums_BlendModes),
3462
+ CalibrationTypes: () => (/* reexport */ enums_CalibrationTypes),
3463
+ DynamicOperatorType: () => (/* reexport */ enums_DynamicOperatorType),
3464
+ Events: () => (/* reexport */ Events/* default */.Z),
3465
+ GeometryType: () => (/* reexport */ enums_GeometryType),
3466
+ ImageQualityStatus: () => (/* reexport */ ImageQualityStatus/* default */.Z),
3467
+ InterpolationType: () => (/* reexport */ InterpolationType/* default */.Z),
3468
+ MetadataModules: () => (/* reexport */ MetadataModules/* default */.Z),
3469
+ OrientationAxis: () => (/* reexport */ OrientationAxis/* default */.Z),
3470
+ RequestType: () => (/* reexport */ RequestType/* default */.Z),
3471
+ SharedArrayBufferModes: () => (/* reexport */ SharedArrayBufferModes/* default */.Z),
3472
+ VOILUTFunctionType: () => (/* reexport */ VOILUTFunctionType/* default */.Z),
3473
+ VideoEnums: () => (/* reexport */ VideoEnums),
3474
+ ViewportStatus: () => (/* reexport */ ViewportStatus/* default */.Z),
3475
+ ViewportType: () => (/* reexport */ ViewportType/* default */.Z)
3476
+ });
3477
+
3478
+ // UNUSED EXPORTS: ContourType
3479
+
3480
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/Events.js
3481
+ var Events = __webpack_require__(19546);
3482
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/RequestType.js
3483
+ var RequestType = __webpack_require__(49334);
3484
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/ViewportType.js
3485
+ var ViewportType = __webpack_require__(68032);
3486
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/InterpolationType.js
3487
+ var InterpolationType = __webpack_require__(75677);
3488
+ // EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Rendering/Core/VolumeMapper/Constants.js
3489
+ var Constants = __webpack_require__(83336);
3490
+ ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/BlendModes.js
3491
+
3492
+ const { BlendMode } = Constants["default"];
3493
+ var BlendModes;
3494
+ (function (BlendModes) {
3495
+ BlendModes[BlendModes["COMPOSITE"] = 0] = "COMPOSITE";
3496
+ BlendModes[BlendModes["MAXIMUM_INTENSITY_BLEND"] = 1] = "MAXIMUM_INTENSITY_BLEND";
3497
+ BlendModes[BlendModes["MINIMUM_INTENSITY_BLEND"] = 2] = "MINIMUM_INTENSITY_BLEND";
3498
+ BlendModes[BlendModes["AVERAGE_INTENSITY_BLEND"] = 3] = "AVERAGE_INTENSITY_BLEND";
3499
+ })(BlendModes || (BlendModes = {}));
3500
+ /* harmony default export */ const enums_BlendModes = (BlendModes);
3501
+
3502
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/OrientationAxis.js
3503
+ var OrientationAxis = __webpack_require__(96426);
3504
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/SharedArrayBufferModes.js
3505
+ var SharedArrayBufferModes = __webpack_require__(91799);
3506
+ ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/GeometryType.js
3507
+ var GeometryType;
3508
+ (function (GeometryType) {
3509
+ GeometryType["CONTOUR"] = "contour";
3510
+ GeometryType["SURFACE"] = "Surface";
3511
+ })(GeometryType || (GeometryType = {}));
3512
+ /* harmony default export */ const enums_GeometryType = (GeometryType);
3513
+
3514
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/ContourType.js
3515
+ var ContourType = __webpack_require__(2689);
3516
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/VOILUTFunctionType.js
3517
+ var VOILUTFunctionType = __webpack_require__(67751);
3518
+ ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/DynamicOperatorType.js
3519
+ var DynamicOperatorType;
3520
+ (function (DynamicOperatorType) {
3521
+ DynamicOperatorType["SUM"] = "SUM";
3522
+ DynamicOperatorType["AVERAGE"] = "AVERAGE";
3523
+ DynamicOperatorType["SUBTRACT"] = "SUBTRACT";
3524
+ })(DynamicOperatorType || (DynamicOperatorType = {}));
3525
+ /* harmony default export */ const enums_DynamicOperatorType = (DynamicOperatorType);
3526
+
3527
+ ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/CalibrationTypes.js
3528
+ var CalibrationTypes;
3529
+ (function (CalibrationTypes) {
3530
+ CalibrationTypes["NOT_APPLICABLE"] = "";
3531
+ CalibrationTypes["ERMF"] = "ERMF";
3532
+ CalibrationTypes["USER"] = "User";
3533
+ CalibrationTypes["PROJECTION"] = "Proj";
3534
+ CalibrationTypes["REGION"] = "Region";
3535
+ CalibrationTypes["ERROR"] = "Error";
3536
+ CalibrationTypes["UNCALIBRATED"] = "Uncalibrated";
3537
+ })(CalibrationTypes || (CalibrationTypes = {}));
3538
+ /* harmony default export */ const enums_CalibrationTypes = (CalibrationTypes);
3539
+
3540
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/ViewportStatus.js
3541
+ var ViewportStatus = __webpack_require__(84659);
3542
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/ImageQualityStatus.js
3543
+ var ImageQualityStatus = __webpack_require__(83521);
3544
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/VideoEnums.js
3545
+ var VideoEnums = __webpack_require__(40373);
3546
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/MetadataModules.js
3547
+ var MetadataModules = __webpack_require__(636);
3548
+ ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/index.js
3549
+
3550
+
3551
+
3552
+
3553
+
3554
+
3555
+
3556
+
3557
+
3558
+
3559
+
3560
+
3561
+
3562
+
3563
+
3564
+
3565
+
3566
+
3567
+
3568
+ /***/ }),
3569
+
3570
+ /***/ 65279:
3571
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3572
+
3573
+ "use strict";
3574
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3575
+ /* harmony export */ O: () => (/* binding */ getEnabledElementByIds),
3576
+ /* harmony export */ Yz: () => (/* binding */ getEnabledElementByViewportId),
3577
+ /* harmony export */ ZP: () => (/* binding */ getEnabledElement),
3578
+ /* harmony export */ wN: () => (/* binding */ getEnabledElements)
3579
+ /* harmony export */ });
3580
+ /* harmony import */ var _RenderingEngine_getRenderingEngine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9138);
3581
+
3582
+ function getEnabledElement(element) {
3583
+ if (!element) {
3584
+ return;
3585
+ }
3586
+ const { viewportUid, renderingEngineUid } = element.dataset;
3587
+ return getEnabledElementByIds(viewportUid, renderingEngineUid);
3588
+ }
3589
+ function getEnabledElementByIds(viewportId, renderingEngineId) {
3590
+ if (!renderingEngineId || !viewportId) {
3591
+ return;
3592
+ }
3593
+ const renderingEngine = (0,_RenderingEngine_getRenderingEngine__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .ZP)(renderingEngineId);
3594
+ if (!renderingEngine || renderingEngine.hasBeenDestroyed) {
3595
+ return;
3596
+ }
3597
+ const viewport = renderingEngine.getViewport(viewportId);
3598
+ if (!viewport) {
3599
+ return;
3600
+ }
3601
+ const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
3602
+ return {
3603
+ viewport,
3604
+ renderingEngine,
3605
+ viewportId,
3606
+ renderingEngineId,
3607
+ FrameOfReferenceUID,
3608
+ };
3609
+ }
3610
+ function getEnabledElementByViewportId(viewportId) {
3611
+ const renderingEngines = (0,_RenderingEngine_getRenderingEngine__WEBPACK_IMPORTED_MODULE_0__/* .getRenderingEngines */ .Uu)();
3612
+ for (let i = 0; i < renderingEngines.length; i++) {
3613
+ const renderingEngine = renderingEngines[i];
3614
+ const viewport = renderingEngine.getViewport(viewportId);
3615
+ if (viewport) {
3616
+ return getEnabledElementByIds(viewportId, renderingEngine.id);
3617
+ }
3618
+ }
3619
+ }
3620
+ function getEnabledElements() {
3621
+ const enabledElements = [];
3622
+ const renderingEngines = (0,_RenderingEngine_getRenderingEngine__WEBPACK_IMPORTED_MODULE_0__/* .getRenderingEngines */ .Uu)();
3623
+ renderingEngines.forEach((renderingEngine) => {
3624
+ const viewports = renderingEngine.getViewports();
3625
+ viewports.forEach(({ element }) => {
3626
+ enabledElements.push(getEnabledElement(element));
3627
+ });
3628
+ });
3629
+ return enabledElements;
3630
+ }
3631
+
3632
+
3633
+ /***/ }),
3634
+
3635
+ /***/ 12651:
3636
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3637
+
3638
+ "use strict";
3639
+
3640
+ // EXPORTS
3641
+ __webpack_require__.d(__webpack_exports__, {
3642
+ BaseVolumeViewport: () => (/* reexport */ BaseVolumeViewport/* default */.Z),
3643
+ CONSTANTS: () => (/* reexport */ constants),
3644
+ EVENTS: () => (/* reexport */ enums.Events),
3645
+ Enums: () => (/* reexport */ enums),
3646
+ Settings: () => (/* reexport */ Settings),
3647
+ StackViewport: () => (/* reexport */ StackViewport/* default */.Z),
3648
+ VideoViewport: () => (/* reexport */ VideoViewport/* default */.Z),
3649
+ VolumeViewport: () => (/* reexport */ VolumeViewport/* default */.Z),
3650
+ VolumeViewport3D: () => (/* reexport */ VolumeViewport3D/* default */.Z),
3651
+ addImageSlicesToViewports: () => (/* reexport */ helpers/* addImageSlicesToViewports */.PN),
3652
+ addVolumesToViewports: () => (/* reexport */ helpers/* addVolumesToViewports */.gc),
3653
+ cache: () => (/* reexport */ cache/* default */.ZP),
3654
+ eventTarget: () => (/* reexport */ eventTarget/* default */.Z),
3655
+ geometryLoader: () => (/* reexport */ geometryLoader),
3656
+ getConfiguration: () => (/* reexport */ init/* getConfiguration */.P_),
3657
+ getEnabledElement: () => (/* reexport */ getEnabledElement/* default */.ZP),
3658
+ getEnabledElementByIds: () => (/* reexport */ getEnabledElement/* getEnabledElementByIds */.O),
3659
+ getEnabledElementByViewportId: () => (/* reexport */ getEnabledElement/* getEnabledElementByViewportId */.Yz),
3660
+ getEnabledElements: () => (/* reexport */ getEnabledElement/* getEnabledElements */.wN),
3661
+ getRenderingEngine: () => (/* reexport */ getRenderingEngine/* getRenderingEngine */.Pr),
3662
+ getRenderingEngines: () => (/* reexport */ getRenderingEngine/* getRenderingEngines */.Uu),
3663
+ getWebWorkerManager: () => (/* reexport */ init/* getWebWorkerManager */.Pt),
3664
+ imageLoadPoolManager: () => (/* reexport */ imageLoadPoolManager/* default */.Z),
3665
+ imageLoader: () => (/* reexport */ imageLoader),
3666
+ metaData: () => (/* reexport */ metaData),
3667
+ triggerEvent: () => (/* reexport */ triggerEvent/* default */.Z),
3668
+ utilities: () => (/* reexport */ utilities),
3669
+ volumeLoader: () => (/* reexport */ volumeLoader)
3670
+ });
3671
+
3672
+ // UNUSED EXPORTS: ImageVolume, ProgressiveRetrieveImages, RenderingEngine, Surface, Viewport, WSIViewport, canRenderFloatTextures, createVolumeActor, createVolumeMapper, getOrCreateCanvas, getShouldUseCPURendering, getShouldUseSharedArrayBuffer, imageRetrievalPoolManager, init, isCornerstoneInitialized, peerImport, registerImageLoader, requestPoolManager, resetUseCPURendering, resetUseSharedArrayBuffer, setConfiguration, setPreferSizeOverAccuracy, setUseCPURendering, setUseSharedArrayBuffer, setVolumesForViewports
3673
+
3674
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/index.js + 4 modules
3675
+ var enums = __webpack_require__(7187);
3676
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/constants/index.js + 2 modules
3677
+ var constants = __webpack_require__(19247);
3678
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/RenderingEngine/index.js + 3 modules
3679
+ var RenderingEngine = __webpack_require__(69552);
3680
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/RenderingEngine/VolumeViewport.js
3681
+ var VolumeViewport = __webpack_require__(32932);
3682
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/RenderingEngine/VolumeViewport3D.js
3683
+ var VolumeViewport3D = __webpack_require__(46190);
3684
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/RenderingEngine/BaseVolumeViewport.js
3685
+ var BaseVolumeViewport = __webpack_require__(36205);
3686
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/RenderingEngine/StackViewport.js
3687
+ var StackViewport = __webpack_require__(98715);
3688
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/RenderingEngine/VideoViewport.js
3689
+ var VideoViewport = __webpack_require__(49001);
3690
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/RenderingEngine/WSIViewport.js
3691
+ var WSIViewport = __webpack_require__(86057);
3692
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/RenderingEngine/Viewport.js
3693
+ var Viewport = __webpack_require__(77614);
3694
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/eventTarget.js
3695
+ var eventTarget = __webpack_require__(74238);
3696
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/RenderingEngine/getRenderingEngine.js
3697
+ var getRenderingEngine = __webpack_require__(9138);
3698
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/cache/index.js
3699
+ var cache = __webpack_require__(82253);
3700
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/requestPool/imageRetrievalPoolManager.js
3701
+ var imageRetrievalPoolManager = __webpack_require__(22717);
3702
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/requestPool/imageLoadPoolManager.js
3703
+ var imageLoadPoolManager = __webpack_require__(96506);
3704
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/getEnabledElement.js
3705
+ var getEnabledElement = __webpack_require__(65279);
3706
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/metaData.js
3707
+ var metaData = __webpack_require__(30023);
3708
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/init.js + 1 modules
3709
+ var init = __webpack_require__(28719);
3710
+ ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/Settings.js
3711
+ const DEFAULT_SETTINGS = Symbol('DefaultSettings');
3712
+ const RUNTIME_SETTINGS = Symbol('RuntimeSettings');
3713
+ const OBJECT_SETTINGS_MAP = Symbol('ObjectSettingsMap');
3714
+ const DICTIONARY = Symbol('Dictionary');
3715
+ class Settings {
3716
+ constructor(base) {
3717
+ const dictionary = Object.create((base instanceof Settings && DICTIONARY in base
3718
+ ? base[DICTIONARY]
3719
+ : null));
3720
+ Object.seal(Object.defineProperty(this, DICTIONARY, {
3721
+ value: dictionary,
3722
+ }));
3723
+ }
3724
+ set(key, value) {
3725
+ return set(this[DICTIONARY], key, value, null);
3726
+ }
3727
+ get(key) {
3728
+ return get(this[DICTIONARY], key);
3729
+ }
3730
+ unset(key) {
3731
+ return unset(this[DICTIONARY], key + '');
3732
+ }
3733
+ forEach(callback) {
3734
+ iterate(this[DICTIONARY], callback);
3735
+ }
3736
+ extend() {
3737
+ return new Settings(this);
3738
+ }
3739
+ import(root) {
3740
+ if (isPlainObject(root)) {
3741
+ Object.keys(root).forEach((key) => {
3742
+ set(this[DICTIONARY], key, root[key], null);
3743
+ });
3744
+ }
3745
+ }
3746
+ dump() {
3747
+ const context = {};
3748
+ iterate(this[DICTIONARY], (key, value) => {
3749
+ if (typeof value !== 'undefined') {
3750
+ deepSet(context, key, value);
3751
+ }
3752
+ });
3753
+ return context;
3754
+ }
3755
+ static assert(subject) {
3756
+ return subject instanceof Settings
3757
+ ? subject
3758
+ : Settings.getRuntimeSettings();
3759
+ }
3760
+ static getDefaultSettings(subfield = null) {
3761
+ let defaultSettings = Settings[DEFAULT_SETTINGS];
3762
+ if (!(defaultSettings instanceof Settings)) {
3763
+ defaultSettings = new Settings();
3764
+ Settings[DEFAULT_SETTINGS] = defaultSettings;
3765
+ }
3766
+ if (subfield) {
3767
+ const settingObj = {};
3768
+ defaultSettings.forEach((name) => {
3769
+ if (name.startsWith(subfield)) {
3770
+ const setting = name.split(`${subfield}.`)[1];
3771
+ settingObj[setting] = defaultSettings.get(name);
3772
+ }
3773
+ });
3774
+ return settingObj;
3775
+ }
3776
+ return defaultSettings;
3777
+ }
3778
+ static getRuntimeSettings() {
3779
+ let runtimeSettings = Settings[RUNTIME_SETTINGS];
3780
+ if (!(runtimeSettings instanceof Settings)) {
3781
+ runtimeSettings = new Settings(Settings.getDefaultSettings());
3782
+ Settings[RUNTIME_SETTINGS] = runtimeSettings;
3783
+ }
3784
+ return runtimeSettings;
3785
+ }
3786
+ static getObjectSettings(subject, from) {
3787
+ let settings = null;
3788
+ if (subject instanceof Settings) {
3789
+ settings = subject;
3790
+ }
3791
+ else if (typeof subject === 'object' && subject !== null) {
3792
+ let objectSettingsMap = Settings[OBJECT_SETTINGS_MAP];
3793
+ if (!(objectSettingsMap instanceof WeakMap)) {
3794
+ objectSettingsMap = new WeakMap();
3795
+ Settings[OBJECT_SETTINGS_MAP] = objectSettingsMap;
3796
+ }
3797
+ settings = objectSettingsMap.get(subject);
3798
+ if (!(settings instanceof Settings)) {
3799
+ settings = new Settings(Settings.assert(Settings.getObjectSettings(from)));
3800
+ objectSettingsMap.set(subject, settings);
3801
+ }
3802
+ }
3803
+ return settings;
3804
+ }
3805
+ static extendRuntimeSettings() {
3806
+ return Settings.getRuntimeSettings().extend();
3807
+ }
3808
+ }
3809
+ function unset(dictionary, name) {
3810
+ if (name.endsWith('.')) {
3811
+ let deleteCount = 0;
3812
+ const namespace = name;
3813
+ const base = namespace.slice(0, -1);
3814
+ const deleteAll = base.length === 0;
3815
+ for (const key in dictionary) {
3816
+ if (Object.prototype.hasOwnProperty.call(dictionary, key) &&
3817
+ (deleteAll || key.startsWith(namespace) || key === base)) {
3818
+ delete dictionary[key];
3819
+ ++deleteCount;
3820
+ }
3821
+ }
3822
+ return deleteCount > 0;
3823
+ }
3824
+ return delete dictionary[name];
3825
+ }
3826
+ function iterate(dictionary, callback) {
3827
+ for (const key in dictionary) {
3828
+ callback(key, dictionary[key]);
3829
+ }
3830
+ }
3831
+ function setAll(dictionary, prefix, record, references) {
3832
+ let failCount;
3833
+ if (references.has(record)) {
3834
+ return set(dictionary, prefix, null, references);
3835
+ }
3836
+ references.add(record);
3837
+ failCount = 0;
3838
+ for (const field in record) {
3839
+ if (Object.prototype.hasOwnProperty.call(record, field)) {
3840
+ const key = field.length === 0 ? prefix : `${prefix}.${field}`;
3841
+ if (!set(dictionary, key, record[field], references)) {
3842
+ ++failCount;
3843
+ }
3844
+ }
3845
+ }
3846
+ references.delete(record);
3847
+ return failCount === 0;
3848
+ }
3849
+ function set(dictionary, key, value, references) {
3850
+ if (isValidKey(key)) {
3851
+ if (isPlainObject(value)) {
3852
+ return setAll(dictionary, key, value, references instanceof WeakSet ? references : new WeakSet());
3853
+ }
3854
+ dictionary[key] = value;
3855
+ return true;
3856
+ }
3857
+ return false;
3858
+ }
3859
+ function get(dictionary, key) {
3860
+ return dictionary[key];
3861
+ }
3862
+ function isValidKey(key) {
3863
+ let last, current, previous;
3864
+ if (typeof key !== 'string' || (last = key.length - 1) < 0) {
3865
+ return false;
3866
+ }
3867
+ previous = -1;
3868
+ while ((current = key.indexOf('.', previous + 1)) >= 0) {
3869
+ if (current - previous < 2 || current === last) {
3870
+ return false;
3871
+ }
3872
+ previous = current;
3873
+ }
3874
+ return true;
3875
+ }
3876
+ function isPlainObject(subject) {
3877
+ if (typeof subject === 'object' && subject !== null) {
3878
+ const prototype = Object.getPrototypeOf(subject);
3879
+ if (prototype === Object.prototype || prototype === null) {
3880
+ return true;
3881
+ }
3882
+ }
3883
+ return false;
3884
+ }
3885
+ function deepSet(context, key, value) {
3886
+ const separator = key.indexOf('.');
3887
+ if (separator >= 0) {
3888
+ const subKey = key.slice(0, separator);
3889
+ let subContext = context[subKey];
3890
+ if (typeof subContext !== 'object' || subContext === null) {
3891
+ const subContextValue = subContext;
3892
+ subContext = {};
3893
+ if (typeof subContextValue !== 'undefined') {
3894
+ subContext[''] = subContextValue;
3895
+ }
3896
+ context[subKey] = subContext;
3897
+ }
3898
+ deepSet(subContext, key.slice(separator + 1, key.length), value);
3899
+ }
3900
+ else {
3901
+ context[key] = value;
3902
+ }
3903
+ }
3904
+ Settings.getDefaultSettings().set('useCursors', true);
3905
+
3906
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/loaders/volumeLoader.js
3907
+ var volumeLoader = __webpack_require__(18588);
3908
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/loaders/imageLoader.js
3909
+ var imageLoader = __webpack_require__(62990);
3910
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/loaders/geometryLoader.js + 26 modules
3911
+ var geometryLoader = __webpack_require__(59469);
3912
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/loaders/ProgressiveRetrieveImages.js + 4 modules
3913
+ var ProgressiveRetrieveImages = __webpack_require__(27654);
3914
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/index.js + 66 modules
3915
+ var utilities = __webpack_require__(56309);
3916
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/triggerEvent.js
3917
+ var triggerEvent = __webpack_require__(85041);
3918
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/RenderingEngine/helpers/index.js + 1 modules
3919
+ var helpers = __webpack_require__(25281);
3920
+ ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js
2815
3921
 
2816
- // EXPORTS
2817
- __webpack_require__.d(__webpack_exports__, {
2818
- BlendModes: () => (/* reexport */ enums_BlendModes),
2819
- CalibrationTypes: () => (/* reexport */ enums_CalibrationTypes),
2820
- DynamicOperatorType: () => (/* reexport */ enums_DynamicOperatorType),
2821
- Events: () => (/* reexport */ Events/* default */.Z),
2822
- GeometryType: () => (/* reexport */ enums_GeometryType),
2823
- ImageQualityStatus: () => (/* reexport */ ImageQualityStatus/* default */.Z),
2824
- InterpolationType: () => (/* reexport */ InterpolationType/* default */.Z),
2825
- MetadataModules: () => (/* reexport */ MetadataModules/* default */.Z),
2826
- OrientationAxis: () => (/* reexport */ OrientationAxis/* default */.Z),
2827
- RequestType: () => (/* reexport */ RequestType/* default */.Z),
2828
- SharedArrayBufferModes: () => (/* reexport */ SharedArrayBufferModes/* default */.Z),
2829
- VOILUTFunctionType: () => (/* reexport */ VOILUTFunctionType/* default */.Z),
2830
- VideoEnums: () => (/* reexport */ VideoEnums),
2831
- ViewportStatus: () => (/* reexport */ ViewportStatus/* default */.Z),
2832
- ViewportType: () => (/* reexport */ ViewportType/* default */.Z)
2833
- });
2834
3922
 
2835
- // UNUSED EXPORTS: ContourType
2836
3923
 
2837
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/Events.js
2838
- var Events = __webpack_require__(19546);
2839
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/RequestType.js
2840
- var RequestType = __webpack_require__(49334);
2841
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/ViewportType.js
2842
- var ViewportType = __webpack_require__(68032);
2843
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/InterpolationType.js
2844
- var InterpolationType = __webpack_require__(75677);
2845
- // EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Rendering/Core/VolumeMapper/Constants.js
2846
- var Constants = __webpack_require__(83336);
2847
- ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/BlendModes.js
2848
3924
 
2849
- const { BlendMode } = Constants["default"];
2850
- var BlendModes;
2851
- (function (BlendModes) {
2852
- BlendModes[BlendModes["COMPOSITE"] = 0] = "COMPOSITE";
2853
- BlendModes[BlendModes["MAXIMUM_INTENSITY_BLEND"] = 1] = "MAXIMUM_INTENSITY_BLEND";
2854
- BlendModes[BlendModes["MINIMUM_INTENSITY_BLEND"] = 2] = "MINIMUM_INTENSITY_BLEND";
2855
- BlendModes[BlendModes["AVERAGE_INTENSITY_BLEND"] = 3] = "AVERAGE_INTENSITY_BLEND";
2856
- })(BlendModes || (BlendModes = {}));
2857
- /* harmony default export */ const enums_BlendModes = (BlendModes);
2858
3925
 
2859
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/OrientationAxis.js
2860
- var OrientationAxis = __webpack_require__(96426);
2861
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/SharedArrayBufferModes.js
2862
- var SharedArrayBufferModes = __webpack_require__(91799);
2863
- ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/GeometryType.js
2864
- var GeometryType;
2865
- (function (GeometryType) {
2866
- GeometryType["CONTOUR"] = "contour";
2867
- GeometryType["SURFACE"] = "Surface";
2868
- })(GeometryType || (GeometryType = {}));
2869
- /* harmony default export */ const enums_GeometryType = (GeometryType);
2870
3926
 
2871
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/ContourType.js
2872
- var ContourType = __webpack_require__(2689);
2873
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/VOILUTFunctionType.js
2874
- var VOILUTFunctionType = __webpack_require__(67751);
2875
- ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/DynamicOperatorType.js
2876
- var DynamicOperatorType;
2877
- (function (DynamicOperatorType) {
2878
- DynamicOperatorType["SUM"] = "SUM";
2879
- DynamicOperatorType["AVERAGE"] = "AVERAGE";
2880
- DynamicOperatorType["SUBTRACT"] = "SUBTRACT";
2881
- })(DynamicOperatorType || (DynamicOperatorType = {}));
2882
- /* harmony default export */ const enums_DynamicOperatorType = (DynamicOperatorType);
2883
3927
 
2884
- ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/CalibrationTypes.js
2885
- var CalibrationTypes;
2886
- (function (CalibrationTypes) {
2887
- CalibrationTypes["NOT_APPLICABLE"] = "";
2888
- CalibrationTypes["ERMF"] = "ERMF";
2889
- CalibrationTypes["USER"] = "User";
2890
- CalibrationTypes["PROJECTION"] = "Proj";
2891
- CalibrationTypes["REGION"] = "Region";
2892
- CalibrationTypes["ERROR"] = "Error";
2893
- CalibrationTypes["UNCALIBRATED"] = "Uncalibrated";
2894
- })(CalibrationTypes || (CalibrationTypes = {}));
2895
- /* harmony default export */ const enums_CalibrationTypes = (CalibrationTypes);
2896
3928
 
2897
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/ViewportStatus.js
2898
- var ViewportStatus = __webpack_require__(84659);
2899
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/ImageQualityStatus.js
2900
- var ImageQualityStatus = __webpack_require__(83521);
2901
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/VideoEnums.js
2902
- var VideoEnums = __webpack_require__(40373);
2903
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/MetadataModules.js
2904
- var MetadataModules = __webpack_require__(636);
2905
- ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/enums/index.js
2906
3929
 
2907
3930
 
2908
3931
 
@@ -2922,69 +3945,9 @@ var MetadataModules = __webpack_require__(636);
2922
3945
 
2923
3946
 
2924
3947
 
2925
- /***/ }),
2926
3948
 
2927
- /***/ 65279:
2928
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2929
3949
 
2930
- "use strict";
2931
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2932
- /* harmony export */ O: () => (/* binding */ getEnabledElementByIds),
2933
- /* harmony export */ Yz: () => (/* binding */ getEnabledElementByViewportId),
2934
- /* harmony export */ ZP: () => (/* binding */ getEnabledElement),
2935
- /* harmony export */ wN: () => (/* binding */ getEnabledElements)
2936
- /* harmony export */ });
2937
- /* harmony import */ var _RenderingEngine_getRenderingEngine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9138);
2938
3950
 
2939
- function getEnabledElement(element) {
2940
- if (!element) {
2941
- return;
2942
- }
2943
- const { viewportUid, renderingEngineUid } = element.dataset;
2944
- return getEnabledElementByIds(viewportUid, renderingEngineUid);
2945
- }
2946
- function getEnabledElementByIds(viewportId, renderingEngineId) {
2947
- if (!renderingEngineId || !viewportId) {
2948
- return;
2949
- }
2950
- const renderingEngine = (0,_RenderingEngine_getRenderingEngine__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .ZP)(renderingEngineId);
2951
- if (!renderingEngine || renderingEngine.hasBeenDestroyed) {
2952
- return;
2953
- }
2954
- const viewport = renderingEngine.getViewport(viewportId);
2955
- if (!viewport) {
2956
- return;
2957
- }
2958
- const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
2959
- return {
2960
- viewport,
2961
- renderingEngine,
2962
- viewportId,
2963
- renderingEngineId,
2964
- FrameOfReferenceUID,
2965
- };
2966
- }
2967
- function getEnabledElementByViewportId(viewportId) {
2968
- const renderingEngines = (0,_RenderingEngine_getRenderingEngine__WEBPACK_IMPORTED_MODULE_0__/* .getRenderingEngines */ .Uu)();
2969
- for (let i = 0; i < renderingEngines.length; i++) {
2970
- const renderingEngine = renderingEngines[i];
2971
- const viewport = renderingEngine.getViewport(viewportId);
2972
- if (viewport) {
2973
- return getEnabledElementByIds(viewportId, renderingEngine.id);
2974
- }
2975
- }
2976
- }
2977
- function getEnabledElements() {
2978
- const enabledElements = [];
2979
- const renderingEngines = (0,_RenderingEngine_getRenderingEngine__WEBPACK_IMPORTED_MODULE_0__/* .getRenderingEngines */ .Uu)();
2980
- renderingEngines.forEach((renderingEngine) => {
2981
- const viewports = renderingEngine.getViewports();
2982
- viewports.forEach(({ element }) => {
2983
- enabledElements.push(getEnabledElement(element));
2984
- });
2985
- });
2986
- return enabledElements;
2987
- }
2988
3951
 
2989
3952
 
2990
3953
  /***/ }),
@@ -3014,9 +3977,9 @@ __webpack_require__.r(__webpack_exports__);
3014
3977
  /* harmony import */ var _cache__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82253);
3015
3978
  /* harmony import */ var _enums_Events__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(19546);
3016
3979
  /* harmony import */ var _eventTarget__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74238);
3017
- /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(11723);
3980
+ /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(56309);
3018
3981
  /* harmony import */ var _requestPool_imageLoadPoolManager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(96506);
3019
- /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(62709);
3982
+ /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(12651);
3020
3983
 
3021
3984
 
3022
3985
 
@@ -3296,7 +4259,7 @@ __webpack_require__.r(__webpack_exports__);
3296
4259
  /* harmony import */ var _utilities_triggerEvent__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(85041);
3297
4260
  /* harmony import */ var lodash_clonedeep__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(11677);
3298
4261
  /* harmony import */ var lodash_clonedeep__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(lodash_clonedeep__WEBPACK_IMPORTED_MODULE_8__);
3299
- /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(11723);
4262
+ /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(56309);
3300
4263
  /* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(28719);
3301
4264
  /* harmony import */ var _utilities_cacheUtils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(85654);
3302
4265
 
@@ -3617,6 +4580,56 @@ function generateVolumeScalarData(targetBuffer, scalarLength) {
3617
4580
  }
3618
4581
 
3619
4582
 
4583
+ /***/ }),
4584
+
4585
+ /***/ 30023:
4586
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4587
+
4588
+ "use strict";
4589
+ __webpack_require__.r(__webpack_exports__);
4590
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4591
+ /* harmony export */ addProvider: () => (/* binding */ addProvider),
4592
+ /* harmony export */ get: () => (/* binding */ getMetaData),
4593
+ /* harmony export */ removeAllProviders: () => (/* binding */ removeAllProviders),
4594
+ /* harmony export */ removeProvider: () => (/* binding */ removeProvider)
4595
+ /* harmony export */ });
4596
+ const providers = [];
4597
+ function addProvider(provider, priority = 0) {
4598
+ let i;
4599
+ for (i = 0; i < providers.length; i++) {
4600
+ if (providers[i].priority <= priority) {
4601
+ break;
4602
+ }
4603
+ }
4604
+ providers.splice(i, 0, {
4605
+ priority,
4606
+ provider,
4607
+ });
4608
+ }
4609
+ function removeProvider(provider) {
4610
+ for (let i = 0; i < providers.length; i++) {
4611
+ if (providers[i].provider === provider) {
4612
+ providers.splice(i, 1);
4613
+ break;
4614
+ }
4615
+ }
4616
+ }
4617
+ function removeAllProviders() {
4618
+ while (providers.length > 0) {
4619
+ providers.pop();
4620
+ }
4621
+ }
4622
+ function getMetaData(type, ...queries) {
4623
+ for (let i = 0; i < providers.length; i++) {
4624
+ const result = providers[i].provider(type, ...queries);
4625
+ if (result !== undefined) {
4626
+ return result;
4627
+ }
4628
+ }
4629
+ }
4630
+
4631
+
4632
+
3620
4633
  /***/ }),
3621
4634
 
3622
4635
  /***/ 96506:
@@ -3648,7 +4661,7 @@ imageLoadPoolManager.setMaxSimultaneousRequests(_enums_RequestType__WEBPACK_IMPO
3648
4661
  /* harmony export */ P: () => (/* binding */ RequestPoolManager)
3649
4662
  /* harmony export */ });
3650
4663
  /* harmony import */ var _enums_RequestType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(49334);
3651
- /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11723);
4664
+ /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(56309);
3652
4665
 
3653
4666
 
3654
4667
  class RequestPoolManager {
@@ -4488,6 +5501,13 @@ const CursorSVG = {
4488
5501
  y: 24,
4489
5502
  },
4490
5503
  }),
5504
+ Height: extend(BASE, {
5505
+ iconContent: `<path d="m 6 22 l 8.5 0 v -16 h 8" stroke-width="3" fill="none" stroke="{{color}}" />`,
5506
+ viewBox: {
5507
+ x: 24,
5508
+ y: 24,
5509
+ },
5510
+ }),
4491
5511
  Probe: extend(BASE, {
4492
5512
  iconContent: `<path fill="{{color}}" d="M1152 896q0 106-75 181t-181 75-181-75-75-181 75-181 181-75 181 75
4493
5513
  75 181zm-256-544q-148 0-273 73t-198 198-73 273 73 273 198 198 273 73 273-73
@@ -4720,8 +5740,8 @@ __webpack_require__.d(__webpack_exports__, {
4720
5740
 
4721
5741
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/store/index.js + 4 modules
4722
5742
  var store = __webpack_require__(33232);
4723
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 28 modules
4724
- var esm = __webpack_require__(62709);
5743
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 1 modules
5744
+ var esm = __webpack_require__(12651);
4725
5745
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/drawingSvg/getSvgDrawingHelper.js
4726
5746
 
4727
5747
 
@@ -4832,7 +5852,7 @@ var ToolModes;
4832
5852
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(33232);
4833
5853
  /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69562);
4834
5854
  /* harmony import */ var _synchronizers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(93423);
4835
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(86785);
5855
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(25876);
4836
5856
  /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(42975);
4837
5857
  /* harmony import */ var _cursors__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(60020);
4838
5858
  /* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(35106);
@@ -4925,8 +5945,8 @@ var lodash_get_default = /*#__PURE__*/__webpack_require__.n(lodash_get);
4925
5945
  // EXTERNAL MODULE: ../../../node_modules/lodash.clonedeep/index.js
4926
5946
  var lodash_clonedeep = __webpack_require__(11677);
4927
5947
  var lodash_clonedeep_default = /*#__PURE__*/__webpack_require__.n(lodash_clonedeep);
4928
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 28 modules
4929
- var esm = __webpack_require__(62709);
5948
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 1 modules
5949
+ var esm = __webpack_require__(12651);
4930
5950
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/cursors/index.js + 4 modules
4931
5951
  var cursors = __webpack_require__(60020);
4932
5952
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/cursors/elementCursor.js
@@ -5509,7 +6529,7 @@ function getToolGroupsWithToolName(toolName) {
5509
6529
  /* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
5510
6530
  /* harmony export */ });
5511
6531
  /* harmony import */ var gl_matrix__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72076);
5512
- /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62709);
6532
+ /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(12651);
5513
6533
  /* harmony import */ var _utilities_getCalibratedUnits__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39661);
5514
6534
  /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(42975);
5515
6535
  /* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(93382);
@@ -5518,7 +6538,7 @@ function getToolGroupsWithToolName(toolName) {
5518
6538
  /* harmony import */ var _stateManagement_annotation_annotationLocking__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(11163);
5519
6539
  /* harmony import */ var _stateManagement_annotation_annotationVisibility__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(41836);
5520
6540
  /* harmony import */ var _stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(36705);
5521
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(86785);
6541
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(25876);
5522
6542
  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(33232);
5523
6543
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(68096);
5524
6544
  /* harmony import */ var _utilities_viewportFilters__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(46966);
@@ -6267,7 +7287,7 @@ BidirectionalTool.toolName = 'Bidirectional';
6267
7287
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
6268
7288
  /* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
6269
7289
  /* harmony export */ });
6270
- /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62709);
7290
+ /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12651);
6271
7291
  /* harmony import */ var gl_matrix__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72076);
6272
7292
  /* harmony import */ var _utilities_getCalibratedUnits__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39661);
6273
7293
  /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(42975);
@@ -6283,7 +7303,7 @@ BidirectionalTool.toolName = 'Bidirectional';
6283
7303
  /* harmony import */ var _planarFreehandROITool_openContourEndEditLoop__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(82571);
6284
7304
  /* harmony import */ var _planarFreehandROITool_renderMethods__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(54435);
6285
7305
  /* harmony import */ var _stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(36705);
6286
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(86785);
7306
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(25876);
6287
7307
  /* harmony import */ var _utilities_drawing__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(20724);
6288
7308
  /* harmony import */ var _utilities_math_polyline__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(42744);
6289
7309
  /* harmony import */ var _utilities_pointInShapeCallback__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(31955);
@@ -6441,45 +7461,12 @@ class PlanarFreehandROITool extends _base_ContourSegmentationBaseTool__WEBPACK_I
6441
7461
  }
6442
7462
  const { imageData, metadata } = image;
6443
7463
  const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p));
6444
- const canvasPoint = canvasCoordinates[0];
6445
- const originalWorldPoint = viewport.canvasToWorld(canvasPoint);
6446
- const deltaXPoint = viewport.canvasToWorld([
6447
- canvasPoint[0] + 1,
6448
- canvasPoint[1],
6449
- ]);
6450
- const deltaYPoint = viewport.canvasToWorld([
6451
- canvasPoint[0],
6452
- canvasPoint[1] + 1,
6453
- ]);
6454
- const deltaInX = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.distance */ .R3.distance(originalWorldPoint, deltaXPoint);
6455
- const deltaInY = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.distance */ .R3.distance(originalWorldPoint, deltaYPoint);
6456
- const worldPosIndex = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.utilities.transformWorldToIndex(imageData, points[0]);
6457
- worldPosIndex[0] = Math.floor(worldPosIndex[0]);
6458
- worldPosIndex[1] = Math.floor(worldPosIndex[1]);
6459
- worldPosIndex[2] = Math.floor(worldPosIndex[2]);
6460
- let iMin = worldPosIndex[0];
6461
- let iMax = worldPosIndex[0];
6462
- let jMin = worldPosIndex[1];
6463
- let jMax = worldPosIndex[1];
6464
- let kMin = worldPosIndex[2];
6465
- let kMax = worldPosIndex[2];
6466
- for (let j = 1; j < points.length; j++) {
6467
- const worldPosIndex = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.utilities.transformWorldToIndex(imageData, points[j]);
6468
- worldPosIndex[0] = Math.floor(worldPosIndex[0]);
6469
- worldPosIndex[1] = Math.floor(worldPosIndex[1]);
6470
- worldPosIndex[2] = Math.floor(worldPosIndex[2]);
6471
- iMin = Math.min(iMin, worldPosIndex[0]);
6472
- iMax = Math.max(iMax, worldPosIndex[0]);
6473
- jMin = Math.min(jMin, worldPosIndex[1]);
6474
- jMax = Math.max(jMax, worldPosIndex[1]);
6475
- kMin = Math.min(kMin, worldPosIndex[2]);
6476
- kMax = Math.max(kMax, worldPosIndex[2]);
6477
- }
6478
- const worldPosIndex2 = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.utilities.transformWorldToIndex(imageData, points[1]);
6479
- worldPosIndex2[0] = Math.floor(worldPosIndex2[0]);
6480
- worldPosIndex2[1] = Math.floor(worldPosIndex2[1]);
6481
- worldPosIndex2[2] = Math.floor(worldPosIndex2[2]);
6482
- const { scale, areaUnits } = (0,_utilities_getCalibratedUnits__WEBPACK_IMPORTED_MODULE_2__/* .getCalibratedLengthUnitsAndScale */ .mh)(image, () => {
7464
+ const modalityUnitOptions = {
7465
+ isPreScaled: (0,_utilities_viewport_isViewportPreScaled__WEBPACK_IMPORTED_MODULE_20__/* .isViewportPreScaled */ .P)(viewport, targetId),
7466
+ isSuvScaled: this.isSuvScaled(viewport, targetId, annotation.metadata.referencedImageId),
7467
+ };
7468
+ const modalityUnit = (0,_utilities_getModalityUnit__WEBPACK_IMPORTED_MODULE_21__/* .getModalityUnit */ .F)(metadata.Modality, annotation.metadata.referencedImageId, modalityUnitOptions);
7469
+ const calibratedScale = (0,_utilities_getCalibratedUnits__WEBPACK_IMPORTED_MODULE_2__/* .getCalibratedLengthUnitsAndScale */ .mh)(image, () => {
6483
7470
  const polyline = data.contour.polyline;
6484
7471
  const numPoints = polyline.length;
6485
7472
  const projectedPolyline = new Array(numPoints);
@@ -6487,10 +7474,7 @@ class PlanarFreehandROITool extends _base_ContourSegmentationBaseTool__WEBPACK_I
6487
7474
  projectedPolyline[i] = viewport.worldToCanvas(polyline[i]);
6488
7475
  }
6489
7476
  const { maxX: canvasMaxX, maxY: canvasMaxY, minX: canvasMinX, minY: canvasMinY, } = _utilities__WEBPACK_IMPORTED_MODULE_3__.math.polyline.getAABB(projectedPolyline);
6490
- const topLeftBBWorld = viewport.canvasToWorld([
6491
- canvasMinX,
6492
- canvasMinY,
6493
- ]);
7477
+ const topLeftBBWorld = viewport.canvasToWorld([canvasMinX, canvasMinY]);
6494
7478
  const topLeftBBIndex = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.utilities.transformWorldToIndex(imageData, topLeftBBWorld);
6495
7479
  const bottomRightBBWorld = viewport.canvasToWorld([
6496
7480
  canvasMaxX,
@@ -6499,71 +7483,29 @@ class PlanarFreehandROITool extends _base_ContourSegmentationBaseTool__WEBPACK_I
6499
7483
  const bottomRightBBIndex = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.utilities.transformWorldToIndex(imageData, bottomRightBBWorld);
6500
7484
  return [topLeftBBIndex, bottomRightBBIndex];
6501
7485
  });
6502
- let area = _utilities_math__WEBPACK_IMPORTED_MODULE_4__.polyline.getArea(canvasCoordinates) / scale / scale;
6503
- area *= deltaInX * deltaInY;
6504
- const iDelta = 0.01 * (iMax - iMin);
6505
- const jDelta = 0.01 * (jMax - jMin);
6506
- const kDelta = 0.01 * (kMax - kMin);
6507
- iMin = Math.floor(iMin - iDelta);
6508
- iMax = Math.ceil(iMax + iDelta);
6509
- jMin = Math.floor(jMin - jDelta);
6510
- jMax = Math.ceil(jMax + jDelta);
6511
- kMin = Math.floor(kMin - kDelta);
6512
- kMax = Math.ceil(kMax + kDelta);
6513
- const boundsIJK = [
6514
- [iMin, iMax],
6515
- [jMin, jMax],
6516
- [kMin, kMax],
6517
- ];
6518
- const worldPosEnd = imageData.indexToWorld([iMax, jMax, kMax]);
6519
- const canvasPosEnd = viewport.worldToCanvas(worldPosEnd);
6520
- let curRow = 0;
6521
- let intersections = [];
6522
- let intersectionCounter = 0;
6523
- const pointsInShape = (0,_utilities_pointInShapeCallback__WEBPACK_IMPORTED_MODULE_19__/* ["default"] */ .Z)(imageData, (pointLPS, pointIJK) => {
6524
- let result = true;
6525
- const point = viewport.worldToCanvas(pointLPS);
6526
- if (point[1] != curRow) {
6527
- intersectionCounter = 0;
6528
- curRow = point[1];
6529
- intersections = (0,_utilities_math_polyline__WEBPACK_IMPORTED_MODULE_18__.getLineSegmentIntersectionsCoordinates)(canvasCoordinates, point, [canvasPosEnd[0], point[1]]);
6530
- intersections.sort((function (index) {
6531
- return function (a, b) {
6532
- return a[index] === b[index]
6533
- ? 0
6534
- : a[index] < b[index]
6535
- ? -1
6536
- : 1;
6537
- };
6538
- })(0));
6539
- }
6540
- if (intersections.length && point[0] > intersections[0][0]) {
6541
- intersections.shift();
6542
- intersectionCounter++;
6543
- }
6544
- if (intersectionCounter % 2 === 0) {
6545
- result = false;
6546
- }
6547
- return result;
6548
- }, this.configuration.statsCalculator.statsCallback, boundsIJK);
6549
- const modalityUnitOptions = {
6550
- isPreScaled: (0,_utilities_viewport_isViewportPreScaled__WEBPACK_IMPORTED_MODULE_20__/* .isViewportPreScaled */ .P)(viewport, targetId),
6551
- isSuvScaled: this.isSuvScaled(viewport, targetId, annotation.metadata.referencedImageId),
6552
- };
6553
- const modalityUnit = (0,_utilities_getModalityUnit__WEBPACK_IMPORTED_MODULE_21__/* .getModalityUnit */ .F)(metadata.Modality, annotation.metadata.referencedImageId, modalityUnitOptions);
6554
- const stats = this.configuration.statsCalculator.getStatistics();
6555
- cachedStats[targetId] = {
6556
- Modality: metadata.Modality,
6557
- area,
6558
- perimeter: (0,_utilities_contours_calculatePerimeter__WEBPACK_IMPORTED_MODULE_23__/* ["default"] */ .Z)(canvasCoordinates, closed),
6559
- mean: stats.mean?.value,
6560
- max: stats.max?.value,
6561
- stdDev: stats.stdDev?.value,
6562
- statsArray: stats.array,
6563
- pointsInShape: pointsInShape,
6564
- areaUnit: areaUnits,
6565
- modalityUnit,
6566
- };
7486
+ if (closed) {
7487
+ this.updateClosedCachedStats({
7488
+ targetId,
7489
+ viewport,
7490
+ canvasCoordinates,
7491
+ points,
7492
+ imageData,
7493
+ metadata,
7494
+ cachedStats,
7495
+ modalityUnit,
7496
+ calibratedScale,
7497
+ });
7498
+ }
7499
+ else {
7500
+ this.updateOpenCachedStats({
7501
+ metadata,
7502
+ canvasCoordinates,
7503
+ targetId,
7504
+ cachedStats,
7505
+ modalityUnit,
7506
+ calibratedScale,
7507
+ });
7508
+ }
6567
7509
  }
6568
7510
  (0,_stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_15__/* .triggerAnnotationModified */ .hg)(annotation, enabledElement.viewport.element, _enums__WEBPACK_IMPORTED_MODULE_25__.ChangeTypes.StatsUpdated);
6569
7511
  annotation.invalidated = false;
@@ -6756,10 +7698,117 @@ class PlanarFreehandROITool extends _base_ContourSegmentationBaseTool__WEBPACK_I
6756
7698
  }
6757
7699
  }
6758
7700
  }
7701
+ updateClosedCachedStats({ viewport, points, imageData, metadata, cachedStats, targetId, modalityUnit, canvasCoordinates, calibratedScale, }) {
7702
+ const { scale, areaUnits, units } = calibratedScale;
7703
+ const canvasPoint = canvasCoordinates[0];
7704
+ const originalWorldPoint = viewport.canvasToWorld(canvasPoint);
7705
+ const deltaXPoint = viewport.canvasToWorld([
7706
+ canvasPoint[0] + 1,
7707
+ canvasPoint[1],
7708
+ ]);
7709
+ const deltaYPoint = viewport.canvasToWorld([
7710
+ canvasPoint[0],
7711
+ canvasPoint[1] + 1,
7712
+ ]);
7713
+ const deltaInX = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.distance */ .R3.distance(originalWorldPoint, deltaXPoint);
7714
+ const deltaInY = gl_matrix__WEBPACK_IMPORTED_MODULE_1__/* .vec3.distance */ .R3.distance(originalWorldPoint, deltaYPoint);
7715
+ const worldPosIndex = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.utilities.transformWorldToIndex(imageData, points[0]);
7716
+ worldPosIndex[0] = Math.floor(worldPosIndex[0]);
7717
+ worldPosIndex[1] = Math.floor(worldPosIndex[1]);
7718
+ worldPosIndex[2] = Math.floor(worldPosIndex[2]);
7719
+ let iMin = worldPosIndex[0];
7720
+ let iMax = worldPosIndex[0];
7721
+ let jMin = worldPosIndex[1];
7722
+ let jMax = worldPosIndex[1];
7723
+ let kMin = worldPosIndex[2];
7724
+ let kMax = worldPosIndex[2];
7725
+ for (let j = 1; j < points.length; j++) {
7726
+ const worldPosIndex = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.utilities.transformWorldToIndex(imageData, points[j]);
7727
+ worldPosIndex[0] = Math.floor(worldPosIndex[0]);
7728
+ worldPosIndex[1] = Math.floor(worldPosIndex[1]);
7729
+ worldPosIndex[2] = Math.floor(worldPosIndex[2]);
7730
+ iMin = Math.min(iMin, worldPosIndex[0]);
7731
+ iMax = Math.max(iMax, worldPosIndex[0]);
7732
+ jMin = Math.min(jMin, worldPosIndex[1]);
7733
+ jMax = Math.max(jMax, worldPosIndex[1]);
7734
+ kMin = Math.min(kMin, worldPosIndex[2]);
7735
+ kMax = Math.max(kMax, worldPosIndex[2]);
7736
+ }
7737
+ const worldPosIndex2 = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.utilities.transformWorldToIndex(imageData, points[1]);
7738
+ worldPosIndex2[0] = Math.floor(worldPosIndex2[0]);
7739
+ worldPosIndex2[1] = Math.floor(worldPosIndex2[1]);
7740
+ worldPosIndex2[2] = Math.floor(worldPosIndex2[2]);
7741
+ let area = _utilities_math__WEBPACK_IMPORTED_MODULE_4__.polyline.getArea(canvasCoordinates) / scale / scale;
7742
+ area *= deltaInX * deltaInY;
7743
+ const iDelta = 0.01 * (iMax - iMin);
7744
+ const jDelta = 0.01 * (jMax - jMin);
7745
+ const kDelta = 0.01 * (kMax - kMin);
7746
+ iMin = Math.floor(iMin - iDelta);
7747
+ iMax = Math.ceil(iMax + iDelta);
7748
+ jMin = Math.floor(jMin - jDelta);
7749
+ jMax = Math.ceil(jMax + jDelta);
7750
+ kMin = Math.floor(kMin - kDelta);
7751
+ kMax = Math.ceil(kMax + kDelta);
7752
+ const boundsIJK = [
7753
+ [iMin, iMax],
7754
+ [jMin, jMax],
7755
+ [kMin, kMax],
7756
+ ];
7757
+ const worldPosEnd = imageData.indexToWorld([iMax, jMax, kMax]);
7758
+ const canvasPosEnd = viewport.worldToCanvas(worldPosEnd);
7759
+ let curRow = 0;
7760
+ let intersections = [];
7761
+ let intersectionCounter = 0;
7762
+ const pointsInShape = (0,_utilities_pointInShapeCallback__WEBPACK_IMPORTED_MODULE_19__/* ["default"] */ .Z)(imageData, (pointLPS, _pointIJK) => {
7763
+ let result = true;
7764
+ const point = viewport.worldToCanvas(pointLPS);
7765
+ if (point[1] != curRow) {
7766
+ intersectionCounter = 0;
7767
+ curRow = point[1];
7768
+ intersections = (0,_utilities_math_polyline__WEBPACK_IMPORTED_MODULE_18__.getLineSegmentIntersectionsCoordinates)(canvasCoordinates, point, [canvasPosEnd[0], point[1]]);
7769
+ intersections.sort((function (index) {
7770
+ return function (a, b) {
7771
+ return a[index] === b[index] ? 0 : a[index] < b[index] ? -1 : 1;
7772
+ };
7773
+ })(0));
7774
+ }
7775
+ if (intersections.length && point[0] > intersections[0][0]) {
7776
+ intersections.shift();
7777
+ intersectionCounter++;
7778
+ }
7779
+ if (intersectionCounter % 2 === 0) {
7780
+ result = false;
7781
+ }
7782
+ return result;
7783
+ }, this.configuration.statsCalculator.statsCallback, boundsIJK);
7784
+ const stats = this.configuration.statsCalculator.getStatistics();
7785
+ cachedStats[targetId] = {
7786
+ Modality: metadata.Modality,
7787
+ area,
7788
+ perimeter: (0,_utilities_contours_calculatePerimeter__WEBPACK_IMPORTED_MODULE_23__/* ["default"] */ .Z)(canvasCoordinates, closed) / scale,
7789
+ mean: stats.mean?.value,
7790
+ max: stats.max?.value,
7791
+ stdDev: stats.stdDev?.value,
7792
+ statsArray: stats.array,
7793
+ pointsInShape: pointsInShape,
7794
+ areaUnit: areaUnits,
7795
+ modalityUnit,
7796
+ unit: units,
7797
+ };
7798
+ }
7799
+ updateOpenCachedStats({ targetId, metadata, canvasCoordinates, cachedStats, modalityUnit, calibratedScale, }) {
7800
+ const { scale, units } = calibratedScale;
7801
+ cachedStats[targetId] = {
7802
+ Modality: metadata.Modality,
7803
+ length: (0,_utilities_contours_calculatePerimeter__WEBPACK_IMPORTED_MODULE_23__/* ["default"] */ .Z)(canvasCoordinates, false) / scale,
7804
+ modalityUnit,
7805
+ unit: units,
7806
+ };
7807
+ }
6759
7808
  }
6760
7809
  function defaultGetTextLines(data, targetId) {
6761
7810
  const cachedVolumeStats = data.cachedStats[targetId];
6762
- const { area, mean, stdDev, perimeter, max, isEmptyArea, areaUnit, modalityUnit, } = cachedVolumeStats || {};
7811
+ const { area, mean, stdDev, length, perimeter, max, isEmptyArea, areaUnit, modalityUnit, unit, } = cachedVolumeStats || {};
6763
7812
  const textLines = [];
6764
7813
  if (area) {
6765
7814
  const areaLine = isEmptyArea
@@ -6777,7 +7826,10 @@ function defaultGetTextLines(data, targetId) {
6777
7826
  textLines.push(`Std Dev: ${(0,_utilities__WEBPACK_IMPORTED_MODULE_3__.roundNumber)(stdDev)} ${modalityUnit}`);
6778
7827
  }
6779
7828
  if (perimeter) {
6780
- textLines.push(`Perimeter: ${(0,_utilities__WEBPACK_IMPORTED_MODULE_3__.roundNumber)(perimeter)} ${modalityUnit}`);
7829
+ textLines.push(`Perimeter: ${(0,_utilities__WEBPACK_IMPORTED_MODULE_3__.roundNumber)(perimeter)} ${unit}`);
7830
+ }
7831
+ if (length) {
7832
+ textLines.push(`${(0,_utilities__WEBPACK_IMPORTED_MODULE_3__.roundNumber)(length)} ${unit}`);
6781
7833
  }
6782
7834
  return textLines;
6783
7835
  }
@@ -6794,7 +7846,7 @@ PlanarFreehandROITool.toolName = 'PlanarFreehandROI';
6794
7846
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
6795
7847
  /* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
6796
7848
  /* harmony export */ });
6797
- /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62709);
7849
+ /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12651);
6798
7850
  /* harmony import */ var _enums_SegmentationRepresentations__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74297);
6799
7851
  /* harmony import */ var _stateManagement_segmentation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95482);
6800
7852
  /* harmony import */ var _stateManagement_segmentation_config_segmentationVisibility__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(39949);
@@ -6927,7 +7979,7 @@ __webpack_require__.d(__webpack_exports__, {
6927
7979
  xX: () => (/* reexport */ SegmentationDisplayTool/* default */.Z)
6928
7980
  });
6929
7981
 
6930
- // UNUSED EXPORTS: AngleTool, AnnotationDisplayTool, ArrowAnnotateTool, BaseTool, BidirectionalTool, BrushTool, CircleROIStartEndThresholdTool, CircleROITool, CircleScissorsTool, CobbAngleTool, CrosshairsTool, DragProbeTool, EllipticalROITool, EraserTool, KeyImageTool, LengthTool, LivewireContourSegmentationTool, LivewireContourTool, MIPJumpToClickTool, MagnifyTool, OrientationMarkerTool, OverlayGridTool, PaintFillTool, PanTool, PlanarRotateTool, ProbeTool, RectangleROITool, RectangleScissorsTool, ReferenceCursors, ReferenceLines, ReferenceLinesTool, ScaleOverlayTool, SculptorTool, SegmentSelectTool, SegmentationIntersectionTool, SphereScissorsTool, SplineContourSegmentationTool, SplineROITool, StackScrollMouseWheelTool, StackScrollTool, TrackballRotateTool, UltrasoundDirectionalTool, VolumeRotateMouseWheelTool, WindowLevelRegionTool, WindowLevelTool, ZoomTool
7982
+ // UNUSED EXPORTS: AngleTool, AnnotationDisplayTool, ArrowAnnotateTool, BaseTool, BidirectionalTool, BrushTool, CircleROIStartEndThresholdTool, CircleROITool, CircleScissorsTool, CobbAngleTool, CrosshairsTool, DragProbeTool, EllipticalROITool, EraserTool, HeightTool, KeyImageTool, LengthTool, LivewireContourSegmentationTool, LivewireContourTool, MIPJumpToClickTool, MagnifyTool, OrientationMarkerTool, OverlayGridTool, PaintFillTool, PanTool, PlanarRotateTool, ProbeTool, RectangleROITool, RectangleScissorsTool, ReferenceCursors, ReferenceLines, ReferenceLinesTool, ScaleOverlayTool, SculptorTool, SegmentSelectTool, SegmentationIntersectionTool, SphereScissorsTool, SplineContourSegmentationTool, SplineROITool, StackScrollMouseWheelTool, StackScrollTool, TrackballRotateTool, UltrasoundDirectionalTool, VolumeRotateMouseWheelTool, WindowLevelRegionTool, WindowLevelTool, ZoomTool
6931
7983
 
6932
7984
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/tools/base/index.js
6933
7985
  var base = __webpack_require__(93382);
@@ -6973,6 +8025,8 @@ var SculptorTool = __webpack_require__(86684);
6973
8025
  var BidirectionalTool = __webpack_require__(56611);
6974
8026
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/tools/annotation/LengthTool.js
6975
8027
  var LengthTool = __webpack_require__(3098);
8028
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/tools/annotation/HeightTool.js
8029
+ var HeightTool = __webpack_require__(76131);
6976
8030
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/tools/annotation/ProbeTool.js
6977
8031
  var ProbeTool = __webpack_require__(86479);
6978
8032
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/tools/annotation/DragProbeTool.js
@@ -7015,14 +8069,14 @@ var RectangleScissorsTool = __webpack_require__(13354);
7015
8069
  var CircleScissorsTool = __webpack_require__(30809);
7016
8070
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/tools/segmentation/SphereScissorsTool.js
7017
8071
  var SphereScissorsTool = __webpack_require__(30862);
7018
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 28 modules
7019
- var esm = __webpack_require__(62709);
8072
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 1 modules
8073
+ var esm = __webpack_require__(12651);
7020
8074
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/stateManagement/index.js
7021
8075
  var stateManagement = __webpack_require__(50097);
7022
8076
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/stateManagement/annotation/annotationLocking.js
7023
8077
  var annotationLocking = __webpack_require__(11163);
7024
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/drawingSvg/index.js + 18 modules
7025
- var drawingSvg = __webpack_require__(86785);
8078
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/drawingSvg/index.js + 19 modules
8079
+ var drawingSvg = __webpack_require__(25876);
7026
8080
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/viewportFilters/index.js + 4 modules
7027
8081
  var viewportFilters = __webpack_require__(46966);
7028
8082
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/cursors/elementCursor.js
@@ -7180,12 +8234,26 @@ class RectangleROIThresholdTool extends RectangleROITool/* default */.Z {
7180
8234
  RectangleROIThresholdTool.toolName = 'RectangleROIThreshold';
7181
8235
  /* harmony default export */ const segmentation_RectangleROIThresholdTool = (RectangleROIThresholdTool);
7182
8236
 
8237
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/getCalibratedUnits.js
8238
+ var getCalibratedUnits = __webpack_require__(39661);
7183
8239
  // EXTERNAL MODULE: ../../../node_modules/gl-matrix/esm/index.js + 1 modules
7184
8240
  var gl_matrix_esm = __webpack_require__(72076);
7185
8241
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/throttle.js
7186
8242
  var throttle = __webpack_require__(90685);
8243
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/drawing/index.js + 1 modules
8244
+ var drawing = __webpack_require__(20724);
8245
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/planar/getWorldWidthAndHeightFromCorners.js
8246
+ var getWorldWidthAndHeightFromCorners = __webpack_require__(88582);
7187
8247
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/index.js + 1 modules
7188
8248
  var utilities = __webpack_require__(42975);
8249
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/getModalityUnit.js
8250
+ var getModalityUnit = __webpack_require__(15607);
8251
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/viewport/isViewportPreScaled.js
8252
+ var isViewportPreScaled = __webpack_require__(20752);
8253
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/math/basic/index.js + 2 modules
8254
+ var basic = __webpack_require__(51053);
8255
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/planar/index.js
8256
+ var planar = __webpack_require__(44037);
7189
8257
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/tools/segmentation/RectangleROIStartEndThresholdTool.js
7190
8258
 
7191
8259
 
@@ -7200,6 +8268,13 @@ var utilities = __webpack_require__(42975);
7200
8268
 
7201
8269
 
7202
8270
 
8271
+
8272
+
8273
+
8274
+
8275
+
8276
+
8277
+
7203
8278
 
7204
8279
  const { transformWorldToIndex } = esm.utilities;
7205
8280
  class RectangleROIStartEndThresholdTool extends RectangleROITool/* default */.Z {
@@ -7207,6 +8282,9 @@ class RectangleROIStartEndThresholdTool extends RectangleROITool/* default */.Z
7207
8282
  configuration: {
7208
8283
  numSlicesToPropagate: 10,
7209
8284
  computePointsInsideVolume: false,
8285
+ getTextLines: defaultGetTextLines,
8286
+ statsCalculator: basic.BasicStatsCalculator,
8287
+ showTextBox: false,
7210
8288
  },
7211
8289
  }) {
7212
8290
  super(toolProps, defaultToolProps);
@@ -7229,12 +8307,9 @@ class RectangleROIStartEndThresholdTool extends RectangleROITool/* default */.Z
7229
8307
  imageVolume = esm.cache.getVolume(volumeId);
7230
8308
  referencedImageId = esm.utilities.getClosestImageId(imageVolume, worldPos, viewPlaneNormal);
7231
8309
  }
7232
- if (!referencedImageId) {
7233
- throw new Error('This tool does not work on non-acquisition planes');
7234
- }
7235
- const startIndex = viewport.getCurrentImageIdIndex();
7236
8310
  const spacingInNormal = esm.utilities.getSpacingInNormalDirection(imageVolume, viewPlaneNormal);
7237
- const endIndex = this._getEndSliceIndex(imageVolume, worldPos, spacingInNormal, viewPlaneNormal);
8311
+ const startCoord = this._getStartCoordinate(worldPos, viewPlaneNormal);
8312
+ const endCoord = this._getEndCoordinate(worldPos, spacingInNormal, viewPlaneNormal);
7238
8313
  const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
7239
8314
  const annotation = {
7240
8315
  highlighted: true,
@@ -7251,18 +8326,24 @@ class RectangleROIStartEndThresholdTool extends RectangleROITool/* default */.Z
7251
8326
  },
7252
8327
  data: {
7253
8328
  label: '',
7254
- startSlice: startIndex,
7255
- endSlice: endIndex,
8329
+ startCoordinate: startCoord,
8330
+ endCoordinate: endCoord,
7256
8331
  cachedStats: {
7257
8332
  pointsInVolume: [],
7258
8333
  projectionPoints: [],
7259
8334
  projectionPointsImageIds: [referencedImageId],
8335
+ statistics: [],
7260
8336
  },
7261
8337
  handles: {
7262
8338
  textBox: {
7263
8339
  hasMoved: false,
7264
- worldPosition: null,
7265
- worldBoundingBox: null,
8340
+ worldPosition: [0, 0, 0],
8341
+ worldBoundingBox: {
8342
+ topLeft: [0, 0, 0],
8343
+ topRight: [0, 0, 0],
8344
+ bottomLeft: [0, 0, 0],
8345
+ bottomRight: [0, 0, 0],
8346
+ },
7266
8347
  },
7267
8348
  points: [
7268
8349
  [...worldPos],
@@ -7313,7 +8394,7 @@ class RectangleROIStartEndThresholdTool extends RectangleROITool/* default */.Z
7313
8394
  const targetId = this.getTargetId(enabledElement.viewport);
7314
8395
  const imageVolume = esm.cache.getVolume(targetId.split(/volumeId:|\?/)[1]);
7315
8396
  if (this.configuration.calculatePointsInsideVolume) {
7316
- this._computePointsInsideVolume(annotation, imageVolume, enabledElement);
8397
+ this._computePointsInsideVolume(annotation, targetId, imageVolume, enabledElement);
7317
8398
  }
7318
8399
  (0,triggerAnnotationRenderForViewportIds/* default */.Z)(enabledElement.renderingEngine, viewportIdsToRender);
7319
8400
  if (newAnnotation) {
@@ -7323,11 +8404,11 @@ class RectangleROIStartEndThresholdTool extends RectangleROITool/* default */.Z
7323
8404
  this.renderAnnotation = (enabledElement, svgDrawingHelper) => {
7324
8405
  let renderStatus = false;
7325
8406
  const { viewport } = enabledElement;
7326
- const annotations = (0,stateManagement/* getAnnotations */.fy)(this.getToolName(), viewport.element);
8407
+ let annotations = (0,stateManagement/* getAnnotations */.fy)(this.getToolName(), viewport.element);
7327
8408
  if (!annotations?.length) {
7328
8409
  return renderStatus;
7329
8410
  }
7330
- const sliceIndex = viewport.getCurrentImageIdIndex();
8411
+ annotations = (0,planar.filterAnnotationsWithinSamePlane)(annotations, viewport.getCamera());
7331
8412
  const styleSpecifier = {
7332
8413
  toolGroupId: this.toolGroupId,
7333
8414
  toolName: this.getToolName(),
@@ -7336,22 +8417,37 @@ class RectangleROIStartEndThresholdTool extends RectangleROITool/* default */.Z
7336
8417
  for (let i = 0; i < annotations.length; i++) {
7337
8418
  const annotation = annotations[i];
7338
8419
  const { annotationUID, data } = annotation;
7339
- const { startSlice, endSlice } = data;
8420
+ const { startCoordinate, endCoordinate } = data;
7340
8421
  const { points, activeHandleIndex } = data.handles;
7341
8422
  const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p));
7342
8423
  styleSpecifier.annotationUID = annotationUID;
7343
8424
  const lineWidth = this.getStyle('lineWidth', styleSpecifier, annotation);
7344
8425
  const lineDash = this.getStyle('lineDash', styleSpecifier, annotation);
7345
8426
  const color = this.getStyle('color', styleSpecifier, annotation);
7346
- if (sliceIndex < Math.min(startSlice, endSlice) ||
7347
- sliceIndex > Math.max(startSlice, endSlice)) {
8427
+ const focalPoint = viewport.getCamera().focalPoint;
8428
+ const viewplaneNormal = viewport.getCamera().viewPlaneNormal;
8429
+ let startCoord = startCoordinate;
8430
+ let endCoord = endCoordinate;
8431
+ if (Array.isArray(startCoordinate)) {
8432
+ startCoord = this._getCoordinateForViewplaneNormal(startCoord, viewplaneNormal);
8433
+ }
8434
+ if (Array.isArray(endCoordinate)) {
8435
+ endCoord = this._getCoordinateForViewplaneNormal(endCoord, viewplaneNormal);
8436
+ }
8437
+ const roundedStartCoord = esm.utilities.roundToPrecision(startCoord);
8438
+ const roundedEndCoord = esm.utilities.roundToPrecision(endCoord);
8439
+ const coord = this._getCoordinateForViewplaneNormal(focalPoint, viewplaneNormal);
8440
+ const roundedCoord = esm.utilities.roundToPrecision(coord);
8441
+ if (roundedCoord < Math.min(roundedStartCoord, roundedEndCoord) ||
8442
+ roundedCoord > Math.max(roundedStartCoord, roundedEndCoord)) {
7348
8443
  continue;
7349
8444
  }
7350
8445
  if (annotation.invalidated) {
7351
8446
  this._throttledCalculateCachedStats(annotation, enabledElement);
7352
8447
  }
7353
8448
  let firstOrLastSlice = false;
7354
- if (sliceIndex === startSlice || sliceIndex === endSlice) {
8449
+ if (roundedCoord === roundedStartCoord ||
8450
+ roundedCoord === roundedEndCoord) {
7355
8451
  firstOrLastSlice = true;
7356
8452
  }
7357
8453
  if (!viewport.getRenderingEngine()) {
@@ -7385,6 +8481,42 @@ class RectangleROIStartEndThresholdTool extends RectangleROITool/* default */.Z
7385
8481
  lineWidth,
7386
8482
  });
7387
8483
  renderStatus = true;
8484
+ if (this.configuration.showTextBox &&
8485
+ this.configuration.calculatePointsInsideVolume) {
8486
+ const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation);
8487
+ if (!options.visibility) {
8488
+ data.handles.textBox = {
8489
+ hasMoved: false,
8490
+ worldPosition: [0, 0, 0],
8491
+ worldBoundingBox: {
8492
+ topLeft: [0, 0, 0],
8493
+ topRight: [0, 0, 0],
8494
+ bottomLeft: [0, 0, 0],
8495
+ bottomRight: [0, 0, 0],
8496
+ },
8497
+ };
8498
+ continue;
8499
+ }
8500
+ const textLines = this.configuration.getTextLines(data);
8501
+ if (!textLines || textLines.length === 0) {
8502
+ continue;
8503
+ }
8504
+ if (!data.handles.textBox.hasMoved) {
8505
+ const canvasTextBoxCoords = (0,drawing.getTextBoxCoordsCanvas)(canvasCoordinates);
8506
+ data.handles.textBox.worldPosition =
8507
+ viewport.canvasToWorld(canvasTextBoxCoords);
8508
+ }
8509
+ const textBoxPosition = viewport.worldToCanvas(data.handles.textBox.worldPosition);
8510
+ const textBoxUID = '1';
8511
+ const boundingBox = (0,drawingSvg.drawLinkedTextBox)(svgDrawingHelper, annotationUID, textBoxUID, textLines, textBoxPosition, canvasCoordinates, {}, options);
8512
+ const { x: left, y: top, width, height } = boundingBox;
8513
+ data.handles.textBox.worldBoundingBox = {
8514
+ topLeft: viewport.canvasToWorld([left, top]),
8515
+ topRight: viewport.canvasToWorld([left + width, top]),
8516
+ bottomLeft: viewport.canvasToWorld([left, top + height]),
8517
+ bottomRight: viewport.canvasToWorld([left + width, top + height]),
8518
+ };
8519
+ }
7388
8520
  }
7389
8521
  return renderStatus;
7390
8522
  };
@@ -7394,17 +8526,26 @@ class RectangleROIStartEndThresholdTool extends RectangleROITool/* default */.Z
7394
8526
  const { data, metadata } = annotation;
7395
8527
  const { viewPlaneNormal, spacingInNormal } = metadata;
7396
8528
  const { imageData } = imageVolume;
7397
- const { startSlice, endSlice } = data;
8529
+ const { startCoordinate, endCoordinate } = data;
7398
8530
  const { points } = data.handles;
7399
8531
  const startIJK = transformWorldToIndex(imageData, points[0]);
7400
- if (startIJK[2] !== startSlice) {
7401
- throw new Error('Start slice does not match');
7402
- }
7403
- const endIJK = gl_matrix_esm/* vec3.fromValues */.R3.fromValues(startIJK[0], startIJK[1], endSlice);
8532
+ const endIJK = transformWorldToIndex(imageData, points[0]);
7404
8533
  const startWorld = gl_matrix_esm/* vec3.create */.R3.create();
7405
8534
  imageData.indexToWorldVec3(startIJK, startWorld);
7406
8535
  const endWorld = gl_matrix_esm/* vec3.create */.R3.create();
7407
8536
  imageData.indexToWorldVec3(endIJK, endWorld);
8537
+ if (this._getIndexOfCoordinatesForViewplaneNormal(viewPlaneNormal) == 2) {
8538
+ startWorld[2] = startCoordinate;
8539
+ endWorld[2] = endCoordinate;
8540
+ }
8541
+ else if (this._getIndexOfCoordinatesForViewplaneNormal(viewPlaneNormal) == 0) {
8542
+ startWorld[0] = startCoordinate;
8543
+ endWorld[0] = endCoordinate;
8544
+ }
8545
+ else if (this._getIndexOfCoordinatesForViewplaneNormal(viewPlaneNormal) == 1) {
8546
+ startWorld[1] = startCoordinate;
8547
+ endWorld[1] = endCoordinate;
8548
+ }
7408
8549
  const distance = gl_matrix_esm/* vec3.distance */.R3.distance(startWorld, endWorld);
7409
8550
  const newProjectionPoints = [];
7410
8551
  for (let dist = 0; dist < distance; dist += spacingInNormal) {
@@ -7415,34 +8556,45 @@ class RectangleROIStartEndThresholdTool extends RectangleROITool/* default */.Z
7415
8556
  }));
7416
8557
  }
7417
8558
  data.cachedStats.projectionPoints = newProjectionPoints;
7418
- const projectionPointsImageIds = [];
7419
- for (const RectanglePoints of newProjectionPoints) {
7420
- const imageId = esm.utilities.getClosestImageId(imageVolume, RectanglePoints[0], viewPlaneNormal);
7421
- projectionPointsImageIds.push(imageId);
7422
- }
7423
- data.cachedStats.projectionPointsImageIds = projectionPointsImageIds;
7424
8559
  }
7425
- _computePointsInsideVolume(annotation, imageVolume, enabledElement) {
7426
- const { data } = annotation;
8560
+ _computePointsInsideVolume(annotation, targetId, imageVolume, enabledElement) {
8561
+ const { data, metadata } = annotation;
8562
+ const { viewPlaneNormal, viewUp } = metadata;
8563
+ const { viewport, renderingEngine } = enabledElement;
7427
8564
  const projectionPoints = data.cachedStats.projectionPoints;
7428
8565
  const pointsInsideVolume = [[]];
8566
+ const image = this.getTargetIdImage(targetId, renderingEngine);
8567
+ const worldPos1 = data.handles.points[0];
8568
+ const worldPos2 = data.handles.points[3];
8569
+ const { worldWidth, worldHeight } = (0,getWorldWidthAndHeightFromCorners/* default */.Z)(viewPlaneNormal, viewUp, worldPos1, worldPos2);
8570
+ const measureInfo = (0,getCalibratedUnits/* getCalibratedLengthUnitsAndScale */.mh)(image, data.habdles);
8571
+ const area = Math.abs(worldWidth * worldHeight) /
8572
+ (measureInfo.scale * measureInfo.scale);
8573
+ const modalityUnitOptions = {
8574
+ isPreScaled: (0,isViewportPreScaled/* isViewportPreScaled */.P)(viewport, targetId),
8575
+ isSuvScaled: this.isSuvScaled(viewport, targetId, annotation.metadata.referencedImageId),
8576
+ };
8577
+ const modalityUnit = (0,getModalityUnit/* getModalityUnit */.F)(metadata.Modality, annotation.metadata.referencedImageId, modalityUnitOptions);
7429
8578
  for (let i = 0; i < projectionPoints.length; i++) {
7430
8579
  if (!imageVolume) {
7431
8580
  continue;
7432
8581
  }
7433
8582
  const projectionPoint = projectionPoints[i][0];
7434
- const worldPos1 = data.handles.points[0];
7435
- const worldPos2 = data.handles.points[3];
7436
8583
  const { dimensions, imageData } = imageVolume;
7437
8584
  const worldPos1Index = transformWorldToIndex(imageData, worldPos1);
7438
8585
  const worldProjectionPointIndex = transformWorldToIndex(imageData, projectionPoint);
8586
+ const indexOfProjection = this._getIndexOfCoordinatesForViewplaneNormal(viewPlaneNormal);
7439
8587
  worldPos1Index[0] = Math.floor(worldPos1Index[0]);
7440
8588
  worldPos1Index[1] = Math.floor(worldPos1Index[1]);
7441
- worldPos1Index[2] = Math.floor(worldProjectionPointIndex[2]);
8589
+ worldPos1Index[2] = Math.floor(worldPos1Index[2]);
8590
+ worldPos1Index[indexOfProjection] =
8591
+ worldProjectionPointIndex[indexOfProjection];
7442
8592
  const worldPos2Index = transformWorldToIndex(imageData, worldPos2);
7443
8593
  worldPos2Index[0] = Math.floor(worldPos2Index[0]);
7444
8594
  worldPos2Index[1] = Math.floor(worldPos2Index[1]);
7445
- worldPos2Index[2] = Math.floor(worldProjectionPointIndex[2]);
8595
+ worldPos2Index[2] = Math.floor(worldPos2Index[2]);
8596
+ worldPos2Index[indexOfProjection] =
8597
+ worldProjectionPointIndex[indexOfProjection];
7446
8598
  if (this._isInsideVolume(worldPos1Index, worldPos2Index, dimensions)) {
7447
8599
  this.isHandleOutsideImage = false;
7448
8600
  const iMin = Math.min(worldPos1Index[0], worldPos2Index[0]);
@@ -7456,11 +8608,22 @@ class RectangleROIStartEndThresholdTool extends RectangleROITool/* default */.Z
7456
8608
  [jMin, jMax],
7457
8609
  [kMin, kMax],
7458
8610
  ];
7459
- const pointsInShape = (0,utilities.pointInShapeCallback)(imageData, () => true, null, boundsIJK);
8611
+ const pointsInShape = (0,utilities.pointInShapeCallback)(imageData, () => true, this.configuration.statsCalculator.statsCallback, boundsIJK);
7460
8612
  pointsInsideVolume.push(pointsInShape);
7461
8613
  }
7462
8614
  }
8615
+ const stats = this.configuration.statsCalculator.getStatistics();
7463
8616
  data.cachedStats.pointsInVolume = pointsInsideVolume;
8617
+ data.cachedStats.statistics = {
8618
+ Modality: metadata.Modality,
8619
+ area,
8620
+ mean: stats.mean?.value,
8621
+ stdDev: stats.stdDev?.value,
8622
+ max: stats.max?.value,
8623
+ statsArray: stats.array,
8624
+ areaUnit: measureInfo.areaUnits,
8625
+ modalityUnit,
8626
+ };
7464
8627
  }
7465
8628
  _calculateCachedStatsTool(annotation, enabledElement) {
7466
8629
  const data = annotation.data;
@@ -7473,25 +8636,44 @@ class RectangleROIStartEndThresholdTool extends RectangleROITool/* default */.Z
7473
8636
  (0,state/* triggerAnnotationModified */.hg)(annotation, viewport.element);
7474
8637
  return cachedStats;
7475
8638
  }
7476
- _getEndSliceIndex(imageVolume, worldPos, spacingInNormal, viewPlaneNormal) {
8639
+ _getStartCoordinate(worldPos, viewPlaneNormal) {
8640
+ const startPos = worldPos;
8641
+ const startCoord = this._getCoordinateForViewplaneNormal(startPos, viewPlaneNormal);
8642
+ return startCoord;
8643
+ }
8644
+ _getEndCoordinate(worldPos, spacingInNormal, viewPlaneNormal) {
7477
8645
  const numSlicesToPropagate = this.configuration.numSlicesToPropagate;
7478
8646
  const endPos = gl_matrix_esm/* vec3.create */.R3.create();
7479
8647
  gl_matrix_esm/* vec3.scaleAndAdd */.R3.scaleAndAdd(endPos, worldPos, viewPlaneNormal, numSlicesToPropagate * spacingInNormal);
7480
- const halfSpacingInNormalDirection = spacingInNormal / 2;
7481
- const { imageIds } = imageVolume;
7482
- let imageIdIndex;
7483
- for (let i = 0; i < imageIds.length; i++) {
7484
- const imageId = imageIds[i];
7485
- const { imagePositionPatient } = esm.metaData.get('imagePlaneModule', imageId);
7486
- const dir = gl_matrix_esm/* vec3.create */.R3.create();
7487
- gl_matrix_esm/* vec3.sub */.R3.sub(dir, endPos, imagePositionPatient);
7488
- const dot = gl_matrix_esm/* vec3.dot */.R3.dot(dir, viewPlaneNormal);
7489
- if (Math.abs(dot) < halfSpacingInNormalDirection) {
7490
- imageIdIndex = i;
7491
- }
7492
- }
7493
- return imageIdIndex;
8648
+ const endCoord = this._getCoordinateForViewplaneNormal(endPos, viewPlaneNormal);
8649
+ return endCoord;
8650
+ }
8651
+ _getIndexOfCoordinatesForViewplaneNormal(viewPlaneNormal) {
8652
+ const viewplaneNormalAbs = [
8653
+ Math.abs(viewPlaneNormal[0]),
8654
+ Math.abs(viewPlaneNormal[1]),
8655
+ Math.abs(viewPlaneNormal[2]),
8656
+ ];
8657
+ const indexOfDirection = viewplaneNormalAbs.indexOf(Math.max(...viewplaneNormalAbs));
8658
+ return indexOfDirection;
8659
+ }
8660
+ _getCoordinateForViewplaneNormal(pos, viewPlaneNormal) {
8661
+ const indexOfDirection = this._getIndexOfCoordinatesForViewplaneNormal(viewPlaneNormal);
8662
+ return pos[indexOfDirection];
8663
+ }
8664
+ }
8665
+ function defaultGetTextLines(data) {
8666
+ const cachedVolumeStats = data.cachedStats.statistics;
8667
+ const { area, mean, max, stdDev, areaUnit, modalityUnit } = cachedVolumeStats;
8668
+ if (mean === undefined) {
8669
+ return;
7494
8670
  }
8671
+ const textLines = [];
8672
+ textLines.push(`Area: ${(0,utilities.roundNumber)(area)} ${areaUnit}`);
8673
+ textLines.push(`Mean: ${(0,utilities.roundNumber)(mean)} ${modalityUnit}`);
8674
+ textLines.push(`Max: ${(0,utilities.roundNumber)(max)} ${modalityUnit}`);
8675
+ textLines.push(`Std Dev: ${(0,utilities.roundNumber)(stdDev)} ${modalityUnit}`);
8676
+ return textLines;
7495
8677
  }
7496
8678
  RectangleROIStartEndThresholdTool.toolName = 'RectangleROIStartEndThreshold';
7497
8679
  /* harmony default export */ const segmentation_RectangleROIStartEndThresholdTool = (RectangleROIStartEndThresholdTool);
@@ -7559,6 +8741,7 @@ var SegmentSelectTool = __webpack_require__(45986);
7559
8741
 
7560
8742
 
7561
8743
 
8744
+
7562
8745
 
7563
8746
 
7564
8747
  /***/ }),
@@ -7649,8 +8832,8 @@ __webpack_require__.d(orientation_namespaceObject, {
7649
8832
  invertOrientationStringLPS: () => (invertOrientationStringLPS/* default */.Z)
7650
8833
  });
7651
8834
 
7652
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 28 modules
7653
- var esm = __webpack_require__(62709);
8835
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 1 modules
8836
+ var esm = __webpack_require__(12651);
7654
8837
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/getAnnotationNearPoint.js
7655
8838
  var getAnnotationNearPoint = __webpack_require__(62358);
7656
8839
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/debounce.js