@cornerstonejs/adapters 2.0.0-beta.8 → 2.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 (138) hide show
  1. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +493 -0
  2. package/dist/esm/adapters/Cornerstone/Angle.d.ts +42 -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 +58 -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 +29 -0
  19. package/dist/esm/adapters/Cornerstone/MeasurementReport.js +276 -0
  20. package/dist/esm/adapters/Cornerstone/ParametricMap.d.ts +7 -0
  21. package/dist/esm/adapters/Cornerstone/ParametricMap.js +210 -0
  22. package/dist/esm/adapters/Cornerstone/RectangleRoi.d.ts +44 -0
  23. package/dist/esm/adapters/Cornerstone/RectangleRoi.js +97 -0
  24. package/dist/esm/adapters/Cornerstone/Segmentation.d.ts +7 -0
  25. package/dist/esm/adapters/Cornerstone/Segmentation.js +73 -0
  26. package/dist/esm/adapters/Cornerstone/Segmentation_3X.d.ts +13 -0
  27. package/dist/esm/adapters/Cornerstone/Segmentation_3X.js +411 -0
  28. package/dist/esm/adapters/Cornerstone/Segmentation_4X.d.ts +13 -0
  29. package/dist/esm/adapters/Cornerstone/Segmentation_4X.js +1152 -0
  30. package/dist/esm/adapters/Cornerstone/cornerstone4Tag.d.ts +2 -0
  31. package/dist/esm/adapters/Cornerstone/cornerstone4Tag.js +3 -0
  32. package/dist/esm/adapters/Cornerstone/index.d.ts +34 -0
  33. package/dist/esm/adapters/Cornerstone/index.js +33 -0
  34. package/dist/esm/adapters/Cornerstone3D/Angle.js +109 -0
  35. package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.d.ts +35 -0
  36. package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.js +123 -0
  37. package/dist/esm/adapters/Cornerstone3D/Bidirectional.js +147 -0
  38. package/dist/{types → esm}/adapters/Cornerstone3D/CircleROI.d.ts +0 -7
  39. package/dist/esm/adapters/Cornerstone3D/CircleROI.js +96 -0
  40. package/dist/esm/adapters/Cornerstone3D/CobbAngle.js +113 -0
  41. package/dist/esm/adapters/Cornerstone3D/CodingScheme.d.ts +9 -0
  42. package/dist/esm/adapters/Cornerstone3D/CodingScheme.js +15 -0
  43. package/dist/esm/adapters/Cornerstone3D/EllipticalROI.js +160 -0
  44. package/dist/esm/adapters/Cornerstone3D/Length.d.ts +41 -0
  45. package/dist/esm/adapters/Cornerstone3D/Length.js +101 -0
  46. package/dist/{types → esm}/adapters/Cornerstone3D/MeasurementReport.d.ts +1 -8
  47. package/dist/esm/adapters/Cornerstone3D/MeasurementReport.js +281 -0
  48. package/dist/esm/adapters/Cornerstone3D/ParametricMap/generateToolState.d.ts +3 -0
  49. package/dist/esm/adapters/Cornerstone3D/ParametricMap/generateToolState.js +11 -0
  50. package/dist/esm/adapters/Cornerstone3D/ParametricMap/index.d.ts +1 -0
  51. package/dist/esm/adapters/Cornerstone3D/ParametricMap/index.js +1 -0
  52. package/dist/{types → esm}/adapters/Cornerstone3D/PlanarFreehandROI.d.ts +0 -2
  53. package/dist/esm/adapters/Cornerstone3D/PlanarFreehandROI.js +126 -0
  54. package/dist/esm/adapters/Cornerstone3D/Probe.d.ts +33 -0
  55. package/dist/esm/adapters/Cornerstone3D/Probe.js +87 -0
  56. package/dist/esm/adapters/Cornerstone3D/RTStruct/RTSS.d.ts +67 -0
  57. package/dist/esm/adapters/Cornerstone3D/RTStruct/RTSS.js +175 -0
  58. package/dist/esm/adapters/Cornerstone3D/RTStruct/index.js +6 -0
  59. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getPatientModule.d.ts +13 -0
  60. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getPatientModule.js +22 -0
  61. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getRTROIObservationsSequence.d.ts +6 -0
  62. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getRTROIObservationsSequence.js +10 -0
  63. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getRTSeriesModule.d.ts +4 -0
  64. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getRTSeriesModule.js +9 -0
  65. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedFrameOfReferenceSequence.d.ts +11 -0
  66. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedFrameOfReferenceSequence.js +22 -0
  67. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedSeriesSequence.d.ts +4 -0
  68. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedSeriesSequence.js +27 -0
  69. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getStructureSetModule.d.ts +7 -0
  70. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getStructureSetModule.js +12 -0
  71. package/dist/esm/adapters/Cornerstone3D/RectangleROI.js +94 -0
  72. package/dist/{types → esm}/adapters/Cornerstone3D/Segmentation/generateLabelMaps2DFrom3D.d.ts +0 -6
  73. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateLabelMaps2DFrom3D.js +34 -0
  74. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateSegmentation.d.ts +2 -0
  75. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateSegmentation.js +29 -0
  76. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateToolState.d.ts +2 -0
  77. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateToolState.js +9 -0
  78. package/dist/esm/adapters/Cornerstone3D/Segmentation/index.js +3 -0
  79. package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.js +93 -0
  80. package/dist/esm/adapters/Cornerstone3D/cornerstone3DTag.d.ts +2 -0
  81. package/dist/esm/adapters/Cornerstone3D/cornerstone3DTag.js +3 -0
  82. package/dist/{types → esm}/adapters/Cornerstone3D/index.d.ts +18 -6
  83. package/dist/esm/adapters/Cornerstone3D/index.js +45 -0
  84. package/dist/esm/adapters/Cornerstone3D/isValidCornerstoneTrackingIdentifier.js +18 -0
  85. package/dist/esm/adapters/VTKjs/Segmentation.d.ts +3 -0
  86. package/dist/esm/adapters/VTKjs/Segmentation.js +186 -0
  87. package/dist/esm/adapters/VTKjs/index.d.ts +5 -0
  88. package/dist/esm/adapters/VTKjs/index.js +7 -0
  89. package/dist/{types → esm}/adapters/enums/Events.d.ts +0 -6
  90. package/dist/esm/adapters/enums/Events.js +7 -0
  91. package/dist/esm/adapters/enums/index.js +1 -0
  92. package/dist/esm/adapters/helpers/checkIfPerpendicular.d.ts +1 -0
  93. package/dist/esm/adapters/helpers/checkIfPerpendicular.js +7 -0
  94. package/dist/esm/adapters/helpers/checkOrientation.d.ts +1 -0
  95. package/dist/esm/adapters/helpers/checkOrientation.js +22 -0
  96. package/dist/esm/adapters/helpers/codeMeaningEquals.d.ts +2 -0
  97. package/dist/esm/adapters/helpers/codeMeaningEquals.js +7 -0
  98. package/dist/esm/adapters/helpers/compareArrays.d.ts +1 -0
  99. package/dist/esm/adapters/helpers/compareArrays.js +16 -0
  100. package/dist/esm/adapters/helpers/downloadDICOMData.d.ts +5 -0
  101. package/dist/esm/adapters/helpers/downloadDICOMData.js +26 -0
  102. package/dist/esm/adapters/helpers/getDatasetsFromImages.d.ts +1 -0
  103. package/dist/esm/adapters/helpers/getDatasetsFromImages.js +33 -0
  104. package/dist/esm/adapters/helpers/graphicTypeEquals.d.ts +2 -0
  105. package/dist/esm/adapters/helpers/graphicTypeEquals.js +7 -0
  106. package/dist/esm/adapters/helpers/index.js +4 -0
  107. package/dist/esm/adapters/helpers/toArray.js +5 -0
  108. package/dist/esm/adapters/index.d.ts +66 -0
  109. package/dist/esm/adapters/index.js +24 -0
  110. package/dist/esm/index.d.ts +2 -0
  111. package/dist/esm/index.js +5 -0
  112. package/dist/umd/adapters.umd.js +5769 -0
  113. package/dist/umd/adapters.umd.js.map +1 -0
  114. package/package.json +47 -11
  115. package/dist/adapters.es.js +0 -5585
  116. package/dist/adapters.es.js.map +0 -1
  117. package/dist/types/adapters/Cornerstone/index.d.ts +0 -16
  118. package/dist/types/adapters/Cornerstone3D/RTStruct/RTSS.d.ts +0 -26
  119. package/dist/types/adapters/Cornerstone3D/Segmentation/generateSegmentation.d.ts +0 -8
  120. package/dist/types/adapters/Cornerstone3D/Segmentation/generateToolState.d.ts +0 -16
  121. package/dist/types/adapters/VTKjs/index.d.ts +0 -4
  122. package/dist/types/adapters/helpers/codeMeaningEquals.d.ts +0 -9
  123. package/dist/types/adapters/helpers/downloadDICOMData.d.ts +0 -10
  124. package/dist/types/adapters/helpers/graphicTypeEquals.d.ts +0 -7
  125. package/dist/types/adapters/index.d.ts +0 -49
  126. package/dist/types/index.d.ts +0 -2
  127. /package/dist/{types → esm}/adapters/Cornerstone3D/Angle.d.ts +0 -0
  128. /package/dist/{types → esm}/adapters/Cornerstone3D/Bidirectional.d.ts +0 -0
  129. /package/dist/{types → esm}/adapters/Cornerstone3D/CobbAngle.d.ts +0 -0
  130. /package/dist/{types → esm}/adapters/Cornerstone3D/EllipticalROI.d.ts +0 -0
  131. /package/dist/{types → esm}/adapters/Cornerstone3D/RTStruct/index.d.ts +0 -0
  132. /package/dist/{types → esm}/adapters/Cornerstone3D/RectangleROI.d.ts +0 -0
  133. /package/dist/{types → esm}/adapters/Cornerstone3D/Segmentation/index.d.ts +0 -0
  134. /package/dist/{types → esm}/adapters/Cornerstone3D/UltrasoundDirectional.d.ts +0 -0
  135. /package/dist/{types → esm}/adapters/Cornerstone3D/isValidCornerstoneTrackingIdentifier.d.ts +0 -0
  136. /package/dist/{types → esm}/adapters/enums/index.d.ts +0 -0
  137. /package/dist/{types → esm}/adapters/helpers/index.d.ts +0 -0
  138. /package/dist/{types → esm}/adapters/helpers/toArray.d.ts +0 -0
