@cornerstonejs/adapters 4.22.6 → 4.22.8
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.
- package/dist/esm/adapters/Cornerstone/Angle.js +22 -15
- package/dist/esm/adapters/Cornerstone/ArrowAnnotate.js +13 -18
- package/dist/esm/adapters/Cornerstone/Bidirectional.js +22 -27
- package/dist/esm/adapters/Cornerstone/CircleRoi.js +20 -26
- package/dist/esm/adapters/Cornerstone/CobbAngle.js +22 -15
- package/dist/esm/adapters/Cornerstone/EllipticalRoi.js +19 -25
- package/dist/esm/adapters/Cornerstone/FreehandRoi.js +21 -25
- package/dist/esm/adapters/Cornerstone/Length.js +18 -15
- package/dist/esm/adapters/Cornerstone/MeasurementReport.js +20 -40
- package/dist/esm/adapters/Cornerstone/ParametricMap.js +15 -26
- package/dist/esm/adapters/Cornerstone/RectangleRoi.js +26 -25
- package/dist/esm/adapters/Cornerstone/Segmentation_3X.js +19 -31
- package/dist/esm/adapters/Cornerstone/Segmentation_4X.js +69 -90
- package/dist/esm/adapters/Cornerstone3D/Angle.js +17 -24
- package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.js +21 -35
- package/dist/esm/adapters/Cornerstone3D/BaseAdapter3D.js +12 -23
- package/dist/esm/adapters/Cornerstone3D/Bidirectional.js +21 -33
- package/dist/esm/adapters/Cornerstone3D/CircleROI.js +27 -35
- package/dist/esm/adapters/Cornerstone3D/CobbAngle.js +25 -28
- package/dist/esm/adapters/Cornerstone3D/ControlPointPolyline.js +10 -17
- package/dist/esm/adapters/Cornerstone3D/EllipticalROI.js +25 -33
- package/dist/esm/adapters/Cornerstone3D/KeyImage.js +3 -9
- package/dist/esm/adapters/Cornerstone3D/LabelData.js +22 -33
- package/dist/esm/adapters/Cornerstone3D/Length.js +19 -27
- package/dist/esm/adapters/Cornerstone3D/MeasurementReport.js +73 -116
- package/dist/esm/adapters/Cornerstone3D/ParametricMap/generateToolState.js +2 -6
- package/dist/esm/adapters/Cornerstone3D/PlanarFreehandROI.js +26 -35
- package/dist/esm/adapters/Cornerstone3D/Probe.js +16 -27
- package/dist/esm/adapters/Cornerstone3D/RTStruct/RTSS.js +13 -29
- package/dist/esm/adapters/Cornerstone3D/RTStruct/index.js +1 -3
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedFrameOfReferenceSequence.js +1 -3
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedSeriesSequence.js +7 -13
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getStructureSetModule.js +1 -3
- package/dist/esm/adapters/Cornerstone3D/RectangleROI.js +21 -28
- package/dist/esm/adapters/Cornerstone3D/Segmentation/compactMergeSegData.js +5 -9
- package/dist/esm/adapters/Cornerstone3D/Segmentation/generateLabelMaps2DFrom3D.js +2 -4
- package/dist/esm/adapters/Cornerstone3D/Segmentation/generateSegmentation.js +5 -15
- package/dist/esm/adapters/Cornerstone3D/Segmentation/generateToolState.js +3 -4
- package/dist/esm/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.js +124 -156
- package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.js +12 -23
- package/dist/esm/adapters/Cornerstone3D/metricHandler.js +8 -5
- package/dist/esm/adapters/VTKjs/Segmentation.js +2 -4
- package/dist/esm/adapters/helpers/checkOrientation.js +2 -4
- package/dist/esm/adapters/helpers/downloadDICOMData.js +1 -3
- package/dist/esm/adapters/helpers/getDatasetsFromImages.js +3 -7
- package/dist/esm/adapters/helpers/scoordToWorld.js +5 -13
- package/dist/esm/adapters/helpers/toPoint3.js +1 -3
- package/dist/esm/adapters/helpers/toScoordType.js +3 -7
- package/dist/esm/adapters/index.js +3 -2
- package/dist/esm/utilities/createInstance.js +9 -8
- package/dist/esm/utilities/referencedMetadataProvider.js +7 -13
- package/dist/esm/version.d.ts +1 -1
- package/package.json +6 -6
|
@@ -1,40 +1,30 @@
|
|
|
1
1
|
import { triggerEvent, eventTarget, imageLoader } from '@cornerstonejs/core';
|
|
2
2
|
import { utilities as utilities$1 } from '@cornerstonejs/tools';
|
|
3
|
-
import {
|
|
3
|
+
import { data, normalizers, utilities } from 'dcmjs';
|
|
4
4
|
import ndarray from 'ndarray';
|
|
5
5
|
import checkOrientation from '../../helpers/checkOrientation.js';
|
|
6
6
|
import { getValidOrientations, getSegmentMetadata, unpackPixelData, calculateCentroid, readFromUnpackedChunks, alignPixelDataWithSourceData, getSegmentIndex, findReferenceSourceImageId } from '../../Cornerstone/Segmentation_4X.js';
|
|
7
7
|
import { compactMergeSegmentDataWithoutInformationLoss } from './compactMergeSegData.js';
|
|
8
8
|
import { Events } from '../../enums/Events.js';
|
|
9
9
|
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const {
|
|
15
|
-
Normalizer
|
|
16
|
-
} = normalizers;
|
|
17
|
-
const {
|
|
18
|
-
decode
|
|
19
|
-
} = utilities.compression;
|
|
10
|
+
const DicomMessage = data.DicomMessage,
|
|
11
|
+
DicomMetaDictionary = data.DicomMetaDictionary;
|
|
12
|
+
const Normalizer = normalizers.Normalizer;
|
|
13
|
+
const decode = utilities.compression.decode;
|
|
20
14
|
const updateSegmentsOnFrame = _ref => {
|
|
21
|
-
let
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
segmentIndex
|
|
25
|
-
} = _ref;
|
|
15
|
+
let segmentsOnFrame = _ref.segmentsOnFrame,
|
|
16
|
+
imageIdIndex = _ref.imageIdIndex,
|
|
17
|
+
segmentIndex = _ref.segmentIndex;
|
|
26
18
|
if (!segmentsOnFrame[imageIdIndex]) {
|
|
27
19
|
segmentsOnFrame[imageIdIndex] = [];
|
|
28
20
|
}
|
|
29
21
|
segmentsOnFrame[imageIdIndex].push(segmentIndex);
|
|
30
22
|
};
|
|
31
23
|
const updateSegmentsPixelIndices = _ref2 => {
|
|
32
|
-
let
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
indexCache
|
|
37
|
-
} = _ref2;
|
|
24
|
+
let segmentsPixelIndices = _ref2.segmentsPixelIndices,
|
|
25
|
+
segmentIndex = _ref2.segmentIndex,
|
|
26
|
+
imageIdIndex = _ref2.imageIdIndex,
|
|
27
|
+
indexCache = _ref2.indexCache;
|
|
38
28
|
if (!segmentsPixelIndices.has(segmentIndex)) {
|
|
39
29
|
segmentsPixelIndices.set(segmentIndex, {});
|
|
40
30
|
}
|
|
@@ -43,12 +33,10 @@ const updateSegmentsPixelIndices = _ref2 => {
|
|
|
43
33
|
segmentsPixelIndices.set(segmentIndex, segmentIndexObject);
|
|
44
34
|
};
|
|
45
35
|
const extractInfoFromPerFrameFunctionalGroups = _ref3 => {
|
|
46
|
-
let
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
multiframe
|
|
51
|
-
} = _ref3;
|
|
36
|
+
let PerFrameFunctionalGroups = _ref3.PerFrameFunctionalGroups,
|
|
37
|
+
sequenceIndex = _ref3.sequenceIndex,
|
|
38
|
+
sopUIDImageIdIndexMap = _ref3.sopUIDImageIdIndexMap,
|
|
39
|
+
multiframe = _ref3.multiframe;
|
|
52
40
|
const referencedSOPInstanceUid = PerFrameFunctionalGroups.DerivationImageSequence[0].SourceImageSequence[0].ReferencedSOPInstanceUID;
|
|
53
41
|
const referencedImageId = sopUIDImageIdIndexMap[referencedSOPInstanceUid];
|
|
54
42
|
const segmentIndex = getSegmentIndex(multiframe, sequenceIndex);
|
|
@@ -59,11 +47,12 @@ const extractInfoFromPerFrameFunctionalGroups = _ref3 => {
|
|
|
59
47
|
};
|
|
60
48
|
};
|
|
61
49
|
async function createLabelmapsFromBufferInternal(referencedImageIds, arrayBuffer, metadataProvider, options) {
|
|
62
|
-
const
|
|
63
|
-
tolerance = 1e-3,
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
50
|
+
const _options$tolerance = options.tolerance,
|
|
51
|
+
tolerance = _options$tolerance === void 0 ? 1e-3 : _options$tolerance,
|
|
52
|
+
_options$TypedArrayCo = options.TypedArrayConstructor,
|
|
53
|
+
TypedArrayConstructor = _options$TypedArrayCo === void 0 ? Uint8Array : _options$TypedArrayCo,
|
|
54
|
+
_options$maxBytesPerC = options.maxBytesPerChunk,
|
|
55
|
+
maxBytesPerChunk = _options$maxBytesPerC === void 0 ? 199000000 : _options$maxBytesPerC;
|
|
67
56
|
const dicomData = DicomMessage.readFile(arrayBuffer);
|
|
68
57
|
const dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);
|
|
69
58
|
dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);
|
|
@@ -98,9 +87,8 @@ async function createLabelmapsFromBufferInternal(referencedImageIds, arrayBuffer
|
|
|
98
87
|
}
|
|
99
88
|
const orientation = checkOrientation(multiframe, validOrientations, [imagePlaneModule.rows, imagePlaneModule.columns, referencedImageIds.length], tolerance);
|
|
100
89
|
const sopUIDImageIdIndexMap = referencedImageIds.reduce((acc, imageId) => {
|
|
101
|
-
const
|
|
102
|
-
sopInstanceUID
|
|
103
|
-
} = metadataProvider.get('generalImageModule', imageId);
|
|
90
|
+
const _metadataProvider$get = metadataProvider.get('generalImageModule', imageId),
|
|
91
|
+
sopInstanceUID = _metadataProvider$get.sopInstanceUID;
|
|
104
92
|
acc[sopInstanceUID] = imageId;
|
|
105
93
|
return acc;
|
|
106
94
|
}, {});
|
|
@@ -128,23 +116,22 @@ async function createLabelmapsFromBufferInternal(referencedImageIds, arrayBuffer
|
|
|
128
116
|
labelMapImages.push(labelMapImage);
|
|
129
117
|
}
|
|
130
118
|
const segmentsPixelIndices = new Map();
|
|
131
|
-
const {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
});
|
|
119
|
+
const _await$insertFunction = await insertFunction({
|
|
120
|
+
segmentsOnFrame,
|
|
121
|
+
labelMapImages,
|
|
122
|
+
pixelDataChunks,
|
|
123
|
+
multiframe,
|
|
124
|
+
referencedImageIds,
|
|
125
|
+
validOrientations,
|
|
126
|
+
metadataProvider,
|
|
127
|
+
tolerance,
|
|
128
|
+
segmentsPixelIndices,
|
|
129
|
+
sopUIDImageIdIndexMap,
|
|
130
|
+
imageIdMaps,
|
|
131
|
+
TypedArrayConstructor
|
|
132
|
+
}),
|
|
133
|
+
hasOverlappingSegments = _await$insertFunction.hasOverlappingSegments,
|
|
134
|
+
arrayOfLabelMapImages = _await$insertFunction.arrayOfLabelMapImages;
|
|
148
135
|
const centroidXYZ = new Map();
|
|
149
136
|
segmentsPixelIndices.forEach((imageIdIndexBufferIndex, segmentIndex) => {
|
|
150
137
|
const centroids = calculateCentroid(imageIdIndexBufferIndex, multiframe, metadataProvider, referencedImageIds);
|
|
@@ -164,25 +151,21 @@ const throttledTriggerLoadProgressEvent = utilities$1.throttle(percentComplete =
|
|
|
164
151
|
});
|
|
165
152
|
}, 200);
|
|
166
153
|
function insertPixelDataPlanar(_ref4) {
|
|
167
|
-
let
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
PerFrameFunctionalGroupsSequence,
|
|
183
|
-
Rows,
|
|
184
|
-
Columns
|
|
185
|
-
} = multiframe;
|
|
154
|
+
let segmentsOnFrame = _ref4.segmentsOnFrame,
|
|
155
|
+
labelMapImages = _ref4.labelMapImages,
|
|
156
|
+
pixelDataChunks = _ref4.pixelDataChunks,
|
|
157
|
+
multiframe = _ref4.multiframe,
|
|
158
|
+
referencedImageIds = _ref4.referencedImageIds,
|
|
159
|
+
validOrientations = _ref4.validOrientations,
|
|
160
|
+
metadataProvider = _ref4.metadataProvider,
|
|
161
|
+
tolerance = _ref4.tolerance,
|
|
162
|
+
segmentsPixelIndices = _ref4.segmentsPixelIndices,
|
|
163
|
+
sopUIDImageIdIndexMap = _ref4.sopUIDImageIdIndexMap,
|
|
164
|
+
imageIdMaps = _ref4.imageIdMaps;
|
|
165
|
+
const SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
|
|
166
|
+
PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
|
|
167
|
+
Rows = multiframe.Rows,
|
|
168
|
+
Columns = multiframe.Columns;
|
|
186
169
|
const sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;
|
|
187
170
|
const sliceLength = Columns * Rows;
|
|
188
171
|
const groupsLen = PerFrameFunctionalGroupsSequence.length;
|
|
@@ -342,17 +325,15 @@ function insertPixelDataPlanar(_ref4) {
|
|
|
342
325
|
});
|
|
343
326
|
}
|
|
344
327
|
const getAlignedPixelData = _ref5 => {
|
|
345
|
-
let
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
tolerance
|
|
355
|
-
} = _ref5;
|
|
328
|
+
let sharedImageOrientationPatient = _ref5.sharedImageOrientationPatient,
|
|
329
|
+
PerFrameFunctionalGroups = _ref5.PerFrameFunctionalGroups,
|
|
330
|
+
pixelDataChunks = _ref5.pixelDataChunks,
|
|
331
|
+
sequenceIndex = _ref5.sequenceIndex,
|
|
332
|
+
sliceLength = _ref5.sliceLength,
|
|
333
|
+
Rows = _ref5.Rows,
|
|
334
|
+
Columns = _ref5.Columns,
|
|
335
|
+
validOrientations = _ref5.validOrientations,
|
|
336
|
+
tolerance = _ref5.tolerance;
|
|
356
337
|
const ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
|
|
357
338
|
const view = readFromUnpackedChunks(pixelDataChunks, sequenceIndex * sliceLength, sliceLength);
|
|
358
339
|
const pixelDataI2D = ndarray(view, [Rows, Columns]);
|
|
@@ -363,22 +344,18 @@ const getAlignedPixelData = _ref5 => {
|
|
|
363
344
|
return alignedPixelDataI;
|
|
364
345
|
};
|
|
365
346
|
const checkImageDimensions = _ref6 => {
|
|
366
|
-
let
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
Columns
|
|
371
|
-
} = _ref6;
|
|
347
|
+
let metadataProvider = _ref6.metadataProvider,
|
|
348
|
+
imageId = _ref6.imageId,
|
|
349
|
+
Rows = _ref6.Rows,
|
|
350
|
+
Columns = _ref6.Columns;
|
|
372
351
|
const sourceImageMetadata = metadataProvider.get('instance', imageId);
|
|
373
352
|
if (Rows !== sourceImageMetadata.Rows || Columns !== sourceImageMetadata.Columns) {
|
|
374
353
|
throw new Error('Individual SEG frames have different geometry dimensions (Rows and Columns) ' + 'respect to the source image reference frame. This is not yet supported. ' + 'Aborting segmentation loading. ');
|
|
375
354
|
}
|
|
376
355
|
};
|
|
377
356
|
const getArrayOfLabelMapImagesWithSegmentData = _ref7 => {
|
|
378
|
-
let
|
|
379
|
-
|
|
380
|
-
referencedImageIds
|
|
381
|
-
} = _ref7;
|
|
357
|
+
let arrayOfSegmentData = _ref7.arrayOfSegmentData,
|
|
358
|
+
referencedImageIds = _ref7.referencedImageIds;
|
|
382
359
|
let largestArray = [];
|
|
383
360
|
for (let i = 0; i < arrayOfSegmentData.length; i++) {
|
|
384
361
|
const segmentData = arrayOfSegmentData[i];
|
|
@@ -402,25 +379,21 @@ const getArrayOfLabelMapImagesWithSegmentData = _ref7 => {
|
|
|
402
379
|
});
|
|
403
380
|
};
|
|
404
381
|
function insertOverlappingPixelDataPlanar(_ref8) {
|
|
405
|
-
let
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
PerFrameFunctionalGroupsSequence,
|
|
421
|
-
Rows,
|
|
422
|
-
Columns
|
|
423
|
-
} = multiframe;
|
|
382
|
+
let segmentsOnFrame = _ref8.segmentsOnFrame,
|
|
383
|
+
labelMapImages = _ref8.labelMapImages,
|
|
384
|
+
pixelDataChunks = _ref8.pixelDataChunks,
|
|
385
|
+
multiframe = _ref8.multiframe,
|
|
386
|
+
referencedImageIds = _ref8.referencedImageIds,
|
|
387
|
+
validOrientations = _ref8.validOrientations,
|
|
388
|
+
metadataProvider = _ref8.metadataProvider,
|
|
389
|
+
tolerance = _ref8.tolerance,
|
|
390
|
+
segmentsPixelIndices = _ref8.segmentsPixelIndices,
|
|
391
|
+
sopUIDImageIdIndexMap = _ref8.sopUIDImageIdIndexMap,
|
|
392
|
+
imageIdMaps = _ref8.imageIdMaps;
|
|
393
|
+
const SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
|
|
394
|
+
PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
|
|
395
|
+
Rows = multiframe.Rows,
|
|
396
|
+
Columns = multiframe.Columns;
|
|
424
397
|
const sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;
|
|
425
398
|
const sliceLength = Columns * Rows;
|
|
426
399
|
const arrayOfSegmentData = getArrayOfSegmentData({
|
|
@@ -450,23 +423,21 @@ function insertOverlappingPixelDataPlanar(_ref8) {
|
|
|
450
423
|
};
|
|
451
424
|
}
|
|
452
425
|
const getArrayOfSegmentData = _ref9 => {
|
|
453
|
-
let
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
segmentsPixelIndices
|
|
469
|
-
} = _ref9;
|
|
426
|
+
let sliceLength = _ref9.sliceLength,
|
|
427
|
+
Rows = _ref9.Rows,
|
|
428
|
+
Columns = _ref9.Columns,
|
|
429
|
+
validOrientations = _ref9.validOrientations,
|
|
430
|
+
metadataProvider = _ref9.metadataProvider,
|
|
431
|
+
imageIdMaps = _ref9.imageIdMaps,
|
|
432
|
+
segmentsOnFrame = _ref9.segmentsOnFrame,
|
|
433
|
+
tolerance = _ref9.tolerance,
|
|
434
|
+
pixelDataChunks = _ref9.pixelDataChunks,
|
|
435
|
+
PerFrameFunctionalGroupsSequence = _ref9.PerFrameFunctionalGroupsSequence,
|
|
436
|
+
labelMapImages = _ref9.labelMapImages,
|
|
437
|
+
sopUIDImageIdIndexMap = _ref9.sopUIDImageIdIndexMap,
|
|
438
|
+
multiframe = _ref9.multiframe,
|
|
439
|
+
sharedImageOrientationPatient = _ref9.sharedImageOrientationPatient,
|
|
440
|
+
segmentsPixelIndices = _ref9.segmentsPixelIndices;
|
|
470
441
|
const arrayOfSegmentData = [];
|
|
471
442
|
const numberOfSegments = multiframe.SegmentSequence.length;
|
|
472
443
|
for (let currentSegmentIndex = 1; currentSegmentIndex <= numberOfSegments; ++currentSegmentIndex) {
|
|
@@ -496,38 +467,35 @@ const getArrayOfSegmentData = _ref9 => {
|
|
|
496
467
|
return arrayOfSegmentData;
|
|
497
468
|
};
|
|
498
469
|
const getSegmentData = _ref10 => {
|
|
499
|
-
let
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
segmentsPixelIndices
|
|
516
|
-
} = _ref10;
|
|
470
|
+
let PerFrameFunctionalGroupsSequence = _ref10.PerFrameFunctionalGroupsSequence,
|
|
471
|
+
labelMapImages = _ref10.labelMapImages,
|
|
472
|
+
sopUIDImageIdIndexMap = _ref10.sopUIDImageIdIndexMap,
|
|
473
|
+
multiframe = _ref10.multiframe,
|
|
474
|
+
segmentIndex = _ref10.segmentIndex,
|
|
475
|
+
sliceLength = _ref10.sliceLength,
|
|
476
|
+
Rows = _ref10.Rows,
|
|
477
|
+
Columns = _ref10.Columns,
|
|
478
|
+
validOrientations = _ref10.validOrientations,
|
|
479
|
+
tolerance = _ref10.tolerance,
|
|
480
|
+
pixelDataChunks = _ref10.pixelDataChunks,
|
|
481
|
+
sharedImageOrientationPatient = _ref10.sharedImageOrientationPatient,
|
|
482
|
+
metadataProvider = _ref10.metadataProvider,
|
|
483
|
+
imageIdMaps = _ref10.imageIdMaps,
|
|
484
|
+
segmentsOnFrame = _ref10.segmentsOnFrame,
|
|
485
|
+
segmentsPixelIndices = _ref10.segmentsPixelIndices;
|
|
517
486
|
const segmentData = [];
|
|
518
487
|
for (let currentLabelMapImageIndex = 0; currentLabelMapImageIndex < labelMapImages.length; currentLabelMapImageIndex++) {
|
|
519
488
|
const currentLabelMapImage = labelMapImages[currentLabelMapImageIndex];
|
|
520
489
|
const referencedImageId = currentLabelMapImage.referencedImageId;
|
|
521
490
|
const PerFrameFunctionalGroupsIndex = PerFrameFunctionalGroupsSequence.findIndex((PerFrameFunctionalGroups, currentSequenceIndex) => {
|
|
522
|
-
const {
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
});
|
|
491
|
+
const _extractInfoFromPerFr = extractInfoFromPerFrameFunctionalGroups({
|
|
492
|
+
PerFrameFunctionalGroups,
|
|
493
|
+
sequenceIndex: currentSequenceIndex,
|
|
494
|
+
sopUIDImageIdIndexMap,
|
|
495
|
+
multiframe
|
|
496
|
+
}),
|
|
497
|
+
groupsSegmentIndex = _extractInfoFromPerFr.segmentIndex,
|
|
498
|
+
groupsReferenceImageId = _extractInfoFromPerFr.referencedImageId;
|
|
531
499
|
const isCorrectPerFrameFunctionalGroup = groupsSegmentIndex === segmentIndex && groupsReferenceImageId === currentLabelMapImage.referencedImageId;
|
|
532
500
|
return isCorrectPerFrameFunctionalGroup;
|
|
533
501
|
});
|
|
@@ -7,19 +7,14 @@ import BaseAdapter3D from './BaseAdapter3D.js';
|
|
|
7
7
|
var _UltrasoundDirectional;
|
|
8
8
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
9
9
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
} = utilities.TID300;
|
|
13
|
-
const {
|
|
14
|
-
worldToImageCoords
|
|
15
|
-
} = utilities$1;
|
|
10
|
+
const TID300Length = utilities.TID300.Length;
|
|
11
|
+
const worldToImageCoords = utilities$1.worldToImageCoords;
|
|
16
12
|
class UltrasoundDirectional extends BaseAdapter3D {
|
|
17
13
|
static getMeasurementData(measurementGroup, sopInstanceUIDToImageIdMap, metadata) {
|
|
18
|
-
const
|
|
19
|
-
state,
|
|
20
|
-
worldCoords,
|
|
21
|
-
ReferencedFrameNumber
|
|
22
|
-
} = MeasurementReport.getSetupMeasurementData(measurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType);
|
|
14
|
+
const _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(measurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType),
|
|
15
|
+
state = _MeasurementReport$ge.state,
|
|
16
|
+
worldCoords = _MeasurementReport$ge.worldCoords,
|
|
17
|
+
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
|
23
18
|
state.annotation.data = _objectSpread(_objectSpread({}, state.annotation.data), {}, {
|
|
24
19
|
handles: _objectSpread(_objectSpread({}, state.annotation.data.handles), {}, {
|
|
25
20
|
points: worldCoords
|
|
@@ -29,18 +24,12 @@ class UltrasoundDirectional extends BaseAdapter3D {
|
|
|
29
24
|
return state;
|
|
30
25
|
}
|
|
31
26
|
static getTID300RepresentationArguments(tool, is3DMeasurement) {
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const {
|
|
39
|
-
handles
|
|
40
|
-
} = data;
|
|
41
|
-
const {
|
|
42
|
-
referencedImageId
|
|
43
|
-
} = metadata;
|
|
27
|
+
const data = tool.data,
|
|
28
|
+
finding = tool.finding,
|
|
29
|
+
findingSites = tool.findingSites,
|
|
30
|
+
metadata = tool.metadata;
|
|
31
|
+
const handles = data.handles;
|
|
32
|
+
const referencedImageId = metadata.referencedImageId;
|
|
44
33
|
if (!referencedImageId) {
|
|
45
34
|
throw new Error('UltrasoundDirectionalTool.getTID300RepresentationArguments: referencedImageId is not defined');
|
|
46
35
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
|
+
|
|
1
3
|
function extractAllNUMGroups(MeasurementGroup, referencedSOPInstanceUID) {
|
|
2
4
|
const numGroupsBySOPInstanceUID = {};
|
|
3
5
|
if (MeasurementGroup.ContentSequence) {
|
|
@@ -40,15 +42,16 @@ function restoreAdditionalMetrics(numGroups) {
|
|
|
40
42
|
radius: 'radiusUnit',
|
|
41
43
|
width: 'widthUnit'
|
|
42
44
|
};
|
|
43
|
-
for (const
|
|
45
|
+
for (const _ref of Object.entries(metricMapping)) {
|
|
46
|
+
var _ref2 = _slicedToArray(_ref, 2);
|
|
47
|
+
const codeMeaning = _ref2[0];
|
|
48
|
+
const metricKey = _ref2[1];
|
|
44
49
|
const group = numGroups[codeMeaning];
|
|
45
50
|
if (!group) {
|
|
46
51
|
continue;
|
|
47
52
|
}
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
unit
|
|
51
|
-
} = group;
|
|
53
|
+
const value = group.value,
|
|
54
|
+
unit = group.unit;
|
|
52
55
|
if (value == null) {
|
|
53
56
|
continue;
|
|
54
57
|
}
|
|
@@ -2,10 +2,8 @@ import checkIfPerpendicular from './checkIfPerpendicular.js';
|
|
|
2
2
|
import { utilities } from '@cornerstonejs/core';
|
|
3
3
|
|
|
4
4
|
function checkOrientation(multiframe, validOrientations, sourceDataDimensions, tolerance) {
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
PerFrameFunctionalGroupsSequence
|
|
8
|
-
} = multiframe;
|
|
5
|
+
const SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
|
|
6
|
+
PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence;
|
|
9
7
|
const sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;
|
|
10
8
|
const PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[0];
|
|
11
9
|
const iop = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import { data, normalizers } from 'dcmjs';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
} = data;
|
|
7
|
-
const {
|
|
8
|
-
Normalizer
|
|
9
|
-
} = normalizers;
|
|
3
|
+
const DicomMessage = data.DicomMessage,
|
|
4
|
+
DicomMetaDictionary = data.DicomMetaDictionary;
|
|
5
|
+
const Normalizer = normalizers.Normalizer;
|
|
10
6
|
function getDatasetsFromImages(images, isMultiframe, options) {
|
|
11
7
|
const datasets = [];
|
|
12
8
|
if (isMultiframe) {
|
|
@@ -1,26 +1,18 @@
|
|
|
1
1
|
import { utilities } from '@cornerstonejs/core';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
imageToWorldCoords
|
|
5
|
-
} = utilities;
|
|
3
|
+
const imageToWorldCoords = utilities.imageToWorldCoords;
|
|
6
4
|
function scoordToWorld(_ref, scoord) {
|
|
7
|
-
let
|
|
8
|
-
|
|
9
|
-
referencedImageId
|
|
10
|
-
} = _ref;
|
|
5
|
+
let is3DMeasurement = _ref.is3DMeasurement,
|
|
6
|
+
referencedImageId = _ref.referencedImageId;
|
|
11
7
|
const worldCoords = [];
|
|
12
8
|
if (is3DMeasurement) {
|
|
13
|
-
const
|
|
14
|
-
GraphicData
|
|
15
|
-
} = scoord;
|
|
9
|
+
const GraphicData = scoord.GraphicData;
|
|
16
10
|
for (let i = 0; i < GraphicData.length; i += 3) {
|
|
17
11
|
const point = [GraphicData[i], GraphicData[i + 1], GraphicData[i + 2]];
|
|
18
12
|
worldCoords.push(point);
|
|
19
13
|
}
|
|
20
14
|
} else {
|
|
21
|
-
const
|
|
22
|
-
GraphicData
|
|
23
|
-
} = scoord;
|
|
15
|
+
const GraphicData = scoord.GraphicData;
|
|
24
16
|
for (let i = 0; i < GraphicData.length; i += 2) {
|
|
25
17
|
const point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
|
|
26
18
|
worldCoords.push(point);
|
|
@@ -3,9 +3,7 @@ function toPoint3(flatPoints) {
|
|
|
3
3
|
if (!(flatPoints !== null && flatPoints !== void 0 && flatPoints.length)) {
|
|
4
4
|
return points;
|
|
5
5
|
}
|
|
6
|
-
const
|
|
7
|
-
length: n
|
|
8
|
-
} = flatPoints;
|
|
6
|
+
const n = flatPoints.length;
|
|
9
7
|
if (n % 3 !== 0) {
|
|
10
8
|
throw new Error("Points array should be divisible by 3 for SCOORD3D, but contents are: ".concat(JSON.stringify(flatPoints), " of length ").concat(n));
|
|
11
9
|
}
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import { utilities } from '@cornerstonejs/core';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
worldToImageCoords: globalWorldToImageCoords
|
|
5
|
-
} = utilities;
|
|
3
|
+
const globalWorldToImageCoords = utilities.worldToImageCoords;
|
|
6
4
|
let useWorldToImageCoords = globalWorldToImageCoords;
|
|
7
5
|
function toScoord(_ref, point) {
|
|
8
|
-
let
|
|
9
|
-
|
|
10
|
-
referencedImageId
|
|
11
|
-
} = _ref;
|
|
6
|
+
let is3DMeasurement = _ref.is3DMeasurement,
|
|
7
|
+
referencedImageId = _ref.referencedImageId;
|
|
12
8
|
if (is3DMeasurement) {
|
|
13
9
|
return {
|
|
14
10
|
x: point[0],
|
|
@@ -3,8 +3,9 @@ import { Cornerstone3DSR, Cornerstone3DSEG, Cornerstone3DPMAP, Cornerstone3DRT }
|
|
|
3
3
|
export { NO_IMAGE_ID } from './Cornerstone3D/constants/index.js';
|
|
4
4
|
import { VTKjsSEG } from './VTKjs/index.js';
|
|
5
5
|
import './enums/Events.js';
|
|
6
|
-
import '
|
|
7
|
-
import '
|
|
6
|
+
import './helpers/downloadDICOMData.js';
|
|
7
|
+
import './helpers/toScoordType.js';
|
|
8
|
+
import './helpers/scoordToWorld.js';
|
|
8
9
|
|
|
9
10
|
const adaptersSR = {
|
|
10
11
|
Cornerstone: CornerstoneSR,
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
1
2
|
import { Enums, metaData } from '@cornerstonejs/core';
|
|
2
3
|
|
|
3
|
-
const
|
|
4
|
-
MetadataModules
|
|
5
|
-
} = Enums;
|
|
4
|
+
const MetadataModules = Enums.MetadataModules;
|
|
6
5
|
function assignDefined(dest, source, options) {
|
|
7
6
|
if (!source) {
|
|
8
7
|
return;
|
|
9
8
|
}
|
|
10
|
-
for (const
|
|
9
|
+
for (const _ref of Object.entries(source)) {
|
|
10
|
+
var _ref2 = _slicedToArray(_ref, 2);
|
|
11
|
+
const key = _ref2[0];
|
|
12
|
+
const value = _ref2[1];
|
|
11
13
|
if (value === undefined) {
|
|
12
14
|
continue;
|
|
13
15
|
}
|
|
@@ -18,10 +20,9 @@ function assignDefined(dest, source, options) {
|
|
|
18
20
|
}
|
|
19
21
|
}
|
|
20
22
|
function createInstance(instanceKey, studyExemplarImageId, base, options) {
|
|
21
|
-
const
|
|
22
|
-
metadataProvider = metaData,
|
|
23
|
-
predecessorImageId
|
|
24
|
-
} = options;
|
|
23
|
+
const _options$metadataProv = options.metadataProvider,
|
|
24
|
+
metadataProvider = _options$metadataProv === void 0 ? metaData : _options$metadataProv,
|
|
25
|
+
predecessorImageId = options.predecessorImageId;
|
|
25
26
|
const result = {};
|
|
26
27
|
const instanceBase = metadataProvider.get(instanceKey, studyExemplarImageId);
|
|
27
28
|
Object.assign(result, instanceBase);
|
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
|
-
import {
|
|
2
|
+
import { Enums, metaData } from '@cornerstonejs/core';
|
|
3
3
|
import dcmjs from 'dcmjs';
|
|
4
4
|
import { metaRTSSContour, metaSRAnnotation } from '../adapters/Cornerstone3D/constants/index.js';
|
|
5
5
|
|
|
6
6
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
7
7
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
} = dcmjs.data;
|
|
11
|
-
const {
|
|
12
|
-
MetadataModules
|
|
13
|
-
} = Enums;
|
|
8
|
+
const DicomMetaDictionary = dcmjs.data.DicomMetaDictionary;
|
|
9
|
+
const MetadataModules = Enums.MetadataModules;
|
|
14
10
|
const STUDY_MODULES = [MetadataModules.GENERAL_STUDY, MetadataModules.PATIENT_STUDY, MetadataModules.PATIENT];
|
|
15
11
|
const SERIES_MODULES = [MetadataModules.GENERAL_SERIES];
|
|
16
12
|
const IMAGE_MODULES = [MetadataModules.GENERAL_IMAGE, MetadataModules.IMAGE_PLANE, MetadataModules.CINE, MetadataModules.VOI_LUT, MetadataModules.MODALITY_LUT, MetadataModules.SOP_COMMON];
|
|
@@ -21,12 +17,10 @@ const metadataProvider = {
|
|
|
21
17
|
},
|
|
22
18
|
[MetadataModules.IMAGE_SOP_INSTANCE_REFERENCE]: function (imageId) {
|
|
23
19
|
const frameModule = metaData.get(MetadataModules.FRAME_MODULE, imageId);
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
numberOfFrames
|
|
29
|
-
} = frameModule;
|
|
20
|
+
const sopClassUID = frameModule.sopClassUID,
|
|
21
|
+
sopInstanceUID = frameModule.sopInstanceUID,
|
|
22
|
+
frameNumber = frameModule.frameNumber,
|
|
23
|
+
numberOfFrames = frameModule.numberOfFrames;
|
|
30
24
|
if (numberOfFrames > 1) {
|
|
31
25
|
return {
|
|
32
26
|
ReferencedSOPClassUID: sopClassUID,
|