@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.
Files changed (89) hide show
  1. package/dist/esm/adapters/Cornerstone/Angle.js +23 -16
  2. package/dist/esm/adapters/Cornerstone/ArrowAnnotate.js +14 -19
  3. package/dist/esm/adapters/Cornerstone/Bidirectional.js +22 -27
  4. package/dist/esm/adapters/Cornerstone/CircleRoi.js +21 -27
  5. package/dist/esm/adapters/Cornerstone/CobbAngle.js +23 -16
  6. package/dist/esm/adapters/Cornerstone/EllipticalRoi.js +20 -26
  7. package/dist/esm/adapters/Cornerstone/FreehandRoi.js +22 -26
  8. package/dist/esm/adapters/Cornerstone/Length.js +19 -16
  9. package/dist/esm/adapters/Cornerstone/MeasurementReport.js +20 -40
  10. package/dist/esm/adapters/Cornerstone/ParametricMap.js +27 -38
  11. package/dist/esm/adapters/Cornerstone/RectangleRoi.js +27 -26
  12. package/dist/esm/adapters/Cornerstone/Segmentation_3X.js +19 -31
  13. package/dist/esm/adapters/Cornerstone/Segmentation_4X.js +69 -90
  14. package/dist/esm/adapters/Cornerstone/index.d.ts +11 -11
  15. package/dist/esm/adapters/Cornerstone3D/Angle.d.ts +1 -1
  16. package/dist/esm/adapters/Cornerstone3D/Angle.js +19 -26
  17. package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.d.ts +1 -1
  18. package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.js +24 -38
  19. package/dist/esm/adapters/Cornerstone3D/BaseAdapter3D.d.ts +1 -1
  20. package/dist/esm/adapters/Cornerstone3D/BaseAdapter3D.js +20 -31
  21. package/dist/esm/adapters/Cornerstone3D/Bidirectional.d.ts +1 -1
  22. package/dist/esm/adapters/Cornerstone3D/Bidirectional.js +27 -39
  23. package/dist/esm/adapters/Cornerstone3D/CircleROI.d.ts +1 -1
  24. package/dist/esm/adapters/Cornerstone3D/CircleROI.js +29 -37
  25. package/dist/esm/adapters/Cornerstone3D/CobbAngle.d.ts +1 -1
  26. package/dist/esm/adapters/Cornerstone3D/CobbAngle.js +27 -30
  27. package/dist/esm/adapters/Cornerstone3D/ControlPointPolyline.d.ts +5 -0
  28. package/dist/esm/adapters/Cornerstone3D/ControlPointPolyline.js +85 -0
  29. package/dist/esm/adapters/Cornerstone3D/EllipticalROI.d.ts +1 -1
  30. package/dist/esm/adapters/Cornerstone3D/EllipticalROI.js +27 -35
  31. package/dist/esm/adapters/Cornerstone3D/KeyImage.d.ts +1 -1
  32. package/dist/esm/adapters/Cornerstone3D/KeyImage.js +5 -11
  33. package/dist/esm/adapters/Cornerstone3D/LabelData.d.ts +3 -1
  34. package/dist/esm/adapters/Cornerstone3D/LabelData.js +41 -33
  35. package/dist/esm/adapters/Cornerstone3D/Length.d.ts +1 -1
  36. package/dist/esm/adapters/Cornerstone3D/Length.js +21 -29
  37. package/dist/esm/adapters/Cornerstone3D/MeasurementReport.d.ts +2 -1
  38. package/dist/esm/adapters/Cornerstone3D/MeasurementReport.js +108 -120
  39. package/dist/esm/adapters/Cornerstone3D/ParametricMap/generateToolState.js +2 -6
  40. package/dist/esm/adapters/Cornerstone3D/PlanarFreehandROI.d.ts +11 -1
  41. package/dist/esm/adapters/Cornerstone3D/PlanarFreehandROI.js +58 -44
  42. package/dist/esm/adapters/Cornerstone3D/Probe.d.ts +1 -1
  43. package/dist/esm/adapters/Cornerstone3D/Probe.js +21 -32
  44. package/dist/esm/adapters/Cornerstone3D/RTStruct/RTSS.js +14 -30
  45. package/dist/esm/adapters/Cornerstone3D/RTStruct/index.d.ts +2 -2
  46. package/dist/esm/adapters/Cornerstone3D/RTStruct/index.js +1 -3
  47. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedFrameOfReferenceSequence.js +1 -3
  48. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedSeriesSequence.js +7 -13
  49. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getStructureSetModule.js +1 -3
  50. package/dist/esm/adapters/Cornerstone3D/RectangleROI.js +30 -32
  51. package/dist/esm/adapters/Cornerstone3D/Segmentation/compactMergeSegData.d.ts +1 -1
  52. package/dist/esm/adapters/Cornerstone3D/Segmentation/compactMergeSegData.js +5 -9
  53. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateLabelMaps2DFrom3D.js +2 -4
  54. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateSegmentation.js +6 -16
  55. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateToolState.js +3 -4
  56. package/dist/esm/adapters/Cornerstone3D/Segmentation/index.d.ts +4 -4
  57. package/dist/esm/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.d.ts +2 -2
  58. package/dist/esm/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.js +147 -179
  59. package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.d.ts +1 -1
  60. package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.js +15 -26
  61. package/dist/esm/adapters/Cornerstone3D/constants/index.d.ts +10 -0
  62. package/dist/esm/adapters/Cornerstone3D/constants/index.js +12 -2
  63. package/dist/esm/adapters/Cornerstone3D/metricHandler.js +57 -24
  64. package/dist/esm/adapters/Cornerstone3D/unitMapper.d.ts +5 -0
  65. package/dist/esm/adapters/Cornerstone3D/unitMapper.js +16 -0
  66. package/dist/esm/adapters/VTKjs/Segmentation.js +2 -4
  67. package/dist/esm/adapters/VTKjs/index.d.ts +1 -1
  68. package/dist/esm/adapters/enums/index.d.ts +1 -1
  69. package/dist/esm/adapters/helpers/checkOrientation.js +5 -7
  70. package/dist/esm/adapters/helpers/downloadDICOMData.js +1 -3
  71. package/dist/esm/adapters/helpers/getDatasetsFromImages.js +3 -7
  72. package/dist/esm/adapters/helpers/index.d.ts +9 -9
  73. package/dist/esm/adapters/helpers/scoordToWorld.d.ts +1 -1
  74. package/dist/esm/adapters/helpers/scoordToWorld.js +5 -13
  75. package/dist/esm/adapters/helpers/toPoint3.d.ts +1 -1
  76. package/dist/esm/adapters/helpers/toPoint3.js +1 -3
  77. package/dist/esm/adapters/helpers/toScoordType.d.ts +1 -1
  78. package/dist/esm/adapters/helpers/toScoordType.js +3 -7
  79. package/dist/esm/adapters/index.d.ts +4 -4
  80. package/dist/esm/adapters/index.js +3 -2
  81. package/dist/esm/utilities/createInstance.js +9 -8
  82. package/dist/esm/utilities/referencedMetadataProvider.d.ts +3 -4
  83. package/dist/esm/utilities/referencedMetadataProvider.js +8 -14
  84. package/dist/esm/version.d.ts +1 -1
  85. package/package.json +13 -9
  86. package/dist/esm/node_modules/@babel/runtime/helpers/esm/defineProperty.js +0 -12
  87. package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +0 -14
  88. package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +0 -9
  89. package/dist/esm/node_modules/@babel/runtime/helpers/esm/typeof.js +0 -11