@@ -0,0 +1,281 @@
1
+ import { objectSpread2 as _objectSpread2, createClass as _createClass, classCallCheck as _classCallCheck } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { utilities, derivations, normalizers, data } from 'dcmjs';
3
+ import CORNERSTONE_3D_TAG from './cornerstone3DTag.js';
4
+ import { toArray } from '../helpers/toArray.js';
5
+ import { codeMeaningEquals } from '../helpers/codeMeaningEquals.js';
6
+ import '../helpers/downloadDICOMData.js';
7
+ import CodingScheme from './CodingScheme.js';
8
+
9
+ var _MeasurementReport;
10
+ var TID1500 = utilities.TID1500,
11
+ addAccessors = utilities.addAccessors;
12
+ var StructuredReport = derivations.StructuredReport;
13
+ var Normalizer = normalizers.Normalizer;
14
+ var TID1500MeasurementReport = TID1500.TID1500MeasurementReport,
15
+ TID1501MeasurementGroup = TID1500.TID1501MeasurementGroup;
16
+ var DicomMetaDictionary = data.DicomMetaDictionary;
17
+ var FINDING = {
18
+ CodingSchemeDesignator: "DCM",
19
+ CodeValue: "121071"
20
+ };
21
+ var FINDING_SITE = {
22
+ CodingSchemeDesignator: "SCT",
23
+ CodeValue: "363698007"
24
+ };
25
+ var FINDING_SITE_OLD = {
26
+ CodingSchemeDesignator: "SRT",
27
+ CodeValue: "G-C0E3"
28
+ };
29
+ var codeValueMatch = function codeValueMatch(group, code, oldCode) {
30
+ var ConceptNameCodeSequence = group.ConceptNameCodeSequence;
31
+ if (!ConceptNameCodeSequence) {
32
+ return;
33
+ }
34
+ var CodingSchemeDesignator = ConceptNameCodeSequence.CodingSchemeDesignator,
35
+ CodeValue = ConceptNameCodeSequence.CodeValue;
36
+ return CodingSchemeDesignator == code.CodingSchemeDesignator && CodeValue == code.CodeValue || oldCode && CodingSchemeDesignator == oldCode.CodingSchemeDesignator && CodeValue == oldCode.CodeValue;
37
+ };
38
+ function getTID300ContentItem(tool, toolType, ReferencedSOPSequence, toolClass, worldToImageCoords) {
39
+ var args = toolClass.getTID300RepresentationArguments(tool, worldToImageCoords);
40
+ args.ReferencedSOPSequence = ReferencedSOPSequence;
41
+ var TID300Measurement = new toolClass.TID300Representation(args);
42
+ return TID300Measurement;
43
+ }
44
+ function getMeasurementGroup(toolType, toolData, ReferencedSOPSequence, worldToImageCoords) {
45
+ var toolTypeData = toolData[toolType];
46
+ var toolClass = MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolType];
47
+ if (!toolTypeData || !toolTypeData.data || !toolTypeData.data.length || !toolClass) {
48
+ return;
49
+ }
50
+ var Measurements = toolTypeData.data.map(function (tool) {
51
+ return getTID300ContentItem(tool, toolType, ReferencedSOPSequence, toolClass, worldToImageCoords);
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: "getCornerstoneLabelFromDefaultState",
61
+ value: function getCornerstoneLabelFromDefaultState(defaultState) {
62
+ var _defaultState$finding = defaultState.findingSites,
63
+ findingSites = _defaultState$finding === void 0 ? [] : _defaultState$finding,
64
+ finding = defaultState.finding;
65
+ var cornersoneFreeTextCodingValue = CodingScheme.codeValues.CORNERSTONEFREETEXT;
66
+ var freeTextLabel = findingSites.find(function (fs) {
67
+ return fs.CodeValue === cornersoneFreeTextCodingValue;
68
+ });
69
+ if (freeTextLabel) {
70
+ return freeTextLabel.CodeMeaning;
71
+ }
72
+ if (finding && finding.CodeValue === cornersoneFreeTextCodingValue) {
73
+ return finding.CodeMeaning;
74
+ }
75
+ }
76
+ }, {
77
+ key: "generateDatasetMeta",
78
+ value: function generateDatasetMeta() {
79
+ var fileMetaInformationVersionArray = new Uint8Array(2);
80
+ fileMetaInformationVersionArray[1] = 1;
81
+ var _meta = {
82
+ FileMetaInformationVersion: {
83
+ Value: [fileMetaInformationVersionArray.buffer],
84
+ vr: "OB"
85
+ },
86
+ TransferSyntaxUID: {
87
+ Value: ["1.2.840.10008.1.2.1"],
88
+ vr: "UI"
89
+ },
90
+ ImplementationClassUID: {
91
+ Value: [DicomMetaDictionary.uid()],
92
+ vr: "UI"
93
+ },
94
+ ImplementationVersionName: {
95
+ Value: ["dcmjs"],
96
+ vr: "SH"
97
+ }
98
+ };
99
+ return _meta;
100
+ }
101
+ }, {
102
+ key: "getSetupMeasurementData",
103
+ value: function getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, toolType) {
104
+ var ContentSequence = MeasurementGroup.ContentSequence;
105
+ var contentSequenceArr = toArray(ContentSequence);
106
+ var findingGroup = contentSequenceArr.find(function (group) {
107
+ return codeValueMatch(group, FINDING);
108
+ });
109
+ var findingSiteGroups = contentSequenceArr.filter(function (group) {
110
+ return codeValueMatch(group, FINDING_SITE, FINDING_SITE_OLD);
111
+ }) || [];
112
+ var NUMGroup = contentSequenceArr.find(function (group) {
113
+ return group.ValueType === "NUM";
114
+ });
115
+ var SCOORDGroup = toArray(NUMGroup.ContentSequence).find(function (group) {
116
+ return group.ValueType === "SCOORD";
117
+ });
118
+ var ReferencedSOPSequence = SCOORDGroup.ContentSequence.ReferencedSOPSequence;
119
+ var ReferencedSOPInstanceUID = ReferencedSOPSequence.ReferencedSOPInstanceUID,
120
+ ReferencedFrameNumber = ReferencedSOPSequence.ReferencedFrameNumber;
121
+ var referencedImageId = sopInstanceUIDToImageIdMap[ReferencedSOPInstanceUID];
122
+ var imagePlaneModule = metadata.get("imagePlaneModule", referencedImageId);
123
+ var finding = findingGroup ? addAccessors(findingGroup.ConceptCodeSequence) : undefined;
124
+ var findingSites = findingSiteGroups.map(function (fsg) {
125
+ return addAccessors(fsg.ConceptCodeSequence);
126
+ });
127
+ var defaultState = {
128
+ description: undefined,
129
+ sopInstanceUid: ReferencedSOPInstanceUID,
130
+ annotation: {
131
+ annotationUID: DicomMetaDictionary.uid(),
132
+ metadata: {
133
+ toolName: toolType,
134
+ referencedImageId: referencedImageId,
135
+ FrameOfReferenceUID: imagePlaneModule.frameOfReferenceUID,
136
+ label: ""
137
+ },
138
+ data: undefined
139
+ },
140
+ finding: finding,
141
+ findingSites: findingSites
142
+ };
143
+ if (defaultState.finding) {
144
+ defaultState.description = defaultState.finding.CodeMeaning;
145
+ }
146
+ defaultState.annotation.metadata.label = MeasurementReport.getCornerstoneLabelFromDefaultState(defaultState);
147
+ return {
148
+ defaultState: defaultState,
149
+ NUMGroup: NUMGroup,
150
+ SCOORDGroup: SCOORDGroup,
151
+ ReferencedSOPSequence: ReferencedSOPSequence,
152
+ ReferencedSOPInstanceUID: ReferencedSOPInstanceUID,
153
+ ReferencedFrameNumber: ReferencedFrameNumber
154
+ };
155
+ }
156
+ }, {
157
+ key: "generateReport",
158
+ value: function generateReport(toolState, metadataProvider, worldToImageCoords, options) {
159
+ var allMeasurementGroups = [];
160
+ var sopInstanceUIDsToSeriesInstanceUIDMap = {};
161
+ var derivationSourceDatasets = [];
162
+ var _meta = MeasurementReport.generateDatasetMeta();
163
+ Object.keys(toolState).forEach(function (imageId) {
164
+ var sopCommonModule = metadataProvider.get("sopCommonModule", imageId);
165
+ var instance = metadataProvider.get("instance", imageId);
166
+ var sopInstanceUID = sopCommonModule.sopInstanceUID,
167
+ sopClassUID = sopCommonModule.sopClassUID;
168
+ var seriesInstanceUID = instance.SeriesInstanceUID;
169
+ sopInstanceUIDsToSeriesInstanceUIDMap[sopInstanceUID] = seriesInstanceUID;
170
+ if (!derivationSourceDatasets.find(function (dsd) {
171
+ return dsd.SeriesInstanceUID === seriesInstanceUID;
172
+ })) {
173
+ var derivationSourceDataset = MeasurementReport.generateDerivationSourceDataset(instance);
174
+ derivationSourceDatasets.push(derivationSourceDataset);
175
+ }
176
+ var frameNumber = metadataProvider.get("frameNumber", imageId);
177
+ var toolData = toolState[imageId];
178
+ var toolTypes = Object.keys(toolData);
179
+ var ReferencedSOPSequence = {
180
+ ReferencedSOPClassUID: sopClassUID,
181
+ ReferencedSOPInstanceUID: sopInstanceUID,
182
+ ReferencedFrameNumber: undefined
183
+ };
184
+ if (instance && instance.NumberOfFrames && instance.NumberOfFrames > 1 || Normalizer.isMultiframeSOPClassUID(sopClassUID)) {
185
+ ReferencedSOPSequence.ReferencedFrameNumber = frameNumber;
186
+ }
187
+ var measurementGroups = [];
188
+ toolTypes.forEach(function (toolType) {
189
+ var group = getMeasurementGroup(toolType, toolData, ReferencedSOPSequence, worldToImageCoords);
190
+ if (group) {
191
+ measurementGroups.push(group);
192
+ }
193
+ });
194
+ allMeasurementGroups = allMeasurementGroups.concat(measurementGroups);
195
+ });
196
+ var tid1500MeasurementReport = new TID1500MeasurementReport({
197
+ TID1501MeasurementGroups: allMeasurementGroups
198
+ }, options);
199
+ var report = new StructuredReport(derivationSourceDatasets, options);
200
+ var contentItem = tid1500MeasurementReport.contentItem(derivationSourceDatasets, _objectSpread2(_objectSpread2({}, options), {}, {
201
+ sopInstanceUIDsToSeriesInstanceUIDMap: sopInstanceUIDsToSeriesInstanceUIDMap
202
+ }));
203
+ report.dataset = Object.assign(report.dataset, contentItem);
204
+ report.dataset._meta = _meta;
205
+ report.SpecificCharacterSet = "ISO_IR 192";
206
+ return report;
207
+ }
208
+ }, {
209
+ key: "generateToolState",
210
+ value: function generateToolState(dataset, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata, hooks) {
211
+ if (dataset.ContentTemplateSequence.TemplateIdentifier !== "1500") {
212
+ throw new Error("This package can currently only interpret DICOM SR TID 1500");
213
+ }
214
+ var REPORT = "Imaging Measurements";
215
+ var GROUP = "Measurement Group";
216
+ var TRACKING_IDENTIFIER = "Tracking Identifier";
217
+ var TRACKING_UNIQUE_IDENTIFIER = "Tracking Unique Identifier";
218
+ var imagingMeasurementContent = toArray(dataset.ContentSequence).find(codeMeaningEquals(REPORT));
219
+ var measurementGroups = toArray(imagingMeasurementContent.ContentSequence).filter(codeMeaningEquals(GROUP));
220
+ var measurementData = {};
221
+ var cornerstoneToolClasses = MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE;
222
+ var registeredToolClasses = [];
223
+ Object.keys(cornerstoneToolClasses).forEach(function (key) {
224
+ registeredToolClasses.push(cornerstoneToolClasses[key]);
225
+ measurementData[key] = [];
226
+ });
227
+ measurementGroups.forEach(function (measurementGroup) {
228
+ try {
229
+ var _hooks$getToolClass;
230
+ var measurementGroupContentSequence = toArray(measurementGroup.ContentSequence);
231
+ var TrackingIdentifierGroup = measurementGroupContentSequence.find(function (contentItem) {
232
+ return contentItem.ConceptNameCodeSequence.CodeMeaning === TRACKING_IDENTIFIER;
233
+ });
234
+ var TrackingIdentifierValue = TrackingIdentifierGroup.TextValue;
235
+ var TrackingUniqueIdentifierGroup = measurementGroupContentSequence.find(function (contentItem) {
236
+ return contentItem.ConceptNameCodeSequence.CodeMeaning === TRACKING_UNIQUE_IDENTIFIER;
237
+ });
238
+ var TrackingUniqueIdentifierValue = TrackingUniqueIdentifierGroup === null || TrackingUniqueIdentifierGroup === void 0 ? void 0 : TrackingUniqueIdentifierGroup.UID;
239
+ var toolClass = (hooks === null || hooks === void 0 || (_hooks$getToolClass = hooks.getToolClass) === null || _hooks$getToolClass === void 0 ? void 0 : _hooks$getToolClass.call(hooks, measurementGroup, dataset, registeredToolClasses)) || registeredToolClasses.find(function (tc) {
240
+ return tc.isValidCornerstoneTrackingIdentifier(TrackingIdentifierValue);
241
+ });
242
+ if (toolClass) {
243
+ var measurement = toolClass.getMeasurementData(measurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata);
244
+ measurement.TrackingUniqueIdentifier = TrackingUniqueIdentifierValue;
245
+ console.log("=== ".concat(toolClass.toolType, " ==="));
246
+ console.log(measurement);
247
+ measurementData[toolClass.toolType].push(measurement);
248
+ }
249
+ } catch (e) {
250
+ console.warn("Unable to generate tool state for", measurementGroup, e);
251
+ }
252
+ });
253
+ return measurementData;
254
+ }
255
+ }, {
256
+ key: "registerTool",
257
+ value: function registerTool(toolClass) {
258
+ MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE[toolClass.utilityToolType] = toolClass;
259
+ MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolClass.toolType] = toolClass;
260
+ MeasurementReport.MEASUREMENT_BY_TOOLTYPE[toolClass.toolType] = toolClass.utilityToolType;
261
+ }
262
+ }]);
263
+ }();
264
+ _MeasurementReport = MeasurementReport;
265
+ _MeasurementReport.CORNERSTONE_3D_TAG = CORNERSTONE_3D_TAG;
266
+ _MeasurementReport.MEASUREMENT_BY_TOOLTYPE = {};
267
+ _MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE = {};
268
+ _MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE = {};
269
+ _MeasurementReport.generateDerivationSourceDataset = function (instance) {
270
+ var _vrMap = {
271
+ PixelData: "OW"
272
+ };
273
+ var _meta = _MeasurementReport.generateDatasetMeta();
274
+ var derivationSourceDataset = _objectSpread2(_objectSpread2({}, instance), {}, {
275
+ _meta: _meta,
276
+ _vrMap: _vrMap
277
+ });
278
+ return derivationSourceDataset;
279
+ };
280
+
281
+ export { MeasurementReport as default };
@@ -0,0 +1,3 @@
1
+ export function generateToolState(imageIds: any, arrayBuffer: any, metadataProvider: any, skipOverlapping?: boolean, tolerance?: number): Promise<{
2
+ pixelData: any;
3
+ }>;
@@ -0,0 +1,11 @@
1
+ import { CornerstonePMAP } from '../../Cornerstone/index.js';
2
+
3
+ var ParametricMap = CornerstonePMAP.ParametricMap;
4
+ var generateToolStateCornerstone = ParametricMap.generateToolState;
5
+ function generateToolState(imageIds, arrayBuffer, metadataProvider) {
6
+ var skipOverlapping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
7
+ var tolerance = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1e-3;
8
+ return generateToolStateCornerstone(imageIds, arrayBuffer, metadataProvider, skipOverlapping, tolerance);
9
+ }
10
+
11
+ export { generateToolState };
@@ -0,0 +1 @@
1
+ export { generateToolState } from "./generateToolState";
@@ -0,0 +1 @@
1
+ export { generateToolState } from './generateToolState.js';
@@ -20,7 +20,6 @@ declare class PlanarFreehandROI {
20
20
  findingSites: any[];
21
21
  };
