@cornerstonejs/adapters 5.0.0-beta.1 → 5.0.1
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 +23 -16
- package/dist/esm/adapters/Cornerstone/ArrowAnnotate.js +14 -19
- package/dist/esm/adapters/Cornerstone/Bidirectional.js +22 -27
- package/dist/esm/adapters/Cornerstone/CircleRoi.js +21 -27
- package/dist/esm/adapters/Cornerstone/CobbAngle.js +23 -16
- package/dist/esm/adapters/Cornerstone/EllipticalRoi.js +20 -26
- package/dist/esm/adapters/Cornerstone/FreehandRoi.js +22 -26
- package/dist/esm/adapters/Cornerstone/Length.js +19 -16
- package/dist/esm/adapters/Cornerstone/MeasurementReport.js +20 -40
- package/dist/esm/adapters/Cornerstone/ParametricMap.js +27 -38
- package/dist/esm/adapters/Cornerstone/RectangleRoi.js +27 -26
- package/dist/esm/adapters/Cornerstone/Segmentation_3X.js +19 -31
- package/dist/esm/adapters/Cornerstone/Segmentation_4X.js +69 -90
- package/dist/esm/adapters/Cornerstone/index.d.ts +11 -11
- package/dist/esm/adapters/Cornerstone3D/Angle.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/Angle.js +19 -26
- package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.js +24 -38
- package/dist/esm/adapters/Cornerstone3D/BaseAdapter3D.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/BaseAdapter3D.js +20 -31
- package/dist/esm/adapters/Cornerstone3D/Bidirectional.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/Bidirectional.js +27 -39
- package/dist/esm/adapters/Cornerstone3D/CircleROI.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/CircleROI.js +29 -37
- package/dist/esm/adapters/Cornerstone3D/CobbAngle.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/CobbAngle.js +27 -30
- package/dist/esm/adapters/Cornerstone3D/ControlPointPolyline.d.ts +5 -0
- package/dist/esm/adapters/Cornerstone3D/ControlPointPolyline.js +85 -0
- package/dist/esm/adapters/Cornerstone3D/EllipticalROI.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/EllipticalROI.js +27 -35
- package/dist/esm/adapters/Cornerstone3D/KeyImage.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/KeyImage.js +5 -11
- package/dist/esm/adapters/Cornerstone3D/LabelData.d.ts +3 -1
- package/dist/esm/adapters/Cornerstone3D/LabelData.js +41 -33
- package/dist/esm/adapters/Cornerstone3D/Length.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/Length.js +21 -29
- package/dist/esm/adapters/Cornerstone3D/MeasurementReport.d.ts +2 -1
- package/dist/esm/adapters/Cornerstone3D/MeasurementReport.js +108 -120
- package/dist/esm/adapters/Cornerstone3D/ParametricMap/generateToolState.js +2 -6
- package/dist/esm/adapters/Cornerstone3D/PlanarFreehandROI.d.ts +11 -1
- package/dist/esm/adapters/Cornerstone3D/PlanarFreehandROI.js +58 -44
- package/dist/esm/adapters/Cornerstone3D/Probe.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/Probe.js +21 -32
- package/dist/esm/adapters/Cornerstone3D/RTStruct/RTSS.js +14 -30
- package/dist/esm/adapters/Cornerstone3D/RTStruct/index.d.ts +2 -2
- 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 +30 -32
- package/dist/esm/adapters/Cornerstone3D/Segmentation/compactMergeSegData.d.ts +1 -1
- 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 +6 -16
- package/dist/esm/adapters/Cornerstone3D/Segmentation/generateToolState.js +3 -4
- package/dist/esm/adapters/Cornerstone3D/Segmentation/index.d.ts +4 -4
- package/dist/esm/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.d.ts +2 -2
- package/dist/esm/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.js +147 -179
- package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.js +15 -26
- package/dist/esm/adapters/Cornerstone3D/constants/index.d.ts +10 -0
- package/dist/esm/adapters/Cornerstone3D/constants/index.js +12 -2
- package/dist/esm/adapters/Cornerstone3D/metricHandler.js +57 -24
- package/dist/esm/adapters/Cornerstone3D/unitMapper.d.ts +5 -0
- package/dist/esm/adapters/Cornerstone3D/unitMapper.js +16 -0
- package/dist/esm/adapters/VTKjs/Segmentation.js +2 -4
- package/dist/esm/adapters/VTKjs/index.d.ts +1 -1
- package/dist/esm/adapters/enums/index.d.ts +1 -1
- package/dist/esm/adapters/helpers/checkOrientation.js +5 -7
- package/dist/esm/adapters/helpers/downloadDICOMData.js +1 -3
- package/dist/esm/adapters/helpers/getDatasetsFromImages.js +3 -7
- package/dist/esm/adapters/helpers/index.d.ts +9 -9
- package/dist/esm/adapters/helpers/scoordToWorld.d.ts +1 -1
- package/dist/esm/adapters/helpers/scoordToWorld.js +5 -13
- package/dist/esm/adapters/helpers/toPoint3.d.ts +1 -1
- package/dist/esm/adapters/helpers/toPoint3.js +1 -3
- package/dist/esm/adapters/helpers/toScoordType.d.ts +1 -1
- package/dist/esm/adapters/helpers/toScoordType.js +3 -7
- package/dist/esm/adapters/index.d.ts +4 -4
- package/dist/esm/adapters/index.js +3 -2
- package/dist/esm/utilities/createInstance.js +9 -8
- package/dist/esm/utilities/referencedMetadataProvider.d.ts +3 -4
- package/dist/esm/utilities/referencedMetadataProvider.js +8 -14
- package/dist/esm/version.d.ts +1 -1
- package/package.json +13 -9
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/defineProperty.js +0 -12
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +0 -14
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +0 -9
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/typeof.js +0 -11
|
@@ -1,31 +1,24 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
|
+
import { utilities, data, normalizers, derivations, log } from 'dcmjs';
|
|
2
3
|
import ndarray from 'ndarray';
|
|
3
4
|
import getDatasetsFromImages from '../helpers/getDatasetsFromImages.js';
|
|
4
5
|
import checkOrientation from '../helpers/checkOrientation.js';
|
|
5
6
|
import { utilities as utilities$1 } from '@cornerstonejs/core';
|
|
6
7
|
import { Events } from '../enums/Events.js';
|
|
7
8
|
|
|
8
|
-
const
|
|
9
|
-
rotateDirectionCosinesInPlane,
|
|
10
|
-
flipImageOrientationPatient
|
|
11
|
-
flipMatrix2D,
|
|
12
|
-
rotateMatrix902D
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
} = normalizers;
|
|
22
|
-
const {
|
|
23
|
-
Segmentation: SegmentationDerivation
|
|
24
|
-
} = derivations;
|
|
25
|
-
const {
|
|
26
|
-
encode,
|
|
27
|
-
decode
|
|
28
|
-
} = utilities.compression;
|
|
9
|
+
const _utilities$orientatio = utilities.orientation,
|
|
10
|
+
rotateDirectionCosinesInPlane = _utilities$orientatio.rotateDirectionCosinesInPlane,
|
|
11
|
+
flipIOP = _utilities$orientatio.flipImageOrientationPatient,
|
|
12
|
+
flipMatrix2D = _utilities$orientatio.flipMatrix2D,
|
|
13
|
+
rotateMatrix902D = _utilities$orientatio.rotateMatrix902D;
|
|
14
|
+
const BitArray = data.BitArray,
|
|
15
|
+
DicomMessage = data.DicomMessage,
|
|
16
|
+
DicomMetaDictionary = data.DicomMetaDictionary;
|
|
17
|
+
const Normalizer = normalizers.Normalizer;
|
|
18
|
+
const SegmentationDerivation = derivations.Segmentation;
|
|
19
|
+
const _utilities$compressio = utilities.compression,
|
|
20
|
+
encode = _utilities$compressio.encode,
|
|
21
|
+
decode = _utilities$compressio.decode;
|
|
29
22
|
|
|
30
23
|
/**
|
|
31
24
|
*
|
|
@@ -75,10 +68,8 @@ function fillSegmentation(segmentation, inputLabelmaps3D) {
|
|
|
75
68
|
const referencedFramesPerLabelmap = [];
|
|
76
69
|
for (let labelmapIndex = 0; labelmapIndex < labelmaps3D.length; labelmapIndex++) {
|
|
77
70
|
const labelmap3D = labelmaps3D[labelmapIndex];
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
metadata
|
|
81
|
-
} = labelmap3D;
|
|
71
|
+
const labelmaps2D = labelmap3D.labelmaps2D,
|
|
72
|
+
metadata = labelmap3D.metadata;
|
|
82
73
|
const referencedFramesPerSegment = [];
|
|
83
74
|
for (let i = 1; i < metadata.length; i++) {
|
|
84
75
|
if (metadata[i]) {
|
|
@@ -88,9 +79,7 @@ function fillSegmentation(segmentation, inputLabelmaps3D) {
|
|
|
88
79
|
for (let i = 0; i < labelmaps2D.length; i++) {
|
|
89
80
|
const labelmap2D = labelmaps2D[i];
|
|
90
81
|
if (labelmaps2D[i]) {
|
|
91
|
-
const
|
|
92
|
-
segmentsOnLabelmap
|
|
93
|
-
} = labelmap2D;
|
|
82
|
+
const segmentsOnLabelmap = labelmap2D.segmentsOnLabelmap;
|
|
94
83
|
segmentsOnLabelmap.forEach(segmentIndex => {
|
|
95
84
|
if (segmentIndex !== 0) {
|
|
96
85
|
referencedFramesPerSegment[segmentIndex].push(i);
|
|
@@ -105,9 +94,7 @@ function fillSegmentation(segmentation, inputLabelmaps3D) {
|
|
|
105
94
|
for (let labelmapIndex = 0; labelmapIndex < labelmaps3D.length; labelmapIndex++) {
|
|
106
95
|
const referencedFramesPerSegment = referencedFramesPerLabelmap[labelmapIndex];
|
|
107
96
|
const labelmap3D = labelmaps3D[labelmapIndex];
|
|
108
|
-
const
|
|
109
|
-
metadata
|
|
110
|
-
} = labelmap3D;
|
|
97
|
+
const metadata = labelmap3D.metadata;
|
|
111
98
|
for (let segmentIndex = 1; segmentIndex < referencedFramesPerSegment.length; segmentIndex++) {
|
|
112
99
|
const referencedFrameIndicies = referencedFramesPerSegment[segmentIndex];
|
|
113
100
|
if (referencedFrameIndicies) {
|
|
@@ -149,9 +136,7 @@ function fillSegmentation(segmentation, inputLabelmaps3D) {
|
|
|
149
136
|
return segmentation;
|
|
150
137
|
}
|
|
151
138
|
function _getLabelmapsFromReferencedFrameIndicies(labelmap3D, referencedFrameIndicies) {
|
|
152
|
-
const
|
|
153
|
-
labelmaps2D
|
|
154
|
-
} = labelmap3D;
|
|
139
|
+
const labelmaps2D = labelmap3D.labelmaps2D;
|
|
155
140
|
const labelmaps = [];
|
|
156
141
|
for (let i = 0; i < referencedFrameIndicies.length; i++) {
|
|
157
142
|
const frame = referencedFrameIndicies[i];
|
|
@@ -188,14 +173,18 @@ function _createSegFromImages(images, isMultiframe, options) {
|
|
|
188
173
|
* (available only for the overlapping case).
|
|
189
174
|
*/
|
|
190
175
|
async function generateToolState(referencedImageIds, arrayBuffer, metadataProvider, options) {
|
|
191
|
-
const
|
|
192
|
-
skipOverlapping = false,
|
|
193
|
-
tolerance =
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
176
|
+
const _options$skipOverlapp = options.skipOverlapping,
|
|
177
|
+
skipOverlapping = _options$skipOverlapp === void 0 ? false : _options$skipOverlapp,
|
|
178
|
+
_options$tolerance = options.tolerance,
|
|
179
|
+
tolerance = _options$tolerance === void 0 ? 1e-3 : _options$tolerance,
|
|
180
|
+
_options$TypedArrayCo = options.TypedArrayConstructor,
|
|
181
|
+
TypedArrayConstructor = _options$TypedArrayCo === void 0 ? Uint8Array : _options$TypedArrayCo,
|
|
182
|
+
_options$maxBytesPerC = options.maxBytesPerChunk,
|
|
183
|
+
maxBytesPerChunk = _options$maxBytesPerC === void 0 ? 199000000 : _options$maxBytesPerC,
|
|
184
|
+
_options$eventTarget = options.eventTarget,
|
|
185
|
+
eventTarget = _options$eventTarget === void 0 ? null : _options$eventTarget,
|
|
186
|
+
_options$triggerEvent = options.triggerEvent,
|
|
187
|
+
triggerEvent = _options$triggerEvent === void 0 ? null : _options$triggerEvent;
|
|
199
188
|
const dicomData = DicomMessage.readFile(arrayBuffer);
|
|
200
189
|
const dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);
|
|
201
190
|
dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);
|
|
@@ -239,9 +228,8 @@ async function generateToolState(referencedImageIds, arrayBuffer, metadataProvid
|
|
|
239
228
|
// we don't have to call metadataProvider.get() for each imageId over
|
|
240
229
|
// and over again.
|
|
241
230
|
const sopUIDImageIdIndexMap = referencedImageIds.reduce((acc, imageId) => {
|
|
242
|
-
const
|
|
243
|
-
sopInstanceUID
|
|
244
|
-
} = metadataProvider.get('generalImageModule', imageId);
|
|
231
|
+
const _metadataProvider$get = metadataProvider.get('generalImageModule', imageId),
|
|
232
|
+
sopInstanceUID = _metadataProvider$get.sopInstanceUID;
|
|
245
233
|
acc[sopInstanceUID] = imageId;
|
|
246
234
|
return acc;
|
|
247
235
|
}, {});
|
|
@@ -499,12 +487,10 @@ function findReferenceSourceImageId(multiframe, frameSegment, imageIds, metadata
|
|
|
499
487
|
if (!multiframe) {
|
|
500
488
|
return imageId;
|
|
501
489
|
}
|
|
502
|
-
const
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
ReferencedSeriesSequence
|
|
507
|
-
} = multiframe;
|
|
490
|
+
const FrameOfReferenceUID = multiframe.FrameOfReferenceUID,
|
|
491
|
+
PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
|
|
492
|
+
SourceImageSequence = multiframe.SourceImageSequence,
|
|
493
|
+
ReferencedSeriesSequence = multiframe.ReferencedSeriesSequence;
|
|
508
494
|
if (!PerFrameFunctionalGroupsSequence || PerFrameFunctionalGroupsSequence.length === 0) {
|
|
509
495
|
return imageId;
|
|
510
496
|
}
|
|
@@ -553,13 +539,11 @@ function findReferenceSourceImageId(multiframe, frameSegment, imageIds, metadata
|
|
|
553
539
|
*/
|
|
554
540
|
|
|
555
541
|
function checkSEGsOverlapping(pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance, TypedArrayConstructor, sopUIDImageIdIndexMap) {
|
|
556
|
-
const
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
Columns
|
|
562
|
-
} = multiframe;
|
|
542
|
+
const SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
|
|
543
|
+
PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
|
|
544
|
+
SegmentSequence = multiframe.SegmentSequence,
|
|
545
|
+
Rows = multiframe.Rows,
|
|
546
|
+
Columns = multiframe.Columns;
|
|
563
547
|
let numberOfSegs = SegmentSequence.length;
|
|
564
548
|
if (numberOfSegs < 2) {
|
|
565
549
|
return false;
|
|
@@ -597,7 +581,9 @@ function checkSEGsOverlapping(pixelData, multiframe, imageIds, validOrientations
|
|
|
597
581
|
frameSegmentsMapping.set(imageIdIndex, [frameSegment]);
|
|
598
582
|
}
|
|
599
583
|
}
|
|
600
|
-
for (let
|
|
584
|
+
for (let _ref of frameSegmentsMapping.entries()) {
|
|
585
|
+
var _ref2 = _slicedToArray(_ref, 2);
|
|
586
|
+
let role = _ref2[1];
|
|
601
587
|
let temp2DArray = new TypedArrayConstructor(sliceLength).fill(0);
|
|
602
588
|
for (let i = 0; i < role.length; ++i) {
|
|
603
589
|
const frameSegment = role[i];
|
|
@@ -624,12 +610,10 @@ function checkSEGsOverlapping(pixelData, multiframe, imageIds, validOrientations
|
|
|
624
610
|
return false;
|
|
625
611
|
}
|
|
626
612
|
function insertOverlappingPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray, labelmapBufferArray, pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance, TypedArrayConstructor, segmentsPixelIndices, sopUIDImageIdIndexMap) {
|
|
627
|
-
const
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
Columns
|
|
632
|
-
} = multiframe;
|
|
613
|
+
const SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
|
|
614
|
+
PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
|
|
615
|
+
Rows = multiframe.Rows,
|
|
616
|
+
Columns = multiframe.Columns;
|
|
633
617
|
const sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;
|
|
634
618
|
const sliceLength = Columns * Rows;
|
|
635
619
|
const arrayBufferLength = sliceLength * imageIds.length * TypedArrayConstructor.BYTES_PER_ELEMENT;
|
|
@@ -728,20 +712,16 @@ function insertOverlappingPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray,
|
|
|
728
712
|
}
|
|
729
713
|
}
|
|
730
714
|
const getSegmentIndex = (multiframe, frame) => {
|
|
731
|
-
const
|
|
732
|
-
|
|
733
|
-
SharedFunctionalGroupsSequence
|
|
734
|
-
} = multiframe;
|
|
715
|
+
const PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
|
|
716
|
+
SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence;
|
|
735
717
|
const PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[frame];
|
|
736
718
|
return PerFrameFunctionalGroups && PerFrameFunctionalGroups.SegmentIdentificationSequence ? PerFrameFunctionalGroups.SegmentIdentificationSequence.ReferencedSegmentNumber : SharedFunctionalGroupsSequence.SegmentIdentificationSequence ? SharedFunctionalGroupsSequence.SegmentIdentificationSequence.ReferencedSegmentNumber : undefined;
|
|
737
719
|
};
|
|
738
720
|
function insertPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray, labelmapBufferArray, pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance, TypedArrayConstructor, segmentsPixelIndices, sopUIDImageIdIndexMap, imageIdMaps, eventTarget, triggerEvent) {
|
|
739
|
-
const
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
Columns
|
|
744
|
-
} = multiframe;
|
|
721
|
+
const SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
|
|
722
|
+
PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
|
|
723
|
+
Rows = multiframe.Rows,
|
|
724
|
+
Columns = multiframe.Columns;
|
|
745
725
|
const sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;
|
|
746
726
|
const sliceLength = Columns * Rows;
|
|
747
727
|
let i = 0;
|
|
@@ -901,10 +881,8 @@ function getUnpackedChunks(data, maxBytesPerChunk) {
|
|
|
901
881
|
* @return {String} The corresponding imageId.
|
|
902
882
|
*/
|
|
903
883
|
function getImageIdOfSourceImageBySourceImageSequence(SourceImageSequence, sopUIDImageIdIndexMap) {
|
|
904
|
-
const
|
|
905
|
-
|
|
906
|
-
ReferencedFrameNumber
|
|
907
|
-
} = SourceImageSequence;
|
|
884
|
+
const ReferencedSOPInstanceUID = SourceImageSequence.ReferencedSOPInstanceUID,
|
|
885
|
+
ReferencedFrameNumber = SourceImageSequence.ReferencedFrameNumber;
|
|
908
886
|
const baseImageId = sopUIDImageIdIndexMap[ReferencedSOPInstanceUID];
|
|
909
887
|
if (!baseImageId) {
|
|
910
888
|
console.warn("No imageId found for SOPInstanceUID: ".concat(ReferencedSOPInstanceUID));
|
|
@@ -970,8 +948,8 @@ function getImageIdOfSourceImagebyGeometry(ReferencedSeriesInstanceUID, FrameOfR
|
|
|
970
948
|
|
|
971
949
|
// For multiframe images, check each frame's position
|
|
972
950
|
if (isMultiframe) {
|
|
973
|
-
var _metadataProvider$
|
|
974
|
-
const framePosition = (_metadataProvider$
|
|
951
|
+
var _metadataProvider$get2;
|
|
952
|
+
const framePosition = (_metadataProvider$get2 = metadataProvider.get('imagePlaneModule', imageId)) === null || _metadataProvider$get2 === void 0 ? void 0 : _metadataProvider$get2.imagePositionPatient;
|
|
975
953
|
if (framePosition && utilities$1.isEqual(segFramePosition, framePosition, tolerance)) {
|
|
976
954
|
return imageId;
|
|
977
955
|
}
|
|
@@ -1134,7 +1112,10 @@ function calculateCentroid(imageIdIndexBufferIndex, multiframe, metadataProvider
|
|
|
1134
1112
|
let worldYAcc = 0;
|
|
1135
1113
|
let worldZAcc = 0;
|
|
1136
1114
|
let count = 0;
|
|
1137
|
-
for (const
|
|
1115
|
+
for (const _ref3 of Object.entries(imageIdIndexBufferIndex)) {
|
|
1116
|
+
var _ref4 = _slicedToArray(_ref3, 2);
|
|
1117
|
+
const imageIdIndex = _ref4[0];
|
|
1118
|
+
const bufferIndices = _ref4[1];
|
|
1138
1119
|
const z = Number(imageIdIndex);
|
|
1139
1120
|
if (!bufferIndices || bufferIndices.length === 0) {
|
|
1140
1121
|
continue;
|
|
@@ -1147,13 +1128,11 @@ function calculateCentroid(imageIdIndexBufferIndex, multiframe, metadataProvider
|
|
|
1147
1128
|
console.debug('Missing imagePlaneModule metadata for centroid calculation');
|
|
1148
1129
|
continue;
|
|
1149
1130
|
}
|
|
1150
|
-
const
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
columnPixelSpacing
|
|
1156
|
-
} = imagePlaneModule;
|
|
1131
|
+
const imagePositionPatient = imagePlaneModule.imagePositionPatient,
|
|
1132
|
+
rowCosines = imagePlaneModule.rowCosines,
|
|
1133
|
+
columnCosines = imagePlaneModule.columnCosines,
|
|
1134
|
+
rowPixelSpacing = imagePlaneModule.rowPixelSpacing,
|
|
1135
|
+
columnPixelSpacing = imagePlaneModule.columnPixelSpacing;
|
|
1157
1136
|
for (const bufferIndex of bufferIndices) {
|
|
1158
1137
|
const y = Math.floor(bufferIndex / multiframe.Rows);
|
|
1159
1138
|
const x = bufferIndex % multiframe.Rows;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import MeasurementReport from
|
|
2
|
-
import Length from
|
|
3
|
-
import FreehandRoi from
|
|
4
|
-
import Bidirectional from
|
|
5
|
-
import EllipticalRoi from
|
|
6
|
-
import CircleRoi from
|
|
7
|
-
import ArrowAnnotate from
|
|
8
|
-
import CobbAngle from
|
|
9
|
-
import Angle from
|
|
10
|
-
import RectangleRoi from
|
|
11
|
-
import * as Segmentation from
|
|
1
|
+
import MeasurementReport from './MeasurementReport';
|
|
2
|
+
import Length from './Length';
|
|
3
|
+
import FreehandRoi from './FreehandRoi';
|
|
4
|
+
import Bidirectional from './Bidirectional';
|
|
5
|
+
import EllipticalRoi from './EllipticalRoi';
|
|
6
|
+
import CircleRoi from './CircleRoi';
|
|
7
|
+
import ArrowAnnotate from './ArrowAnnotate';
|
|
8
|
+
import CobbAngle from './CobbAngle';
|
|
9
|
+
import Angle from './Angle';
|
|
10
|
+
import RectangleRoi from './RectangleRoi';
|
|
11
|
+
import * as Segmentation from './Segmentation';
|
|
12
12
|
declare const CornerstoneSR: {
|
|
13
13
|
Length: typeof Length;
|
|
14
14
|
FreehandRoi: typeof FreehandRoi;
|
|
@@ -1,25 +1,23 @@
|
|
|
1
|
-
import _defineProperty from '
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
2
|
import { utilities } from 'dcmjs';
|
|
3
3
|
import MeasurementReport from './MeasurementReport.js';
|
|
4
4
|
import BaseAdapter3D from './BaseAdapter3D.js';
|
|
5
|
+
import '../helpers/downloadDICOMData.js';
|
|
5
6
|
import { toScoord } from '../helpers/toScoordType.js';
|
|
6
|
-
import '
|
|
7
|
+
import '../helpers/scoordToWorld.js';
|
|
7
8
|
|
|
8
9
|
var _Angle;
|
|
9
10
|
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; }
|
|
10
11
|
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; }
|
|
11
|
-
const
|
|
12
|
-
CobbAngle: TID300CobbAngle
|
|
13
|
-
} = utilities.TID300;
|
|
12
|
+
const TID300CobbAngle = utilities.TID300.CobbAngle;
|
|
14
13
|
class Angle extends BaseAdapter3D {
|
|
15
14
|
static getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata) {
|
|
16
|
-
const
|
|
17
|
-
state,
|
|
18
|
-
NUMGroup,
|
|
19
|
-
worldCoords,
|
|
20
|
-
referencedImageId,
|
|
21
|
-
ReferencedFrameNumber
|
|
22
|
-
} = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType);
|
|
15
|
+
const _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType),
|
|
16
|
+
state = _MeasurementReport$ge.state,
|
|
17
|
+
NUMGroup = _MeasurementReport$ge.NUMGroup,
|
|
18
|
+
worldCoords = _MeasurementReport$ge.worldCoords,
|
|
19
|
+
referencedImageId = _MeasurementReport$ge.referencedImageId,
|
|
20
|
+
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
|
23
21
|
const cachedStats = referencedImageId ? {
|
|
24
22
|
["imageId:".concat(referencedImageId)]: {
|
|
25
23
|
angle: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : null
|
|
@@ -37,19 +35,14 @@ class Angle extends BaseAdapter3D {
|
|
|
37
35
|
static getTID300RepresentationArguments(tool) {
|
|
38
36
|
var _cachedStats;
|
|
39
37
|
let is3DMeasurement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
handles
|
|
49
|
-
} = data;
|
|
50
|
-
const {
|
|
51
|
-
referencedImageId
|
|
52
|
-
} = metadata;
|
|
38
|
+
const data = tool.data,
|
|
39
|
+
finding = tool.finding,
|
|
40
|
+
findingSites = tool.findingSites,
|
|
41
|
+
metadata = tool.metadata;
|
|
42
|
+
const _data$cachedStats = data.cachedStats,
|
|
43
|
+
cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
|
|
44
|
+
handles = data.handles;
|
|
45
|
+
const referencedImageId = metadata.referencedImageId;
|
|
53
46
|
const scoordProps = {
|
|
54
47
|
is3DMeasurement,
|
|
55
48
|
referencedImageId
|
|
@@ -75,7 +68,7 @@ class Angle extends BaseAdapter3D {
|
|
|
75
68
|
}
|
|
76
69
|
_Angle = Angle;
|
|
77
70
|
(() => {
|
|
78
|
-
_Angle.init(
|
|
71
|
+
_Angle.init('Angle', TID300CobbAngle);
|
|
79
72
|
_Angle.registerLegacy();
|
|
80
73
|
})();
|
|
81
74
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import BaseAdapter3D from
|
|
1
|
+
import BaseAdapter3D from './BaseAdapter3D';
|
|
2
2
|
declare class ArrowAnnotate extends BaseAdapter3D {
|
|
3
3
|
static getMeasurementData(MeasurementGroup: any, sopInstanceUIDToImageIdMap: any, metadata: any, _trackingIdentifier: any): {
|
|
4
4
|
description?: string;
|
|
@@ -1,44 +1,37 @@
|
|
|
1
|
-
import _defineProperty from '
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
2
|
import { utilities } from 'dcmjs';
|
|
3
3
|
import { utilities as utilities$1 } from '@cornerstonejs/core';
|
|
4
4
|
import MeasurementReport from './MeasurementReport.js';
|
|
5
5
|
import BaseAdapter3D from './BaseAdapter3D.js';
|
|
6
|
+
import '../helpers/downloadDICOMData.js';
|
|
6
7
|
import { toScoord } from '../helpers/toScoordType.js';
|
|
8
|
+
import '../helpers/scoordToWorld.js';
|
|
7
9
|
|
|
8
10
|
var _ArrowAnnotate;
|
|
9
11
|
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; }
|
|
10
12
|
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; }
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
} = utilities.TID300;
|
|
14
|
-
const {
|
|
15
|
-
imageToWorldCoords
|
|
16
|
-
} = utilities$1;
|
|
13
|
+
const TID300ArrowAnnotate = utilities.TID300.ArrowAnnotate;
|
|
14
|
+
const imageToWorldCoords = utilities$1.imageToWorldCoords;
|
|
17
15
|
class ArrowAnnotate extends BaseAdapter3D {
|
|
18
16
|
static getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, _trackingIdentifier) {
|
|
19
|
-
const
|
|
20
|
-
state,
|
|
21
|
-
SCOORDGroup,
|
|
22
|
-
worldCoords,
|
|
23
|
-
referencedImageId,
|
|
24
|
-
ReferencedFrameNumber
|
|
25
|
-
} = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType);
|
|
17
|
+
const _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType),
|
|
18
|
+
state = _MeasurementReport$ge.state,
|
|
19
|
+
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
|
|
20
|
+
worldCoords = _MeasurementReport$ge.worldCoords,
|
|
21
|
+
referencedImageId = _MeasurementReport$ge.referencedImageId,
|
|
22
|
+
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
|
26
23
|
const text = state.annotation.data.label;
|
|
27
24
|
if (worldCoords.length === 1 && SCOORDGroup) {
|
|
28
|
-
const imagePixelModule = metadata.get(
|
|
25
|
+
const imagePixelModule = metadata.get('imagePixelModule', referencedImageId);
|
|
29
26
|
let xOffset = 10;
|
|
30
27
|
let yOffset = 10;
|
|
31
28
|
if (imagePixelModule) {
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
rows
|
|
35
|
-
} = imagePixelModule;
|
|
29
|
+
const columns = imagePixelModule.columns,
|
|
30
|
+
rows = imagePixelModule.rows;
|
|
36
31
|
xOffset = columns / 10;
|
|
37
32
|
yOffset = rows / 10;
|
|
38
33
|
}
|
|
39
|
-
const
|
|
40
|
-
GraphicData
|
|
41
|
-
} = SCOORDGroup;
|
|
34
|
+
const GraphicData = SCOORDGroup.GraphicData;
|
|
42
35
|
const secondPoint = imageToWorldCoords(referencedImageId, [GraphicData[0] + xOffset, GraphicData[1] + yOffset]);
|
|
43
36
|
worldCoords.push(secondPoint);
|
|
44
37
|
}
|
|
@@ -54,25 +47,18 @@ class ArrowAnnotate extends BaseAdapter3D {
|
|
|
54
47
|
}
|
|
55
48
|
static getTID300RepresentationArguments(tool) {
|
|
56
49
|
let is3DMeasurement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const {
|
|
63
|
-
finding
|
|
64
|
-
} = tool;
|
|
65
|
-
const {
|
|
66
|
-
referencedImageId
|
|
67
|
-
} = metadata;
|
|
50
|
+
const data = tool.data,
|
|
51
|
+
metadata = tool.metadata,
|
|
52
|
+
findingSites = tool.findingSites;
|
|
53
|
+
const finding = tool.finding;
|
|
54
|
+
const referencedImageId = metadata.referencedImageId;
|
|
68
55
|
const scoordProps = {
|
|
69
56
|
is3DMeasurement,
|
|
70
57
|
referencedImageId
|
|
71
58
|
};
|
|
72
|
-
const
|
|
73
|
-
points,
|
|
74
|
-
arrowFirst
|
|
75
|
-
} = data.handles;
|
|
59
|
+
const _data$handles = data.handles,
|
|
60
|
+
points = _data$handles.points,
|
|
61
|
+
arrowFirst = _data$handles.arrowFirst;
|
|
76
62
|
const point = arrowFirst ? points[0] : points[1];
|
|
77
63
|
const point2 = arrowFirst ? points[1] : points[0];
|
|
78
64
|
const pointImage = toScoord(scoordProps, point);
|
|
@@ -90,7 +76,7 @@ class ArrowAnnotate extends BaseAdapter3D {
|
|
|
90
76
|
}
|
|
91
77
|
_ArrowAnnotate = ArrowAnnotate;
|
|
92
78
|
(() => {
|
|
93
|
-
_ArrowAnnotate.init(
|
|
79
|
+
_ArrowAnnotate.init('ArrowAnnotate', TID300ArrowAnnotate);
|
|
94
80
|
_ArrowAnnotate.registerLegacy();
|
|
95
81
|
})();
|
|
96
82
|
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
import CORNERSTONE_3D_TAG from './cornerstone3DTag.js';
|
|
2
2
|
import MeasurementReport from './MeasurementReport.js';
|
|
3
|
-
import '
|
|
3
|
+
import '../helpers/downloadDICOMData.js';
|
|
4
4
|
import { toScoords } from '../helpers/toScoordType.js';
|
|
5
|
-
import '
|
|
5
|
+
import '../helpers/scoordToWorld.js';
|
|
6
6
|
|
|
7
7
|
class BaseAdapter3D {
|
|
8
8
|
static registerType() {
|
|
9
|
-
let code = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] :
|
|
10
|
-
let type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] :
|
|
9
|
+
let code = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
10
|
+
let type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
11
11
|
let count = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
12
12
|
let key = code;
|
|
13
13
|
if (type) {
|
|
14
|
-
key = "".concat(key).concat(key.length ?
|
|
14
|
+
key = "".concat(key).concat(key.length ? '-' : '').concat(type);
|
|
15
15
|
}
|
|
16
16
|
if (count) {
|
|
17
|
-
key = "".concat(key).concat(key.length ?
|
|
17
|
+
key = "".concat(key).concat(key.length ? '-' : '').concat(count);
|
|
18
18
|
}
|
|
19
19
|
MeasurementReport.registerAdapterTypes(this, key);
|
|
20
20
|
}
|
|
21
21
|
static getPointsCount(graphicItem) {
|
|
22
|
-
const is3DMeasurement = graphicItem.ValueType ===
|
|
22
|
+
const is3DMeasurement = graphicItem.ValueType === 'SCOORD3D';
|
|
23
23
|
const pointSize = is3DMeasurement ? 3 : 2;
|
|
24
24
|
return graphicItem.GraphicData.length / pointSize;
|
|
25
25
|
}
|
|
26
26
|
static getGraphicItems(measurementGroup, filter) {
|
|
27
|
-
const items = measurementGroup.ContentSequence.filter(group => group.ValueType ===
|
|
27
|
+
const items = measurementGroup.ContentSequence.filter(group => group.ValueType === 'SCOORD' || group.ValueType === 'SCOORD3D');
|
|
28
28
|
return filter ? items.filter(filter) : items;
|
|
29
29
|
}
|
|
30
30
|
static getGraphicItem(measurementGroup) {
|
|
@@ -34,13 +34,9 @@ class BaseAdapter3D {
|
|
|
34
34
|
return items[offset];
|
|
35
35
|
}
|
|
36
36
|
static getGraphicCode(graphicItem) {
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const {
|
|
41
|
-
CodeValue: graphicValue,
|
|
42
|
-
CodingSchemeDesignator: graphicDesignator
|
|
43
|
-
} = conceptNameItem;
|
|
37
|
+
const conceptNameItem = graphicItem.ConceptNameCodeSequence;
|
|
38
|
+
const graphicValue = conceptNameItem.CodeValue,
|
|
39
|
+
graphicDesignator = conceptNameItem.CodingSchemeDesignator;
|
|
44
40
|
return "".concat(graphicDesignator, ":").concat(graphicValue);
|
|
45
41
|
}
|
|
46
42
|
static getGraphicType(graphicItem) {
|
|
@@ -82,35 +78,28 @@ class BaseAdapter3D {
|
|
|
82
78
|
if (this.trackingIdentifiers.has(trackingIdentifier)) {
|
|
83
79
|
return true;
|
|
84
80
|
}
|
|
85
|
-
if (!trackingIdentifier.includes(
|
|
81
|
+
if (!trackingIdentifier.includes(':')) {
|
|
86
82
|
return false;
|
|
87
83
|
}
|
|
88
84
|
return trackingIdentifier.startsWith(this.trackingIdentifierTextValue);
|
|
89
85
|
}
|
|
90
86
|
static getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, trackingIdentifier) {
|
|
91
|
-
const
|
|
92
|
-
defaultState
|
|
93
|
-
ReferencedFrameNumber
|
|
94
|
-
} = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType);
|
|
87
|
+
const _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType),
|
|
88
|
+
state = _MeasurementReport$ge.defaultState,
|
|
89
|
+
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
|
95
90
|
state.annotation.data = {
|
|
96
91
|
cachedStats: {},
|
|
97
92
|
frameNumber: ReferencedFrameNumber,
|
|
98
|
-
seriesLevel: (trackingIdentifier === null || trackingIdentifier === void 0 ? void 0 : trackingIdentifier.indexOf(
|
|
93
|
+
seriesLevel: (trackingIdentifier === null || trackingIdentifier === void 0 ? void 0 : trackingIdentifier.indexOf(':Series')) > 0
|
|
99
94
|
};
|
|
100
95
|
return state;
|
|
101
96
|
}
|
|
102
97
|
static getTID300RepresentationArguments(tool) {
|
|
103
98
|
let is3DMeasurement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const
|
|
108
|
-
finding,
|
|
109
|
-
findingSites
|
|
110
|
-
} = tool;
|
|
111
|
-
const {
|
|
112
|
-
referencedImageId
|
|
113
|
-
} = metadata;
|
|
99
|
+
const metadata = tool.metadata;
|
|
100
|
+
const finding = tool.finding,
|
|
101
|
+
findingSites = tool.findingSites;
|
|
102
|
+
const referencedImageId = metadata.referencedImageId;
|
|
114
103
|
const scoordProps = {
|
|
115
104
|
is3DMeasurement,
|
|
116
105
|
referencedImageId
|