@cornerstonejs/adapters 2.0.0-beta.2 → 2.0.0-beta.21

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 (118) hide show
  1. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +493 -0
  2. package/dist/esm/adapters/Cornerstone/Angle.d.ts +45 -0
  3. package/dist/esm/adapters/Cornerstone/Angle.js +93 -0
  4. package/dist/esm/adapters/Cornerstone/ArrowAnnotate.d.ts +49 -0
  5. package/dist/esm/adapters/Cornerstone/ArrowAnnotate.js +97 -0
  6. package/dist/esm/adapters/Cornerstone/Bidirectional.d.ts +89 -0
  7. package/dist/esm/adapters/Cornerstone/Bidirectional.js +170 -0
  8. package/dist/esm/adapters/Cornerstone/CircleRoi.d.ts +65 -0
  9. package/dist/esm/adapters/Cornerstone/CircleRoi.js +115 -0
  10. package/dist/esm/adapters/Cornerstone/CobbAngle.d.ts +49 -0
  11. package/dist/esm/adapters/Cornerstone/CobbAngle.js +98 -0
  12. package/dist/esm/adapters/Cornerstone/EllipticalRoi.d.ts +57 -0
  13. package/dist/esm/adapters/Cornerstone/EllipticalRoi.js +178 -0
  14. package/dist/esm/adapters/Cornerstone/FreehandRoi.d.ts +42 -0
  15. package/dist/esm/adapters/Cornerstone/FreehandRoi.js +89 -0
  16. package/dist/esm/adapters/Cornerstone/Length.d.ts +39 -0
  17. package/dist/esm/adapters/Cornerstone/Length.js +82 -0
  18. package/dist/esm/adapters/Cornerstone/MeasurementReport.d.ts +36 -0
  19. package/dist/esm/adapters/Cornerstone/MeasurementReport.js +276 -0
  20. package/dist/esm/adapters/Cornerstone/RectangleRoi.d.ts +44 -0
  21. package/dist/esm/adapters/Cornerstone/RectangleRoi.js +97 -0
  22. package/dist/esm/adapters/Cornerstone/Segmentation.d.ts +44 -0
  23. package/dist/esm/adapters/Cornerstone/Segmentation.js +79 -0
  24. package/dist/esm/adapters/Cornerstone/Segmentation_3X.d.ts +45 -0
  25. package/dist/esm/adapters/Cornerstone/Segmentation_3X.js +428 -0
  26. package/dist/esm/adapters/Cornerstone/Segmentation_4X.d.ts +54 -0
  27. package/dist/esm/adapters/Cornerstone/Segmentation_4X.js +1200 -0
  28. package/dist/esm/adapters/Cornerstone/cornerstone4Tag.d.ts +2 -0
  29. package/dist/esm/adapters/Cornerstone/cornerstone4Tag.js +3 -0
  30. package/dist/esm/adapters/Cornerstone/index.d.ts +34 -0
  31. package/dist/esm/adapters/Cornerstone/index.js +29 -0
  32. package/dist/esm/adapters/Cornerstone3D/Angle.js +110 -0
  33. package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.d.ts +35 -0
  34. package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.js +123 -0
  35. package/dist/esm/adapters/Cornerstone3D/Bidirectional.js +146 -0
  36. package/dist/esm/adapters/Cornerstone3D/CircleROI.js +103 -0
  37. package/dist/esm/adapters/Cornerstone3D/CobbAngle.js +113 -0
  38. package/dist/esm/adapters/Cornerstone3D/CodingScheme.d.ts +9 -0
  39. package/dist/esm/adapters/Cornerstone3D/CodingScheme.js +15 -0
  40. package/dist/esm/adapters/Cornerstone3D/EllipticalROI.js +170 -0
  41. package/dist/esm/adapters/Cornerstone3D/Length.d.ts +41 -0
  42. package/dist/esm/adapters/Cornerstone3D/Length.js +101 -0
  43. package/dist/{types → esm}/adapters/Cornerstone3D/MeasurementReport.d.ts +1 -1
  44. package/dist/esm/adapters/Cornerstone3D/MeasurementReport.js +314 -0
  45. package/dist/{types → esm}/adapters/Cornerstone3D/PlanarFreehandROI.d.ts +9 -2
  46. package/dist/esm/adapters/Cornerstone3D/PlanarFreehandROI.js +129 -0
  47. package/dist/esm/adapters/Cornerstone3D/Probe.d.ts +33 -0
  48. package/dist/esm/adapters/Cornerstone3D/Probe.js +87 -0
  49. package/dist/esm/adapters/Cornerstone3D/RTStruct/RTSS.d.ts +90 -0
  50. package/dist/esm/adapters/Cornerstone3D/RTStruct/RTSS.js +250 -0
  51. package/dist/esm/adapters/Cornerstone3D/RTStruct/index.d.ts +4 -0
  52. package/dist/esm/adapters/Cornerstone3D/RTStruct/index.js +6 -0
  53. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getPatientModule.d.ts +13 -0
  54. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getPatientModule.js +22 -0
  55. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getRTROIObservationsSequence.d.ts +6 -0
  56. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getRTROIObservationsSequence.js +10 -0
  57. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getRTSeriesModule.d.ts +4 -0
  58. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getRTSeriesModule.js +9 -0
  59. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedFrameOfReferenceSequence.d.ts +11 -0
  60. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedFrameOfReferenceSequence.js +22 -0
  61. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedSeriesSequence.d.ts +4 -0
  62. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedSeriesSequence.js +27 -0
  63. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getStructureSetModule.d.ts +7 -0
  64. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getStructureSetModule.js +12 -0
  65. package/dist/esm/adapters/Cornerstone3D/RectangleROI.js +92 -0
  66. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateLabelMaps2DFrom3D.js +45 -0
  67. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateSegmentation.js +47 -0
  68. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateToolState.js +25 -0
  69. package/dist/esm/adapters/Cornerstone3D/Segmentation/index.js +3 -0
  70. package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.d.ts +36 -0
  71. package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.js +93 -0
  72. package/dist/esm/adapters/Cornerstone3D/cornerstone3DTag.d.ts +2 -0
  73. package/dist/esm/adapters/Cornerstone3D/cornerstone3DTag.js +3 -0
  74. package/dist/{types → esm}/adapters/Cornerstone3D/index.d.ts +20 -6
  75. package/dist/esm/adapters/Cornerstone3D/index.js +41 -0
  76. package/dist/esm/adapters/Cornerstone3D/isValidCornerstoneTrackingIdentifier.js +20 -0
  77. package/dist/esm/adapters/VTKjs/Segmentation.d.ts +41 -0
  78. package/dist/esm/adapters/VTKjs/Segmentation.js +186 -0
  79. package/dist/esm/adapters/VTKjs/index.d.ts +5 -0
  80. package/dist/esm/adapters/VTKjs/index.js +7 -0
  81. package/dist/esm/adapters/enums/Events.js +13 -0
  82. package/dist/esm/adapters/enums/index.js +1 -0
  83. package/dist/esm/adapters/helpers/codeMeaningEquals.js +14 -0
  84. package/dist/{types → esm}/adapters/helpers/downloadDICOMData.d.ts +1 -1
  85. package/dist/esm/adapters/helpers/downloadDICOMData.js +31 -0
  86. package/dist/esm/adapters/helpers/graphicTypeEquals.js +12 -0
  87. package/dist/esm/adapters/helpers/index.js +4 -0
  88. package/dist/esm/adapters/helpers/toArray.js +5 -0
  89. package/dist/esm/adapters/index.d.ts +62 -0
  90. package/dist/esm/adapters/index.js +20 -0
  91. package/dist/esm/index.d.ts +2 -0
  92. package/dist/esm/index.js +5 -0
  93. package/dist/umd/adapters.umd.js +5738 -0
  94. package/dist/umd/adapters.umd.js.map +1 -0
  95. package/package.json +14 -10
  96. package/dist/adapters.es.js +0 -5194
  97. package/dist/adapters.es.js.map +0 -1
  98. package/dist/types/adapters/Cornerstone/index.d.ts +0 -16
  99. package/dist/types/adapters/VTKjs/index.d.ts +0 -4
  100. package/dist/types/adapters/index.d.ts +0 -43
  101. package/dist/types/index.d.ts +0 -2
  102. /package/dist/{types → esm}/adapters/Cornerstone3D/Angle.d.ts +0 -0
  103. /package/dist/{types → esm}/adapters/Cornerstone3D/Bidirectional.d.ts +0 -0
  104. /package/dist/{types → esm}/adapters/Cornerstone3D/CircleROI.d.ts +0 -0
  105. /package/dist/{types → esm}/adapters/Cornerstone3D/CobbAngle.d.ts +0 -0
  106. /package/dist/{types → esm}/adapters/Cornerstone3D/EllipticalROI.d.ts +0 -0
  107. /package/dist/{types → esm}/adapters/Cornerstone3D/RectangleROI.d.ts +0 -0
  108. /package/dist/{types → esm}/adapters/Cornerstone3D/Segmentation/generateLabelMaps2DFrom3D.d.ts +0 -0
  109. /package/dist/{types → esm}/adapters/Cornerstone3D/Segmentation/generateSegmentation.d.ts +0 -0
  110. /package/dist/{types → esm}/adapters/Cornerstone3D/Segmentation/generateToolState.d.ts +0 -0
  111. /package/dist/{types → esm}/adapters/Cornerstone3D/Segmentation/index.d.ts +0 -0
  112. /package/dist/{types → esm}/adapters/Cornerstone3D/isValidCornerstoneTrackingIdentifier.d.ts +0 -0
  113. /package/dist/{types → esm}/adapters/enums/Events.d.ts +0 -0
  114. /package/dist/{types → esm}/adapters/enums/index.d.ts +0 -0
  115. /package/dist/{types → esm}/adapters/helpers/codeMeaningEquals.d.ts +0 -0
  116. /package/dist/{types → esm}/adapters/helpers/graphicTypeEquals.d.ts +0 -0
  117. /package/dist/{types → esm}/adapters/helpers/index.d.ts +0 -0
  118. /package/dist/{types → esm}/adapters/helpers/toArray.d.ts +0 -0