22
22
  static getTID300RepresentationArguments(tool: any, worldToImageCoords: any): {
23
- /** From cachedStats */
24
23
  points: any;
25
24
  area: any;
26
25
  areaUnit: any;
@@ -29,7 +28,6 @@ declare class PlanarFreehandROI {
29
28
  mean: any;
30
29
  max: any;
31
30
  stdDev: any;
32
- /** Other */
33
31
  trackingIdentifierTextValue: string;
34
32
  finding: any;
35
33
  findingSites: any;
@@ -0,0 +1,126 @@
1
+ import { slicedToArray as _slicedToArray, createClass as _createClass, defineProperty as _defineProperty, classCallCheck as _classCallCheck } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
+ import MeasurementReport from './MeasurementReport.js';
3
+ import { utilities } from 'dcmjs';
4
+ import CORNERSTONE_3D_TAG from './cornerstone3DTag.js';
5
+ import { vec3 } from 'gl-matrix';
6
+
7
+ var _PlanarFreehandROI;
8
+ var TID300Polyline = utilities.TID300.Polyline;
9
+ var PLANARFREEHANDROI = "PlanarFreehandROI";
10
+ var trackingIdentifierTextValue = "".concat(CORNERSTONE_3D_TAG, ":").concat(PLANARFREEHANDROI);
11
+ var closedContourThreshold = 1e-5;
12
+ var PlanarFreehandROI = /*#__PURE__*/function () {
13
+ function PlanarFreehandROI() {
14
+ _classCallCheck(this, PlanarFreehandROI);
15
+ }
16
+ return _createClass(PlanarFreehandROI, null, [{
17
+ key: "getMeasurementData",
18
+ value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
19
+ var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, PlanarFreehandROI.toolType),
20
+ defaultState = _MeasurementReport$ge.defaultState,
21
+ NUMGroup = _MeasurementReport$ge.NUMGroup,
22
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
23
+ ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
24
+ var referencedImageId = defaultState.annotation.metadata.referencedImageId;
25
+ var GraphicData = SCOORDGroup.GraphicData;
26
+ var worldCoords = [];
27
+ for (var i = 0; i < GraphicData.length; i += 2) {
28
+ var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
29
+ worldCoords.push(point);
30
+ }
31
+ var distanceBetweenFirstAndLastPoint = vec3.distance(worldCoords[worldCoords.length - 1], worldCoords[0]);
32
+ var isOpenContour = true;
33
+ if (distanceBetweenFirstAndLastPoint < closedContourThreshold) {
34
+ worldCoords.pop();
35
+ isOpenContour = false;
36
+ }
37
+ var points = [];
38
+ if (isOpenContour) {
39
+ points.push(worldCoords[0], worldCoords[worldCoords.length - 1]);
40
+ }
41
+ var state = defaultState;
42
+ state.annotation.data = {
43
+ contour: {
44
+ polyline: worldCoords,
45
+ closed: !isOpenContour
46
+ },
47
+ handles: {
48
+ points: points,
49
+ activeHandleIndex: null,
50
+ textBox: {
51
+ hasMoved: false
52
+ }
53
+ },
54
+ cachedStats: _defineProperty({}, "imageId:".concat(referencedImageId), {
55
+ area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : null
56
+ }),
57
+ frameNumber: ReferencedFrameNumber
58
+ };
59
+ return state;
60
+ }
61
+ }, {
62
+ key: "getTID300RepresentationArguments",
63
+ value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
64
+ var data = tool.data,
65
+ finding = tool.finding,
66
+ findingSites = tool.findingSites,
67
+ metadata = tool.metadata;
68
+ var _data$contour = data.contour,
69
+ polyline = _data$contour.polyline,
70
+ closed = _data$contour.closed;
71
+ var isOpenContour = closed !== true;
72
+ var referencedImageId = metadata.referencedImageId;
73
+ if (!referencedImageId) {
74
+ throw new Error("PlanarFreehandROI.getTID300RepresentationArguments: referencedImageId is not defined");
75
+ }
76
+ var points = polyline.map(function (worldPos) {
77
+ return worldToImageCoords(referencedImageId, worldPos);
78
+ });
79
+ if (!isOpenContour) {
80
+ var firstPoint = points[0];
81
+ points.push([firstPoint[0], firstPoint[1]]);
82
+ }
83
+ var _ref = data.cachedStats["imageId:".concat(referencedImageId)] || {},
84
+ area = _ref.area,
85
+ areaUnit = _ref.areaUnit,
86
+ modalityUnit = _ref.modalityUnit,
87
+ perimeter = _ref.perimeter,
88
+ mean = _ref.mean,
89
+ max = _ref.max,
90
+ stdDev = _ref.stdDev;
91
+ return {
92
+ points: points,
93
+ area: area,
94
+ areaUnit: areaUnit,
95
+ perimeter: perimeter,
96
+ modalityUnit: modalityUnit,
97
+ mean: mean,
98
+ max: max,
99
+ stdDev: stdDev,
100
+ trackingIdentifierTextValue: trackingIdentifierTextValue,
101
+ finding: finding,
102
+ findingSites: findingSites || []
103
+ };
104
+ }
105
+ }]);
106
+ }();
107
+ _PlanarFreehandROI = PlanarFreehandROI;
108
+ _PlanarFreehandROI.toolType = PLANARFREEHANDROI;
109
+ _PlanarFreehandROI.utilityToolType = PLANARFREEHANDROI;
110
+ _PlanarFreehandROI.TID300Representation = TID300Polyline;
111
+ _PlanarFreehandROI.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
112
+ if (!TrackingIdentifier.includes(":")) {
113
+ return false;
114
+ }
115
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
116
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
117
+ cornerstone3DTag = _TrackingIdentifier$s2[0],
118
+ toolType = _TrackingIdentifier$s2[1];
119
+ if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
120
+ return false;
121
+ }
122
+ return toolType === PLANARFREEHANDROI;
123
+ };
124
+ MeasurementReport.registerTool(PlanarFreehandROI);
125
+
126
+ export { PlanarFreehandROI as default };
@@ -0,0 +1,33 @@
1
+ export default Probe;
2
+ declare class Probe {
3
+ static getMeasurementData(MeasurementGroup: any, sopInstanceUIDToImageIdMap: any, imageToWorldCoords: any, metadata: any): {
4
+ description: any;
5
+ sopInstanceUid: any;
6
+ annotation: {
7
+ annotationUID: any;
8
+ metadata: {
9
+ toolName: any;
10
+ referencedImageId: any;
11
+ FrameOfReferenceUID: any;
12
+ label: string;
13
+ };
14
+ data: any;
15
+ };
16
+ finding: any;
17
+ findingSites: any[];
18
+ };
19
+ static getTID300RepresentationArguments(tool: any, worldToImageCoords: any): {
20
+ points: any;
21
+ trackingIdentifierTextValue: string;
22
+ findingSites: any;
23
+ finding: any;
24
+ };
25
+ }
26
+ declare namespace Probe {
27
+ export { PROBE as toolType };
28
+ export { PROBE as utilityToolType };
29
+ export { TID300Point as TID300Representation };
30
+ export function isValidCornerstoneTrackingIdentifier(TrackingIdentifier: any): boolean;
31
+ }
32
+ declare const PROBE: "Probe";
33
+ declare const TID300Point: any;
@@ -0,0 +1,87 @@
1
+ import { slicedToArray as _slicedToArray, createClass as _createClass, classCallCheck as _classCallCheck } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { utilities } from 'dcmjs';
3
+ import CORNERSTONE_3D_TAG from './cornerstone3DTag.js';
4
+ import MeasurementReport from './MeasurementReport.js';
5
+
6
+ var TID300Point = utilities.TID300.Point;
7
+ var PROBE = "Probe";
8
+ var trackingIdentifierTextValue = "".concat(CORNERSTONE_3D_TAG, ":").concat(PROBE);
9
+ var Probe = /*#__PURE__*/function () {
10
+ function Probe() {
11
+ _classCallCheck(this, Probe);
12
+ }
13
+ return _createClass(Probe, null, [{
14
+ key: "getMeasurementData",
15
+ value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
16
+ var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, Probe.toolType),
17
+ defaultState = _MeasurementReport$ge.defaultState,
18
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
19
+ ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
20
+ var referencedImageId = defaultState.annotation.metadata.referencedImageId;
21
+ var GraphicData = SCOORDGroup.GraphicData;
22
+ var worldCoords = [];
23
+ for (var i = 0; i < GraphicData.length; i += 2) {
24
+ var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
25
+ worldCoords.push(point);
26
+ }
27
+ var state = defaultState;
28
+ state.annotation.data = {
29
+ handles: {
30
+ points: worldCoords,
31
+ activeHandleIndex: null,
32
+ textBox: {
33
+ hasMoved: false
34
+ }
35
+ },
36
+ frameNumber: ReferencedFrameNumber
37
+ };
38
+ return state;
39
+ }
40
+ }, {
41
+ key: "getTID300RepresentationArguments",
42
+ value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
43
+ var data = tool.data,
44
+ metadata = tool.metadata;
45
+ var finding = tool.finding,
46
+ findingSites = tool.findingSites;
47
+ var referencedImageId = metadata.referencedImageId;
48
+ if (!referencedImageId) {
49
+ throw new Error("Probe.getTID300RepresentationArguments: referencedImageId is not defined");
50
+ }
51
+ var points = data.handles.points;
52
+ var pointsImage = points.map(function (point) {
53
+ var pointImage = worldToImageCoords(referencedImageId, point);
54
+ return {
55
+ x: pointImage[0],
56
+ y: pointImage[1]
57
+ };
58
+ });
59
+ var TID300RepresentationArguments = {
60
+ points: pointsImage,
61
+ trackingIdentifierTextValue: trackingIdentifierTextValue,
62
+ findingSites: findingSites || [],
63
+ finding: finding
64
+ };
65
+ return TID300RepresentationArguments;
66
+ }
67
+ }]);
68
+ }();
69
+ Probe.toolType = PROBE;
70
+ Probe.utilityToolType = PROBE;
71
+ Probe.TID300Representation = TID300Point;
72
+ Probe.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
73
+ if (!TrackingIdentifier.includes(":")) {
74
+ return false;
75
+ }
76
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
77
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
78
+ cornerstone3DTag = _TrackingIdentifier$s2[0],
79
+ toolType = _TrackingIdentifier$s2[1];
80
+ if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
81
+ return false;
82
+ }
83
+ return toolType === PROBE;
84
+ };
85
+ MeasurementReport.registerTool(Probe);
86
+
87
+ export { Probe as default };
@@ -0,0 +1,67 @@
1
+ declare function generateRTSSFromSegmentations(segmentations: any, metadataProvider: any, DicomMetadataStore: any): {
2
+ StudyInstanceUID: any;
3
+ SOPClassUID: string;
4
+ SOPInstanceUID: any;
5
+ Manufacturer: string;
6
+ Modality: string;
7
+ FrameOfReferenceUID: any;
8
+ PositionReferenceIndicator: string;
9
+ StructureSetLabel: any;
10
+ StructureSetName: any;
11
+ ReferringPhysicianName: string;
12
+ OperatorsName: string;
13
+ StructureSetDate: any;
14
+ StructureSetTime: any;
15
+ _meta: any;
16
+ SeriesInstanceUID: any;
17
+ SeriesNumber: string;
18
+ PatientID: any;
19
+ PatientName: any;
20
+ PatientBirthDate: string;
21
+ PatientAge: any;
22
+ PatientSex: any;
23
+ PatientWeight: any;
24
+ StudyDate: any;
25
+ StudyTime: any;
26
+ StudyID: string;
27
+ AccessionNumber: any;
28
+ StructureSetROISequence: any[];
29
+ ROIContourSequence: any[];
30
+ RTROIObservationsSequence: any[];
31
+ ReferencedSeriesSequence: any[];
32
+ ReferencedFrameOfReferenceSequence: any[];
33
+ };
34
+ declare function generateRTSSFromAnnotations(annotations: any, metadataProvider: any, DicomMetadataStore: any): {
35
+ StudyInstanceUID: any;
36
+ SOPClassUID: string;
37
+ SOPInstanceUID: any;
38
+ Manufacturer: string;
39
+ Modality: string;
40
+ FrameOfReferenceUID: any;
41
+ PositionReferenceIndicator: string;
42
+ StructureSetLabel: any;
43
+ StructureSetName: any;
44
+ ReferringPhysicianName: string;
45
+ OperatorsName: string;
46
+ StructureSetDate: any;
47
+ StructureSetTime: any;
48
+ _meta: any;
49
+ SeriesInstanceUID: any;
50
+ SeriesNumber: string;
51
+ PatientID: any;
52
+ PatientName: any;
53
+ PatientBirthDate: string;
54
+ PatientAge: any;
55
+ PatientSex: any;
56
+ PatientWeight: any;
57
+ StudyDate: any;
58
+ StudyTime: any;
59
+ StudyID: string;
60
+ AccessionNumber: any;
61
+ StructureSetROISequence: any[];
62
+ ROIContourSequence: any[];
63
+ RTROIObservationsSequence: any[];
64
+ ReferencedSeriesSequence: any[];
65
+ ReferencedFrameOfReferenceSequence: any[];
66
+ };
67
+ export { generateRTSSFromSegmentations, generateRTSSFromAnnotations };