@cornerstonejs/adapters 2.0.0-beta.13 → 2.0.0-beta.15

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