@@ -0,0 +1,276 @@
1
+ import { createClass as _createClass, classCallCheck as _classCallCheck } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { utilities, derivations, normalizers, data } from 'dcmjs';
3
+ import { toArray } from '../helpers/toArray.js';
4
+ import { codeMeaningEquals } from '../helpers/codeMeaningEquals.js';
5
+ import '../helpers/downloadDICOMData.js';
6
+
7
+ var TID1500 = utilities.TID1500,
8
+ addAccessors = utilities.addAccessors;
9
+ var StructuredReport = derivations.StructuredReport;
10
+ var Normalizer = normalizers.Normalizer;
11
+ var TID1500MeasurementReport = TID1500.TID1500MeasurementReport,
12
+ TID1501MeasurementGroup = TID1500.TID1501MeasurementGroup;
13
+ var DicomMetaDictionary = data.DicomMetaDictionary;
14
+ var FINDING = {
15
+ CodingSchemeDesignator: "DCM",
16
+ CodeValue: "121071"
17
+ };
18
+ var FINDING_SITE = {
19
+ CodingSchemeDesignator: "SCT",
20
+ CodeValue: "363698007"
21
+ };
22
+ var FINDING_SITE_OLD = {
23
+ CodingSchemeDesignator: "SRT",
24
+ CodeValue: "G-C0E3"
25
+ };
26
+ var codeValueMatch = function codeValueMatch(group, code, oldCode) {
27
+ var ConceptNameCodeSequence = group.ConceptNameCodeSequence;
28
+ if (!ConceptNameCodeSequence) {
29
+ return;
30
+ }
31
+ var CodingSchemeDesignator = ConceptNameCodeSequence.CodingSchemeDesignator,
32
+ CodeValue = ConceptNameCodeSequence.CodeValue;
33
+ return CodingSchemeDesignator == code.CodingSchemeDesignator && CodeValue == code.CodeValue || oldCode && CodingSchemeDesignator == oldCode.CodingSchemeDesignator && CodeValue == oldCode.CodeValue;
34
+ };
35
+ function getTID300ContentItem(tool, toolType, ReferencedSOPSequence, toolClass) {
36
+ var args = toolClass.getTID300RepresentationArguments(tool);
37
+ args.ReferencedSOPSequence = ReferencedSOPSequence;
38
+ var TID300Measurement = new toolClass.TID300Representation(args);
39
+ return TID300Measurement;
40
+ }
41
+ function getMeasurementGroup(toolType, toolData, ReferencedSOPSequence) {
42
+ var toolTypeData = toolData[toolType];
43
+ var toolClass = MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolType];
44
+ if (!toolTypeData || !toolTypeData.data || !toolTypeData.data.length || !toolClass) {
45
+ return;
46
+ }
47
+
48
+ // Loop through the array of tool instances
49
+ // for this tool
50
+ var Measurements = toolTypeData.data.map(function (tool) {
51
+ return getTID300ContentItem(tool, toolType, ReferencedSOPSequence, toolClass);
52
+ });
53
+ return new TID1501MeasurementGroup(Measurements);
54
+ }
55
+ var MeasurementReport = /*#__PURE__*/function () {
56
+ function MeasurementReport() {
57
+ _classCallCheck(this, MeasurementReport);
58
+ }
59
+ return _createClass(MeasurementReport, null, [{
60
+ key: "getSetupMeasurementData",
61
+ value: function getSetupMeasurementData(MeasurementGroup) {
62
+ var ContentSequence = MeasurementGroup.ContentSequence;
63
+ var contentSequenceArr = toArray(ContentSequence);
64
+ var findingGroup = contentSequenceArr.find(function (group) {
65
+ return codeValueMatch(group, FINDING);
66
+ });
67
+ var findingSiteGroups = contentSequenceArr.filter(function (group) {
68
+ return codeValueMatch(group, FINDING_SITE, FINDING_SITE_OLD);
69
+ }) || [];
70
+ var NUMGroup = contentSequenceArr.find(function (group) {
71
+ return group.ValueType === "NUM";
72
+ });
73
+ var SCOORDGroup = toArray(NUMGroup.ContentSequence).find(function (group) {
74
+ return group.ValueType === "SCOORD";
75
+ });
76
+ var ReferencedSOPSequence = SCOORDGroup.ContentSequence.ReferencedSOPSequence;
77
+ var ReferencedSOPInstanceUID = ReferencedSOPSequence.ReferencedSOPInstanceUID,
78
+ ReferencedFrameNumber = ReferencedSOPSequence.ReferencedFrameNumber;
79
+ var defaultState = {
80
+ sopInstanceUid: ReferencedSOPInstanceUID,
81
+ frameIndex: ReferencedFrameNumber || 1,
82
+ complete: true,
83
+ finding: findingGroup ? addAccessors(findingGroup.ConceptCodeSequence) : undefined,
84
+ findingSites: findingSiteGroups.map(function (fsg) {
85
+ return addAccessors(fsg.ConceptCodeSequence);
86
+ })
87
+ };
88
+ if (defaultState.finding) {
89
+ defaultState.description = defaultState.finding.CodeMeaning;
90
+ }
91
+ var findingSite = defaultState.findingSites && defaultState.findingSites[0];
92
+ if (findingSite) {
93
+ defaultState.location = findingSite[0] && findingSite[0].CodeMeaning || findingSite.CodeMeaning;
94
+ }
95
+ return {
96
+ defaultState: defaultState,
97
+ findingGroup: findingGroup,
98
+ findingSiteGroups: findingSiteGroups,
99
+ NUMGroup: NUMGroup,
100
+ SCOORDGroup: SCOORDGroup,
101
+ ReferencedSOPSequence: ReferencedSOPSequence,
102
+ ReferencedSOPInstanceUID: ReferencedSOPInstanceUID,
103
+ ReferencedFrameNumber: ReferencedFrameNumber
104
+ };
105
+ }
106
+ }, {
107
+ key: "generateReport",
108
+ value: function generateReport(toolState, metadataProvider, options) {
109
+ // ToolState for array of imageIDs to a Report
110
+ // Assume Cornerstone metadata provider has access to Study / Series / Sop Instance UID
111
+
112
+ var allMeasurementGroups = [];
113
+ var firstImageId = Object.keys(toolState)[0];
114
+ if (!firstImageId) {
115
+ throw new Error("No measurements provided.");
116
+ }
117
+
118
+ /* Patient ID
119
+ Warning - Missing attribute or value that would be needed to build DICOMDIR - Patient ID
120
+ Warning - Missing attribute or value that would be needed to build DICOMDIR - Study Date
121
+ Warning - Missing attribute or value that would be needed to build DICOMDIR - Study Time
122
+ Warning - Missing attribute or value that would be needed to build DICOMDIR - Study ID
123
+ */
124
+ var generalSeriesModule = metadataProvider.get("generalSeriesModule", firstImageId);
125
+
126
+ //const sopCommonModule = metadataProvider.get('sopCommonModule', firstImageId);
127
+
128
+ // NOTE: We are getting the Series and Study UIDs from the first imageId of the toolState
129
+ // which means that if the toolState is for multiple series, the report will have the incorrect
130
+ // SeriesInstanceUIDs
131
+ var studyInstanceUID = generalSeriesModule.studyInstanceUID,
132
+ seriesInstanceUID = generalSeriesModule.seriesInstanceUID;
133
+
134
+ // Loop through each image in the toolData
135
+ Object.keys(toolState).forEach(function (imageId) {
136
+ var sopCommonModule = metadataProvider.get("sopCommonModule", imageId);
137
+ var frameNumber = metadataProvider.get("frameNumber", imageId);
138
+ var toolData = toolState[imageId];
139
+ var toolTypes = Object.keys(toolData);
140
+ var ReferencedSOPSequence = {
141
+ ReferencedSOPClassUID: sopCommonModule.sopClassUID,
142
+ ReferencedSOPInstanceUID: sopCommonModule.sopInstanceUID
143
+ };
144
+ if (Normalizer.isMultiframeSOPClassUID(sopCommonModule.sopClassUID)) {
145
+ ReferencedSOPSequence.ReferencedFrameNumber = frameNumber;
146
+ }
147
+
148
+ // Loop through each tool type for the image
149
+ var measurementGroups = [];
150
+ toolTypes.forEach(function (toolType) {
151
+ var group = getMeasurementGroup(toolType, toolData, ReferencedSOPSequence);
152
+ if (group) {
153
+ measurementGroups.push(group);
154
+ }
155
+ });
156
+ allMeasurementGroups = allMeasurementGroups.concat(measurementGroups);
157
+ });
158
+ var _MeasurementReport = new TID1500MeasurementReport({
159
+ TID1501MeasurementGroups: allMeasurementGroups
160
+ }, options);
161
+
162
+ // TODO: what is the correct metaheader
163
+ // http://dicom.nema.org/medical/Dicom/current/output/chtml/part10/chapter_7.html
164
+ // TODO: move meta creation to happen in derivations.js
165
+ var fileMetaInformationVersionArray = new Uint8Array(2);
166
+ fileMetaInformationVersionArray[1] = 1;
167
+ var derivationSourceDataset = {
168
+ StudyInstanceUID: studyInstanceUID,
169
+ SeriesInstanceUID: seriesInstanceUID
170
+ //SOPInstanceUID: sopInstanceUID, // TODO: Necessary?
171
+ //SOPClassUID: sopClassUID,
172
+ };
173
+ var _meta = {
174
+ FileMetaInformationVersion: {
175
+ Value: [fileMetaInformationVersionArray.buffer],
176
+ vr: "OB"
177
+ },
178
+ //MediaStorageSOPClassUID
179
+ //MediaStorageSOPInstanceUID: sopCommonModule.sopInstanceUID,
180
+ TransferSyntaxUID: {
181
+ Value: ["1.2.840.10008.1.2.1"],
182
+ vr: "UI"
183
+ },
184
+ ImplementationClassUID: {
185
+ Value: [DicomMetaDictionary.uid()],
186
+ // TODO: could be git hash or other valid id
187
+ vr: "UI"
188
+ },
189
+ ImplementationVersionName: {
190
+ Value: ["dcmjs"],
191
+ vr: "SH"
192
+ }
193
+ };
194
+ var _vrMap = {
195
+ PixelData: "OW"
196
+ };
197
+ derivationSourceDataset._meta = _meta;
198
+ derivationSourceDataset._vrMap = _vrMap;
199
+ var report = new StructuredReport([derivationSourceDataset]);
200
+ var contentItem = _MeasurementReport.contentItem(derivationSourceDataset);
201
+
202
+ // Merge the derived dataset with the content from the Measurement Report
203
+ report.dataset = Object.assign(report.dataset, contentItem);
204
+ report.dataset._meta = _meta;
205
+ report.dataset.SpecificCharacterSet = "ISO_IR 192";
206
+ return report;
207
+ }
208
+
209
+ /**
210
+ * Generate Cornerstone tool state from dataset
211
+ * @param {object} dataset dataset
212
+ * @param {object} hooks
213
+ * @param {function} hooks.getToolClass Function to map dataset to a tool class
214
+ * @returns
215
+ */
216
+ }, {
217
+ key: "generateToolState",
218
+ value: function generateToolState(dataset) {
219
+ var hooks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
220
+ // For now, bail out if the dataset is not a TID1500 SR with length measurements
221
+ if (dataset.ContentTemplateSequence.TemplateIdentifier !== "1500") {
222
+ throw new Error("This package can currently only interpret DICOM SR TID 1500");
223
+ }
224
+ var REPORT = "Imaging Measurements";
225
+ var GROUP = "Measurement Group";
226
+ var TRACKING_IDENTIFIER = "Tracking Identifier";
227
+
228
+ // Identify the Imaging Measurements
229
+ var imagingMeasurementContent = toArray(dataset.ContentSequence).find(codeMeaningEquals(REPORT));
230
+
231
+ // Retrieve the Measurements themselves
232
+ var measurementGroups = toArray(imagingMeasurementContent.ContentSequence).filter(codeMeaningEquals(GROUP));
233
+
234
+ // For each of the supported measurement types, compute the measurement data
235
+ var measurementData = {};
236
+ var cornerstoneToolClasses = MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE;
237
+ var registeredToolClasses = [];
238
+ Object.keys(cornerstoneToolClasses).forEach(function (key) {
239
+ registeredToolClasses.push(cornerstoneToolClasses[key]);
240
+ measurementData[key] = [];
241
+ });
242
+ measurementGroups.forEach(function (measurementGroup) {
243
+ var measurementGroupContentSequence = toArray(measurementGroup.ContentSequence);
244
+ var TrackingIdentifierGroup = measurementGroupContentSequence.find(function (contentItem) {
245
+ return contentItem.ConceptNameCodeSequence.CodeMeaning === TRACKING_IDENTIFIER;
246
+ });
247
+ var TrackingIdentifierValue = TrackingIdentifierGroup.TextValue;
248
+ var toolClass = hooks.getToolClass ? hooks.getToolClass(measurementGroup, dataset, registeredToolClasses) : registeredToolClasses.find(function (tc) {
249
+ return tc.isValidCornerstoneTrackingIdentifier(TrackingIdentifierValue);
250
+ });
251
+ if (toolClass) {
252
+ var measurement = toolClass.getMeasurementData(measurementGroup);
253
+ console.log("=== ".concat(toolClass.toolType, " ==="));
254
+ console.log(measurement);
255
+ measurementData[toolClass.toolType].push(measurement);
256
+ }
257
+ });
258
+
259
+ // NOTE: There is no way of knowing the cornerstone imageIds as that could be anything.
260
+ // That is up to the consumer to derive from the SOPInstanceUIDs.
261
+ return measurementData;
262
+ }
263
+ }, {
264
+ key: "registerTool",
265
+ value: function registerTool(toolClass) {
266
+ MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE[toolClass.utilityToolType] = toolClass;
267
+ MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolClass.toolType] = toolClass;
268
+ MeasurementReport.MEASUREMENT_BY_TOOLTYPE[toolClass.toolType] = toolClass.utilityToolType;
269
+ }
270
+ }]);
271
+ }();
272
+ MeasurementReport.MEASUREMENT_BY_TOOLTYPE = {};
273
+ MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE = {};
274
+ MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE = {};
275
+
276
+ export { MeasurementReport as default };
@@ -0,0 +1,44 @@
1
+ export default RectangleRoi;
2
+ declare class RectangleRoi {
3
+ static getMeasurementData(MeasurementGroup: any): {
4
+ toolType: string;
5
+ handles: {
6
+ start: {};
7
+ end: {};
8
+ textBox: {
9
+ active: boolean;
10
+ hasMoved: boolean;
11
+ movesIndependently: boolean;
12
+ drawnIndependently: boolean;
13
+ allowedOutsideImage: boolean;
14
+ hasBoundingBox: boolean;
15
+ };
16
+ initialRotation: number;
17
+ };
18
+ cachedStats: {
19
+ area: any;
20
+ };
21
+ color: any;
22
+ invalidated: boolean;
23
+ sopInstanceUid: any;
24
+ frameIndex: any;
25
+ complete: boolean;
26
+ finding: any;
27
+ findingSites: any[];
28
+ };
29
+ static getTID300RepresentationArguments(tool: any): {
30
+ points: any[];
31
+ area: any;
32
+ perimeter: any;
33
+ trackingIdentifierTextValue: string;
34
+ finding: any;
35
+ findingSites: any;
36
+ };
37
+ }
38
+ declare namespace RectangleRoi {
39
+ export let toolType: string;
40
+ export let utilityToolType: string;
41
+ export { TID300Polyline as TID300Representation };
42
+ export function isValidCornerstoneTrackingIdentifier(TrackingIdentifier: any): boolean;
43
+ }
44
+ declare const TID300Polyline: any;
@@ -0,0 +1,97 @@
1
+ import { slicedToArray as _slicedToArray, createClass as _createClass, objectSpread2 as _objectSpread2, classCallCheck as _classCallCheck } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { utilities } from 'dcmjs';
3
+ import MeasurementReport from './MeasurementReport.js';
4
+ import CORNERSTONE_4_TAG from './cornerstone4Tag.js';
5
+
6
+ var TID300Polyline = utilities.TID300.Polyline;
7
+ var RectangleRoi = /*#__PURE__*/function () {
8
+ function RectangleRoi() {
9
+ _classCallCheck(this, RectangleRoi);
10
+ }
11
+ return _createClass(RectangleRoi, null, [{
12
+ key: "getMeasurementData",
13
+ value: function getMeasurementData(MeasurementGroup) {
14
+ var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup),
15
+ defaultState = _MeasurementReport$ge.defaultState,
16
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
17
+ NUMGroup = _MeasurementReport$ge.NUMGroup;
18
+ var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
19
+ toolType: RectangleRoi.toolType,
20
+ handles: {
21
+ start: {},
22
+ end: {},
23
+ textBox: {
24
+ active: false,
25
+ hasMoved: false,
26
+ movesIndependently: false,
27
+ drawnIndependently: true,
28
+ allowedOutsideImage: true,
29
+ hasBoundingBox: true
30
+ },
31
+ initialRotation: 0
32
+ },
33
+ cachedStats: {
34
+ area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0
35
+ },
36
+ color: undefined,
37
+ invalidated: true
38
+ });
39
+ var _SCOORDGroup$GraphicD = _slicedToArray(SCOORDGroup.GraphicData, 6);
40
+ state.handles.start.x = _SCOORDGroup$GraphicD[0];
41
+ state.handles.start.y = _SCOORDGroup$GraphicD[1];
42
+ _SCOORDGroup$GraphicD[2];
43
+ _SCOORDGroup$GraphicD[3];
44
+ state.handles.end.x = _SCOORDGroup$GraphicD[4];
45
+ state.handles.end.y = _SCOORDGroup$GraphicD[5];
46
+ return state;
47
+ }
48
+ }, {
49
+ key: "getTID300RepresentationArguments",
50
+ value: function getTID300RepresentationArguments(tool) {
51
+ var finding = tool.finding,
52
+ findingSites = tool.findingSites,
53
+ _tool$cachedStats = tool.cachedStats,
54
+ cachedStats = _tool$cachedStats === void 0 ? {} : _tool$cachedStats,
55
+ handles = tool.handles;
56
+ var start = handles.start,
57
+ end = handles.end;
58
+ var points = [start, {
59
+ x: start.x,
60
+ y: end.y
61
+ }, end, {
62
+ x: end.x,
63
+ y: start.y
64
+ }];
65
+ var area = cachedStats.area,
66
+ perimeter = cachedStats.perimeter;
67
+ var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:RectangleRoi";
68
+ return {
69
+ points: points,
70
+ area: area,
71
+ perimeter: perimeter,
72
+ trackingIdentifierTextValue: trackingIdentifierTextValue,
73
+ finding: finding,
74
+ findingSites: findingSites || []
75
+ };
76
+ }
77
+ }]);
78
+ }();
79
+ RectangleRoi.toolType = "RectangleRoi";
80
+ RectangleRoi.utilityToolType = "RectangleRoi";
81
+ RectangleRoi.TID300Representation = TID300Polyline;
82
+ RectangleRoi.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
83
+ if (!TrackingIdentifier.includes(":")) {
84
+ return false;
85
+ }
86
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
87
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
88
+ cornerstone4Tag = _TrackingIdentifier$s2[0],
89
+ toolType = _TrackingIdentifier$s2[1];
90
+ if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
91
+ return false;
92
+ }
93
+ return toolType === RectangleRoi.toolType;
94
+ };
95
+ MeasurementReport.registerTool(RectangleRoi);
96
+
97
+ export { RectangleRoi as default };
@@ -0,0 +1,44 @@
1
+ export default Segmentation;
2
+ declare namespace Segmentation {
3
+ export { generateSegmentation };
4
+ export { generateToolState };
5
+ export { fillSegmentation };
6
+ }
7
+ /**
8
+ * generateSegmentation - Generates a DICOM Segmentation object given cornerstoneTools data.
9
+ *
10
+ * @param {object[]} images An array of the cornerstone image objects.
11
+ * @param {Object|Object[]} labelmaps3DorBrushData For 4.X: The cornerstone `Labelmap3D` object, or an array of objects.
12
+ * For 3.X: the BrushData.
13
+ * @param {number} cornerstoneToolsVersion The cornerstoneTools major version to map against.
14
+ * @returns {Object}
15
+ */
16
+ declare function generateSegmentation(images: object[], labelmaps3DorBrushData: any | any[], options?: {
17
+ includeSliceSpacing: boolean;
18
+ }, cornerstoneToolsVersion?: number): any;
19
+ /**
20
+ * generateToolState - Given a set of cornrstoneTools imageIds and a Segmentation buffer,
21
+ * derive cornerstoneTools toolState and brush metadata.
22
+ *
23
+ * @param {string[]} imageIds An array of the imageIds.
24
+ * @param {ArrayBuffer} arrayBuffer The SEG arrayBuffer.
25
+ * @param {*} metadataProvider
26
+ * @param {bool} skipOverlapping - skip checks for overlapping segs, default value false.
27
+ * @param {number} tolerance - default value 1.e-3.
28
+ * @param {number} cornerstoneToolsVersion - default value 4.
29
+ *
30
+ * @returns {Object} The toolState and an object from which the
31
+ * segment metadata can be derived.
32
+ */
33
+ declare function generateToolState(imageIds: string[], arrayBuffer: ArrayBuffer, metadataProvider: any, skipOverlapping?: bool, tolerance?: number, cornerstoneToolsVersion?: number): any;
34
+ /**
35
+ * fillSegmentation - Fills a derived segmentation dataset with cornerstoneTools `LabelMap3D` data.
36
+ *
37
+ * @param {object[]} segmentation An empty segmentation derived dataset.
38
+ * @param {Object|Object[]} inputLabelmaps3D The cornerstone `Labelmap3D` object, or an array of objects.
39
+ * @param {Object} userOptions Options object to override default options.
40
+ * @returns {Blob} description
41
+ */
42
+ declare function fillSegmentation(segmentation: object[], inputLabelmaps3D: any | any[], options?: {
43
+ includeSliceSpacing: boolean;
44
+ }, cornerstoneToolsVersion?: number): Blob;
@@ -0,0 +1,79 @@
1
+ import Segmentation$2 from './Segmentation_3X.js';
2
+ import Segmentation$1 from './Segmentation_4X.js';
3
+
4
+ var Segmentation = {
5
+ generateSegmentation: generateSegmentation,
6
+ generateToolState: generateToolState,
7
+ fillSegmentation: fillSegmentation
8
+ };
9
+
10
+ /**
11
+ * generateSegmentation - Generates a DICOM Segmentation object given cornerstoneTools data.
12
+ *
13
+ * @param {object[]} images An array of the cornerstone image objects.
14
+ * @param {Object|Object[]} labelmaps3DorBrushData For 4.X: The cornerstone `Labelmap3D` object, or an array of objects.
15
+ * For 3.X: the BrushData.
16
+ * @param {number} cornerstoneToolsVersion The cornerstoneTools major version to map against.
17
+ * @returns {Object}
18
+ */
19
+ function generateSegmentation(images, labelmaps3DorBrushData) {
20
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
21
+ includeSliceSpacing: true
22
+ };
23
+ var cornerstoneToolsVersion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 4;
24
+ if (cornerstoneToolsVersion === 4) {
25
+ return Segmentation$1.generateSegmentation(images, labelmaps3DorBrushData, options);
26
+ }
27
+ if (cornerstoneToolsVersion === 3) {
28
+ return Segmentation$2.generateSegmentation(images, labelmaps3DorBrushData, options);
29
+ }
30
+ console.warn("No generateSegmentation adapater for cornerstone version ".concat(cornerstoneToolsVersion, ", exiting."));
31
+ }
32
+
33
+ /**
34
+ * generateToolState - Given a set of cornrstoneTools imageIds and a Segmentation buffer,
35
+ * derive cornerstoneTools toolState and brush metadata.
36
+ *
37
+ * @param {string[]} imageIds An array of the imageIds.
38
+ * @param {ArrayBuffer} arrayBuffer The SEG arrayBuffer.
39
+ * @param {*} metadataProvider
40
+ * @param {bool} skipOverlapping - skip checks for overlapping segs, default value false.
41
+ * @param {number} tolerance - default value 1.e-3.
42
+ * @param {number} cornerstoneToolsVersion - default value 4.
43
+ *
44
+ * @returns {Object} The toolState and an object from which the
45
+ * segment metadata can be derived.
46
+ */
47
+ function generateToolState(imageIds, arrayBuffer, metadataProvider) {
48
+ var skipOverlapping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
49
+ var tolerance = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1e-3;
50
+ var cornerstoneToolsVersion = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 4;
51
+ if (cornerstoneToolsVersion === 4) {
52
+ return Segmentation$1.generateToolState(imageIds, arrayBuffer, metadataProvider, skipOverlapping, tolerance);
53
+ }
54
+ if (cornerstoneToolsVersion === 3) {
55
+ return Segmentation$2.generateToolState(imageIds, arrayBuffer, metadataProvider);
56
+ }
57
+ console.warn("No generateToolState adapater for cornerstone version ".concat(cornerstoneToolsVersion, ", exiting."));
58
+ }
59
+
60
+ /**
61
+ * fillSegmentation - Fills a derived segmentation dataset with cornerstoneTools `LabelMap3D` data.
62
+ *
63
+ * @param {object[]} segmentation An empty segmentation derived dataset.
64
+ * @param {Object|Object[]} inputLabelmaps3D The cornerstone `Labelmap3D` object, or an array of objects.
65
+ * @param {Object} userOptions Options object to override default options.
66
+ * @returns {Blob} description
67
+ */
68
+ function fillSegmentation(segmentation, inputLabelmaps3D) {
69
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
70
+ includeSliceSpacing: true
71
+ };
72
+ var cornerstoneToolsVersion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 4;
73
+ if (cornerstoneToolsVersion === 4) {
74
+ return Segmentation$1.fillSegmentation(segmentation, inputLabelmaps3D, options);
75
+ }
76
+ console.warn("No generateSegmentation adapater for cornerstone version ".concat(cornerstoneToolsVersion, ", exiting."));
77
+ }
78
+
79
+ export { Segmentation as default };
@@ -0,0 +1,45 @@
1
+ export default Segmentation;
2
+ export type BrushData = {
3
+ /**
4
+ * - The cornerstoneTools global toolState.
5
+ */
6
+ toolState: any;
7
+ /**
8
+ * - The cornerstoneTools segment metadata that corresponds to the
9
+ * seriesInstanceUid.
10
+ */
11
+ segments: any[];
12
+ };
13
+ declare namespace Segmentation {
14
+ export { generateSegmentation };
15
+ export { generateToolState };
16
+ }
17
+ /**
18
+ *
19
+ * @typedef {Object} BrushData
20
+ * @property {Object} toolState - The cornerstoneTools global toolState.
21
+ * @property {Object[]} segments - The cornerstoneTools segment metadata that corresponds to the
22
+ * seriesInstanceUid.
23
+ */
24
+ /**
25
+ * generateSegmentation - Generates cornerstoneTools brush data, given a stack of
26
+ * imageIds, images and the cornerstoneTools brushData.
27
+ *
28
+ * @param {object[]} images An array of the cornerstone image objects.
29
+ * @param {BrushData} brushData and object containing the brushData.
30
+ * @returns {type} description
31
+ */
32
+ declare function generateSegmentation(images: object[], brushData: BrushData, options?: {
33
+ includeSliceSpacing: boolean;
34
+ }): type;
35
+ /**
36
+ * generateToolState - Given a set of cornrstoneTools imageIds and a Segmentation buffer,
37
+ * derive cornerstoneTools toolState and brush metadata.
38
+ *
39
+ * @param {string[]} imageIds An array of the imageIds.
40
+ * @param {ArrayBuffer} arrayBuffer The SEG arrayBuffer.
41
+ * @param {*} metadataProvider
42
+ * @returns {Object} The toolState and an object from which the
43
+ * segment metadata can be derived.
44
+ */
45
+ declare function generateToolState(imageIds: string[], arrayBuffer: ArrayBuffer, metadataProvider: any): any;