@@ -8,7 +8,7 @@ declare function createLabelmapsFromBufferInternal(referencedImageIds: any, arra
8
8
  centroids: Map<any, any>;
9
9
  overlappingSegments: any;
10
10
  }>;
11
- export declare function insertPixelDataPlanar({ segmentsOnFrame, labelMapImages, pixelDataChunks, multiframe, referencedImageIds, validOrientations, metadataProvider, tolerance, segmentsPixelIndices, sopUIDImageIdIndexMap, imageIdMaps }: {
11
+ export declare function insertPixelDataPlanar({ segmentsOnFrame, labelMapImages, pixelDataChunks, multiframe, referencedImageIds, validOrientations, metadataProvider, tolerance, segmentsPixelIndices, sopUIDImageIdIndexMap, imageIdMaps, }: {
12
12
  segmentsOnFrame: any;
13
13
  labelMapImages: any;
14
14
  pixelDataChunks: any;
@@ -21,7 +21,7 @@ export declare function insertPixelDataPlanar({ segmentsOnFrame, labelMapImages,
21
21
  sopUIDImageIdIndexMap: any;
22
22
  imageIdMaps: any;
23
23
  }): Promise<unknown>;
24
- export declare function insertOverlappingPixelDataPlanar({ segmentsOnFrame, labelMapImages, pixelDataChunks, multiframe, referencedImageIds, validOrientations, metadataProvider, tolerance, segmentsPixelIndices, sopUIDImageIdIndexMap, imageIdMaps }: {
24
+ export declare function insertOverlappingPixelDataPlanar({ segmentsOnFrame, labelMapImages, pixelDataChunks, multiframe, referencedImageIds, validOrientations, metadataProvider, tolerance, segmentsPixelIndices, sopUIDImageIdIndexMap, imageIdMaps, }: {
25
25
  segmentsOnFrame: any;
26
26
  labelMapImages: any;
27
27
  pixelDataChunks: any;
@@ -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 { utilities, data, normalizers } from 'dcmjs';
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
- DicomMessage,
12
- DicomMetaDictionary
13
- } = data;
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
- segmentsOnFrame,
23
- imageIdIndex,
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
- segmentsPixelIndices,
34
- segmentIndex,
35
- imageIdIndex,
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
- PerFrameFunctionalGroups,
48
- sequenceIndex,
49
- sopUIDImageIdIndexMap,
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,20 +47,21 @@ const extractInfoFromPerFrameFunctionalGroups = _ref3 => {
59
47
  };
60
48
  };
61
49
  async function createLabelmapsFromBufferInternal(referencedImageIds, arrayBuffer, metadataProvider, options) {
62
- const {
63
- tolerance = 1e-3,
64
- TypedArrayConstructor = Uint8Array,
65
- maxBytesPerChunk = 199000000
66
- } = options;
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);
70
59
  const multiframe = Normalizer.normalizeToDataset([dataset]);
71
- const imagePlaneModule = metadataProvider.get("imagePlaneModule", referencedImageIds[0]);
72
- const generalSeriesModule = metadataProvider.get("generalSeriesModule", referencedImageIds[0]);
60
+ const imagePlaneModule = metadataProvider.get('imagePlaneModule', referencedImageIds[0]);
61
+ const generalSeriesModule = metadataProvider.get('generalSeriesModule', referencedImageIds[0]);
73
62
  const SeriesInstanceUID = generalSeriesModule.seriesInstanceUID;
74
63
  if (!imagePlaneModule) {
75
- console.warn("Insufficient metadata, imagePlaneModule missing.");
64
+ console.warn('Insufficient metadata, imagePlaneModule missing.');
76
65
  }
77
66
  const ImageOrientationPatient = Array.isArray(imagePlaneModule.rowCosines) ? [...imagePlaneModule.rowCosines, ...imagePlaneModule.columnCosines] : [imagePlaneModule.rowCosines.x, imagePlaneModule.rowCosines.y, imagePlaneModule.rowCosines.z, imagePlaneModule.columnCosines.x, imagePlaneModule.columnCosines.y, imagePlaneModule.columnCosines.z];
78
67
  const validOrientations = getValidOrientations(ImageOrientationPatient);
@@ -80,11 +69,11 @@ async function createLabelmapsFromBufferInternal(referencedImageIds, arrayBuffer
80
69
  const TransferSyntaxUID = multiframe._meta.TransferSyntaxUID.Value[0];
81
70
  let pixelData;
82
71
  let pixelDataChunks;
83
- if (TransferSyntaxUID === "1.2.840.10008.1.2.5") {
72
+ if (TransferSyntaxUID === '1.2.840.10008.1.2.5') {
84
73
  const rleEncodedFrames = Array.isArray(multiframe.PixelData) ? multiframe.PixelData : [multiframe.PixelData];
85
74
  pixelData = decode(rleEncodedFrames, multiframe.Rows, multiframe.Columns);
86
75
  if (multiframe.BitsStored === 1) {
87
- console.warn("No implementation for rle + bit packing.");
76
+ console.warn('No implementation for rle + bit packing.');
88
77
  return;
89
78
  }
90
79
  pixelDataChunks = [pixelData];
@@ -93,26 +82,25 @@ async function createLabelmapsFromBufferInternal(referencedImageIds, arrayBuffer
93
82
  maxBytesPerChunk
94
83
  });
95
84
  if (!pixelDataChunks) {
96
- throw new Error("Fractional segmentations are not yet supported");
85
+ throw new Error('Fractional segmentations are not yet supported');
97
86
  }
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
  }, {});
107
95
  let insertFunction;
108
96
  switch (orientation) {
109
- case "Planar":
97
+ case 'Planar':
110
98
  insertFunction = insertPixelDataPlanar;
111
99
  break;
112
- case "Perpendicular":
113
- throw new Error("Segmentations orthogonal to the acquisition plane of the source data are not yet supported.");
114
- case "Oblique":
115
- throw new Error("Segmentations oblique to the acquisition plane of the source data are not yet supported.");
100
+ case 'Perpendicular':
101
+ throw new Error('Segmentations orthogonal to the acquisition plane of the source data are not yet supported.');
102
+ case 'Oblique':
103
+ throw new Error('Segmentations oblique to the acquisition plane of the source data are not yet supported.');
116
104
  }
117
105
  const segmentsOnFrame = [];
118
106
  const imageIdMaps = {
@@ -123,28 +111,27 @@ async function createLabelmapsFromBufferInternal(referencedImageIds, arrayBuffer
123
111
  for (let i = 0; i < referencedImageIds.length; i++) {
124
112
  const referenceImageId = referencedImageIds[i];
125
113
  imageIdMaps.indices[referenceImageId] = i;
126
- imageIdMaps.metadata[referenceImageId] = metadataProvider.get("instance", referenceImageId);
114
+ imageIdMaps.metadata[referenceImageId] = metadataProvider.get('instance', referenceImageId);
127
115
  const labelMapImage = imageLoader.createAndCacheDerivedLabelmapImage(referenceImageId);
128
116
  labelMapImages.push(labelMapImage);
129
117
  }
130
118
  const segmentsPixelIndices = new Map();
131
- const {
132
- hasOverlappingSegments,
133
- arrayOfLabelMapImages
134
- } = await insertFunction({
135
- segmentsOnFrame,
136
- labelMapImages,
137
- pixelDataChunks,
138
- multiframe,
139
- referencedImageIds,
140
- validOrientations,
141
- metadataProvider,
142
- tolerance,
143
- segmentsPixelIndices,
144
- sopUIDImageIdIndexMap,
145
- imageIdMaps,
146
- TypedArrayConstructor
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
- segmentsOnFrame,
169
- labelMapImages,
170
- pixelDataChunks,
171
- multiframe,
172
- referencedImageIds,
173
- validOrientations,
174
- metadataProvider,
175
- tolerance,
176
- segmentsPixelIndices,
177
- sopUIDImageIdIndexMap,
178
- imageIdMaps
179
- } = _ref4;
180
- const {
181
- SharedFunctionalGroupsSequence,
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;
@@ -198,23 +181,23 @@ function insertPixelDataPlanar(_ref4) {
198
181
  const pixelDataI2D = ndarray(view, [Rows, Columns]);
199
182
  const alignedPixelDataI = alignPixelDataWithSourceData(pixelDataI2D, ImageOrientationPatientI, validOrientations, tolerance);
200
183
  if (!alignedPixelDataI) {
201
- throw new Error("Individual SEG frames are out of plane with respect to the first SEG frame. " + "This is not yet supported. Aborting segmentation loading.");
184
+ throw new Error('Individual SEG frames are out of plane with respect to the first SEG frame. ' + 'This is not yet supported. Aborting segmentation loading.');
202
185
  }
203
186
  const segmentIndex = getSegmentIndex(multiframe, i);
204
187
  if (segmentIndex === undefined) {
205
- throw new Error("Could not retrieve the segment index. Aborting segmentation loading.");
188
+ throw new Error('Could not retrieve the segment index. Aborting segmentation loading.');
206
189
  }
207
190
  if (!segmentsPixelIndices.has(segmentIndex)) {
208
191
  segmentsPixelIndices.set(segmentIndex, {});
209
192
  }
210
193
  const imageId = findReferenceSourceImageId(multiframe, i, referencedImageIds, metadataProvider, tolerance, sopUIDImageIdIndexMap);
211
194
  if (!imageId) {
212
- console.warn("Image not present in stack, can't import frame : " + i + ".");
195
+ console.warn("Image not present in stack, can't import frame : " + i + '.');
213
196
  return;
214
197
  }
215
198
  const sourceImageMetadata = imageIdMaps.metadata[imageId];
216
199
  if (Rows !== sourceImageMetadata.Rows || Columns !== sourceImageMetadata.Columns) {
217
- 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. ");
200
+ 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. ');
218
201
  }
219
202
  const imageIdIndex = imageIdMaps.indices[imageId];
220
203
  const labelmapImage = labelMapImages[imageIdIndex];
@@ -283,7 +266,7 @@ function insertPixelDataPlanar(_ref4) {
283
266
  const pixelDataI2D = ndarray(view, [Rows, Columns]);
284
267
  const alignedPixelDataI = alignPixelDataWithSourceData(pixelDataI2D, ImageOrientationPatientI, validOrientations, tolerance);
285
268
  if (!alignedPixelDataI) {
286
- throw new Error("Individual Labelmap SEG frames are out of plane with respect to the first SEG frame. " + "This is not yet supported. Aborting segmentation loading.");
269
+ throw new Error('Individual Labelmap SEG frames are out of plane with respect to the first SEG frame. ' + 'This is not yet supported. Aborting segmentation loading.');
287
270
  }
288
271
  const imageId = findReferenceSourceImageId(multiframe, i, referencedImageIds, metadataProvider, tolerance, sopUIDImageIdIndexMap);
289
272
  if (!imageId) {
@@ -292,7 +275,7 @@ function insertPixelDataPlanar(_ref4) {
292
275
  }
293
276
  const sourceImageMetadata = imageIdMaps.metadata[imageId];
294
277
  if (Rows !== sourceImageMetadata.Rows || Columns !== sourceImageMetadata.Columns) {
295
- throw new Error("Individual Labelmap SEG frames have different geometry dimensions (Rows and Columns) " + "respect to the source image reference frame. This is not yet supported. " + "Aborting segmentation loading. ");
278
+ throw new Error('Individual Labelmap SEG frames have different geometry dimensions (Rows and Columns) ' + 'respect to the source image reference frame. This is not yet supported. ' + 'Aborting segmentation loading. ');
296
279
  }
297
280
  const imageIdIndex = imageIdMaps.indices[imageId];
298
281
  const labelmapImage = labelMapImages[imageIdIndex];
@@ -334,7 +317,7 @@ function insertPixelDataPlanar(_ref4) {
334
317
  });
335
318
  }
336
319
  };
337
- if (multiframe.SegmentationType === "LABELMAP") {
320
+ if (multiframe.SegmentationType === 'LABELMAP') {
338
321
  processLabelmapChunk(0);
339
322
  } else {
340
323
  processChunk(0);
@@ -342,43 +325,37 @@ function insertPixelDataPlanar(_ref4) {
342
325
  });
343
326
  }
344
327
  const getAlignedPixelData = _ref5 => {
345
- let {
346
- sharedImageOrientationPatient,
347
- PerFrameFunctionalGroups,
348
- pixelDataChunks,
349
- sequenceIndex,
350
- sliceLength,
351
- Rows,
352
- Columns,
353
- validOrientations,
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]);
359
340
  const alignedPixelDataI = alignPixelDataWithSourceData(pixelDataI2D, ImageOrientationPatientI, validOrientations, tolerance);
360
341
  if (!alignedPixelDataI) {
361
- throw new Error("Individual SEG frames are out of plane with respect to the first SEG frame. " + "This is not yet supported. Aborting segmentation loading.");
342
+ throw new Error('Individual SEG frames are out of plane with respect to the first SEG frame. ' + 'This is not yet supported. Aborting segmentation loading.');
362
343
  }
363
344
  return alignedPixelDataI;
364
345
  };
365
346
  const checkImageDimensions = _ref6 => {
366
- let {
367
- metadataProvider,
368
- imageId,
369
- Rows,
370
- Columns
371
- } = _ref6;
372
- const sourceImageMetadata = metadataProvider.get("instance", imageId);
347
+ let metadataProvider = _ref6.metadataProvider,
348
+ imageId = _ref6.imageId,
349
+ Rows = _ref6.Rows,
350
+ Columns = _ref6.Columns;
351
+ const sourceImageMetadata = metadataProvider.get('instance', imageId);
373
352
  if (Rows !== sourceImageMetadata.Rows || Columns !== sourceImageMetadata.Columns) {
374
- 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. ");
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
- arrayOfSegmentData,
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
- segmentsOnFrame,
407
- labelMapImages,
408
- pixelDataChunks,
409
- multiframe,
410
- referencedImageIds,
411
- validOrientations,
412
- metadataProvider,
413
- tolerance,
414
- segmentsPixelIndices,
415
- sopUIDImageIdIndexMap,
416
- imageIdMaps
417
- } = _ref8;
418
- const {
419
- SharedFunctionalGroupsSequence,
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
- sliceLength,
455
- Rows,
456
- Columns,
457
- validOrientations,
458
- metadataProvider,
459
- imageIdMaps,
460
- segmentsOnFrame,
461
- tolerance,
462
- pixelDataChunks,
463
- PerFrameFunctionalGroupsSequence,
464
- labelMapImages,
465
- sopUIDImageIdIndexMap,
466
- multiframe,
467
- sharedImageOrientationPatient,
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) {
@@ -495,39 +466,36 @@ const getArrayOfSegmentData = _ref9 => {
495
466
  }
496
467
  return arrayOfSegmentData;
497
468
  };
498
- const getSegmentData = _ref10 => {
499
- let {
500
- PerFrameFunctionalGroupsSequence,
501
- labelMapImages,
502
- sopUIDImageIdIndexMap,
503
- multiframe,
504
- segmentIndex,
505
- sliceLength,
506
- Rows,
507
- Columns,
508
- validOrientations,
509
- tolerance,
510
- pixelDataChunks,
511
- sharedImageOrientationPatient,
512
- metadataProvider,
513
- imageIdMaps,
514
- segmentsOnFrame,
515
- segmentsPixelIndices
516
- } = _ref10;
469
+ const getSegmentData = _ref0 => {
470
+ let PerFrameFunctionalGroupsSequence = _ref0.PerFrameFunctionalGroupsSequence,
471
+ labelMapImages = _ref0.labelMapImages,
472
+ sopUIDImageIdIndexMap = _ref0.sopUIDImageIdIndexMap,
473
+ multiframe = _ref0.multiframe,
474
+ segmentIndex = _ref0.segmentIndex,
475
+ sliceLength = _ref0.sliceLength,
476
+ Rows = _ref0.Rows,
477
+ Columns = _ref0.Columns,
478
+ validOrientations = _ref0.validOrientations,
479
+ tolerance = _ref0.tolerance,
480
+ pixelDataChunks = _ref0.pixelDataChunks,
481
+ sharedImageOrientationPatient = _ref0.sharedImageOrientationPatient,
482
+ metadataProvider = _ref0.metadataProvider,
483
+ imageIdMaps = _ref0.imageIdMaps,
484
+ segmentsOnFrame = _ref0.segmentsOnFrame,
485
+ segmentsPixelIndices = _ref0.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
- segmentIndex: groupsSegmentIndex,
524
- referencedImageId: groupsReferenceImageId
525
- } = extractInfoFromPerFrameFunctionalGroups({
526
- PerFrameFunctionalGroups,
527
- sequenceIndex: currentSequenceIndex,
528
- sopUIDImageIdIndexMap,
529
- multiframe
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
  });
@@ -1,4 +1,4 @@
1
- import BaseAdapter3D from "./BaseAdapter3D";
1
+ import BaseAdapter3D from './BaseAdapter3D';
2
2
  declare class UltrasoundDirectional extends BaseAdapter3D {
3
3
  static getMeasurementData(measurementGroup: any, sopInstanceUIDToImageIdMap: any, metadata: any): {
4
4
  description?: string;
@@ -1,4 +1,4 @@
1
- import _defineProperty from '../../node_modules/@babel/runtime/helpers/esm/defineProperty.js';
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';
@@ -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
- Length: TID300Length
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,20 +24,14 @@ class UltrasoundDirectional extends BaseAdapter3D {
29
24
  return state;
30
25
  }
31
26
  static getTID300RepresentationArguments(tool, is3DMeasurement) {
32
- const {
33
- data,
34
- finding,
35
- findingSites,
36
- metadata
37
- } = tool;
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
- throw new Error("UltrasoundDirectionalTool.getTID300RepresentationArguments: referencedImageId is not defined");
34
+ throw new Error('UltrasoundDirectionalTool.getTID300RepresentationArguments: referencedImageId is not defined');
46
35
  }
47
36
  const start = worldToImageCoords(referencedImageId, handles.points[0]);
48
37
  const end = worldToImageCoords(referencedImageId, handles.points[1]);
@@ -64,6 +53,6 @@ class UltrasoundDirectional extends BaseAdapter3D {
64
53
  }
65
54
  }
66
55
  _UltrasoundDirectional = UltrasoundDirectional;
67
- _UltrasoundDirectional.init("UltrasoundDirectionalTool", TID300Length);
56
+ _UltrasoundDirectional.init('UltrasoundDirectionalTool', TID300Length);
68
57
 
69
58
  export { UltrasoundDirectional as default };
@@ -5,6 +5,16 @@ export declare const TEXT_ANNOTATION_POSITION: {
5
5
  meaning: string;
6
6
  value: string;
7
7
  };
8
+ export declare const CONTROL_POINTS_CODE: {
9
+ schemeDesignator: string;
10
+ meaning: string;
11
+ value: string;
12
+ };
13
+ export declare const SPLINE_TYPE_CODE: {
14
+ schemeDesignator: string;
15
+ meaning: string;
16
+ value: string;
17
+ };
8
18
  export declare const COMMENT_CODE: {
9
19
  schemeDesignator: string;
10
20
  meaning: string;
@@ -1,4 +1,4 @@
1
- import _defineProperty from '../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js';
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
 
3
3
  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; }
4
4
  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; }
@@ -9,6 +9,16 @@ const TEXT_ANNOTATION_POSITION = {
9
9
  meaning: 'Text Annotation Position',
10
10
  value: 'TextPosition'
11
11
  };
12
+ const CONTROL_POINTS_CODE = {
13
+ schemeDesignator: CS3D_DESIGNATOR,
14
+ meaning: 'Control Points',
15
+ value: 'ControlPoints'
16
+ };
17
+ const SPLINE_TYPE_CODE = {
18
+ schemeDesignator: CS3D_DESIGNATOR,
19
+ meaning: 'Spline Type',
20
+ value: 'SplineType'
21
+ };
12
22
  const COMMENT_CODE = {
13
23
  schemeDesignator: 'DCM',
14
24
  meaning: 'Comment',
@@ -47,4 +57,4 @@ const metaRTSSContour = _objectSpread(_objectSpread({}, metaSRAnnotation), {}, {
47
57
  }
48
58
  });
49
59
 
50
- export { COMMENT_CODE, CS3D_DESIGNATOR, ImplementationClassRtssContours, ImplementationClassUidSRAnnotation, NO_IMAGE_ID, TEXT_ANNOTATION_POSITION, fileMetaInformationVersionArray1, fileMetaInformationVersionArray2, metaRTSSContour, metaSRAnnotation };
60
+ export { COMMENT_CODE, CONTROL_POINTS_CODE, CS3D_DESIGNATOR, ImplementationClassRtssContours, ImplementationClassUidSRAnnotation, NO_IMAGE_ID, SPLINE_TYPE_CODE, TEXT_ANNOTATION_POSITION, fileMetaInformationVersionArray1, fileMetaInformationVersionArray2, metaRTSSContour, metaSRAnnotation };