@cornerstonejs/adapters 4.22.7 → 4.22.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/adapters/Cornerstone/Angle.js +22 -15
- package/dist/esm/adapters/Cornerstone/ArrowAnnotate.js +13 -18
- package/dist/esm/adapters/Cornerstone/Bidirectional.js +22 -27
- package/dist/esm/adapters/Cornerstone/CircleRoi.js +20 -26
- package/dist/esm/adapters/Cornerstone/CobbAngle.js +22 -15
- package/dist/esm/adapters/Cornerstone/EllipticalRoi.js +19 -25
- package/dist/esm/adapters/Cornerstone/FreehandRoi.js +21 -25
- package/dist/esm/adapters/Cornerstone/Length.js +18 -15
- package/dist/esm/adapters/Cornerstone/MeasurementReport.js +20 -40
- package/dist/esm/adapters/Cornerstone/ParametricMap.js +15 -26
- package/dist/esm/adapters/Cornerstone/RectangleRoi.js +26 -25
- package/dist/esm/adapters/Cornerstone/Segmentation_3X.js +19 -31
- package/dist/esm/adapters/Cornerstone/Segmentation_4X.js +69 -90
- package/dist/esm/adapters/Cornerstone3D/Angle.js +17 -24
- package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.js +21 -35
- package/dist/esm/adapters/Cornerstone3D/BaseAdapter3D.js +12 -23
- package/dist/esm/adapters/Cornerstone3D/Bidirectional.js +21 -33
- package/dist/esm/adapters/Cornerstone3D/CircleROI.js +27 -35
- package/dist/esm/adapters/Cornerstone3D/CobbAngle.js +25 -28
- package/dist/esm/adapters/Cornerstone3D/ControlPointPolyline.js +10 -17
- package/dist/esm/adapters/Cornerstone3D/EllipticalROI.js +25 -33
- package/dist/esm/adapters/Cornerstone3D/KeyImage.js +3 -9
- package/dist/esm/adapters/Cornerstone3D/LabelData.js +22 -33
- package/dist/esm/adapters/Cornerstone3D/Length.js +19 -27
- package/dist/esm/adapters/Cornerstone3D/MeasurementReport.js +73 -116
- package/dist/esm/adapters/Cornerstone3D/ParametricMap/generateToolState.js +2 -6
- package/dist/esm/adapters/Cornerstone3D/PlanarFreehandROI.js +26 -35
- package/dist/esm/adapters/Cornerstone3D/Probe.js +16 -27
- package/dist/esm/adapters/Cornerstone3D/RTStruct/RTSS.js +13 -29
- package/dist/esm/adapters/Cornerstone3D/RTStruct/index.js +1 -3
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedFrameOfReferenceSequence.js +1 -3
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedSeriesSequence.js +7 -13
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getStructureSetModule.js +1 -3
- package/dist/esm/adapters/Cornerstone3D/RectangleROI.js +21 -28
- package/dist/esm/adapters/Cornerstone3D/Segmentation/compactMergeSegData.js +5 -9
- package/dist/esm/adapters/Cornerstone3D/Segmentation/generateLabelMaps2DFrom3D.js +2 -4
- package/dist/esm/adapters/Cornerstone3D/Segmentation/generateSegmentation.js +5 -15
- package/dist/esm/adapters/Cornerstone3D/Segmentation/generateToolState.js +3 -4
- package/dist/esm/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.js +124 -156
- package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.js +12 -23
- package/dist/esm/adapters/Cornerstone3D/metricHandler.js +8 -5
- package/dist/esm/adapters/VTKjs/Segmentation.js +2 -4
- package/dist/esm/adapters/helpers/checkOrientation.js +2 -4
- package/dist/esm/adapters/helpers/downloadDICOMData.js +1 -3
- package/dist/esm/adapters/helpers/getDatasetsFromImages.js +3 -7
- package/dist/esm/adapters/helpers/scoordToWorld.js +5 -13
- package/dist/esm/adapters/helpers/toPoint3.js +1 -3
- package/dist/esm/adapters/helpers/toScoordType.js +3 -7
- package/dist/esm/adapters/index.js +3 -2
- package/dist/esm/utilities/createInstance.js +9 -8
- package/dist/esm/utilities/referencedMetadataProvider.js +7 -13
- package/dist/esm/version.d.ts +1 -1
- package/package.json +6 -6
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
import { COMMENT_CODE, TEXT_ANNOTATION_POSITION } from './constants/index.js';
|
|
2
|
-
import
|
|
2
|
+
import '../helpers/downloadDICOMData.js';
|
|
3
3
|
import { toScoord } from '../helpers/toScoordType.js';
|
|
4
|
-
import '
|
|
4
|
+
import '../helpers/scoordToWorld.js';
|
|
5
|
+
import dcmjs from 'dcmjs';
|
|
5
6
|
|
|
6
|
-
const
|
|
7
|
-
sr
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
},
|
|
11
|
-
adapters: {
|
|
12
|
-
Cornerstone3D
|
|
13
|
-
}
|
|
14
|
-
} = dcmjs;
|
|
7
|
+
const _dcmjs$sr = dcmjs.sr,
|
|
8
|
+
valueTypes = _dcmjs$sr.valueTypes,
|
|
9
|
+
coding = _dcmjs$sr.coding,
|
|
10
|
+
Cornerstone3D = dcmjs.adapters.Cornerstone3D;
|
|
15
11
|
class LabelData {
|
|
16
12
|
constructor(tid300Item, annotation) {
|
|
17
13
|
this.tid300Item = tid300Item;
|
|
@@ -22,10 +18,9 @@ class LabelData {
|
|
|
22
18
|
var _handles$textBox;
|
|
23
19
|
const contentEntries = this.tid300Item.contentItem();
|
|
24
20
|
this.fixScoordRelationships(contentEntries);
|
|
25
|
-
const
|
|
26
|
-
label,
|
|
27
|
-
handles
|
|
28
|
-
} = this.annotation.data;
|
|
21
|
+
const _this$annotation$data = this.annotation.data,
|
|
22
|
+
label = _this$annotation$data.label,
|
|
23
|
+
handles = _this$annotation$data.handles;
|
|
29
24
|
if (label) {
|
|
30
25
|
contentEntries.push(this.createQualitativeLabel(label));
|
|
31
26
|
this.filterCornerstoneFreeText(contentEntries);
|
|
@@ -54,9 +49,7 @@ class LabelData {
|
|
|
54
49
|
return [contentSeq];
|
|
55
50
|
}
|
|
56
51
|
filterCornerstoneFreeText(contentEntries) {
|
|
57
|
-
const
|
|
58
|
-
codeValues
|
|
59
|
-
} = Cornerstone3D.CodeScheme;
|
|
52
|
+
const codeValues = Cornerstone3D.CodeScheme.codeValues;
|
|
60
53
|
const freeTextCodes = [codeValues.FREE_TEXT_CODE_VALUE, codeValues.CORNERSTONEFREETEXT];
|
|
61
54
|
for (let i = 0; i < contentEntries.length; i++) {
|
|
62
55
|
const group = contentEntries[i];
|
|
@@ -82,22 +75,18 @@ class LabelData {
|
|
|
82
75
|
});
|
|
83
76
|
}
|
|
84
77
|
createQualitativeLabelPosition(annotation) {
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
referencedImageId,
|
|
90
|
-
FrameOfReferenceUID: frameOfReferenceUID
|
|
91
|
-
} = annotation.metadata;
|
|
78
|
+
const textBox = annotation.data.handles.textBox;
|
|
79
|
+
const _annotation$metadata = annotation.metadata,
|
|
80
|
+
referencedImageId = _annotation$metadata.referencedImageId,
|
|
81
|
+
frameOfReferenceUID = _annotation$metadata.FrameOfReferenceUID;
|
|
92
82
|
const is3DMeasurement = !referencedImageId;
|
|
93
|
-
const {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}, textBox.worldPosition);
|
|
83
|
+
const _toScoord = toScoord({
|
|
84
|
+
is3DMeasurement,
|
|
85
|
+
referencedImageId
|
|
86
|
+
}, textBox.worldPosition),
|
|
87
|
+
x = _toScoord.x,
|
|
88
|
+
y = _toScoord.y,
|
|
89
|
+
z = _toScoord.z;
|
|
101
90
|
const graphicType = valueTypes.GraphicTypes.POINT;
|
|
102
91
|
const relationshipType = valueTypes.RelationshipTypes.CONTAINS;
|
|
103
92
|
const name = new coding.CodedConcept(TEXT_ANNOTATION_POSITION);
|
|
@@ -2,25 +2,23 @@ import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
|
2
2
|
import { utilities } from 'dcmjs';
|
|
3
3
|
import MeasurementReport from './MeasurementReport.js';
|
|
4
4
|
import BaseAdapter3D from './BaseAdapter3D.js';
|
|
5
|
+
import '../helpers/downloadDICOMData.js';
|
|
5
6
|
import { toScoord } from '../helpers/toScoordType.js';
|
|
6
|
-
import '
|
|
7
|
+
import '../helpers/scoordToWorld.js';
|
|
7
8
|
|
|
8
9
|
var _Length;
|
|
9
10
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
10
11
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
11
|
-
const
|
|
12
|
-
Length: TID300Length
|
|
13
|
-
} = utilities.TID300;
|
|
12
|
+
const TID300Length = utilities.TID300.Length;
|
|
14
13
|
const LENGTH = 'Length';
|
|
15
14
|
class Length extends BaseAdapter3D {
|
|
16
15
|
static getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata) {
|
|
17
|
-
const
|
|
18
|
-
state,
|
|
19
|
-
NUMGroup,
|
|
20
|
-
worldCoords,
|
|
21
|
-
referencedImageId,
|
|
22
|
-
ReferencedFrameNumber
|
|
23
|
-
} = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType);
|
|
16
|
+
const _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType),
|
|
17
|
+
state = _MeasurementReport$ge.state,
|
|
18
|
+
NUMGroup = _MeasurementReport$ge.NUMGroup,
|
|
19
|
+
worldCoords = _MeasurementReport$ge.worldCoords,
|
|
20
|
+
referencedImageId = _MeasurementReport$ge.referencedImageId,
|
|
21
|
+
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
|
24
22
|
const cachedStats = referencedImageId ? {
|
|
25
23
|
["imageId:".concat(referencedImageId)]: {
|
|
26
24
|
length: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0,
|
|
@@ -39,28 +37,22 @@ class Length extends BaseAdapter3D {
|
|
|
39
37
|
}
|
|
40
38
|
static getTID300RepresentationArguments(tool) {
|
|
41
39
|
let is3DMeasurement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
handles
|
|
51
|
-
} = data;
|
|
52
|
-
const {
|
|
53
|
-
referencedImageId
|
|
54
|
-
} = metadata;
|
|
40
|
+
const data = tool.data,
|
|
41
|
+
finding = tool.finding,
|
|
42
|
+
findingSites = tool.findingSites,
|
|
43
|
+
metadata = tool.metadata;
|
|
44
|
+
const _data$cachedStats = data.cachedStats,
|
|
45
|
+
cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
|
|
46
|
+
handles = data.handles;
|
|
47
|
+
const referencedImageId = metadata.referencedImageId;
|
|
55
48
|
const scoordProps = {
|
|
56
49
|
is3DMeasurement,
|
|
57
50
|
referencedImageId
|
|
58
51
|
};
|
|
59
52
|
const point1 = toScoord(scoordProps, handles.points[0]);
|
|
60
53
|
const point2 = toScoord(scoordProps, handles.points[1]);
|
|
61
|
-
const {
|
|
62
|
-
length
|
|
63
|
-
} = cachedStats["imageId:".concat(referencedImageId)] || {};
|
|
54
|
+
const _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
|
|
55
|
+
distance = _ref.length;
|
|
64
56
|
return {
|
|
65
57
|
point1,
|
|
66
58
|
point2,
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
|
-
import { utilities
|
|
3
|
-
import { utilities, cache
|
|
2
|
+
import { utilities, derivations, normalizers, data } from 'dcmjs';
|
|
3
|
+
import { Enums, utilities as utilities$1, cache } from '@cornerstonejs/core';
|
|
4
4
|
import CORNERSTONE_3D_TAG from './cornerstone3DTag.js';
|
|
5
5
|
import { toArray } from '../helpers/toArray.js';
|
|
6
6
|
import { codeMeaningEquals } from '../helpers/codeMeaningEquals.js';
|
|
7
|
+
import '../helpers/downloadDICOMData.js';
|
|
7
8
|
import { copyStudyTags } from '../helpers/copyStudyTags.js';
|
|
8
9
|
import { copySeriesTags } from '../helpers/copySeriesTags.js';
|
|
10
|
+
import '../helpers/toScoordType.js';
|
|
9
11
|
import { scoordToWorld } from '../helpers/scoordToWorld.js';
|
|
10
12
|
import { toPoint3 } from '../helpers/toPoint3.js';
|
|
11
13
|
import CodingScheme from './CodingScheme.js';
|
|
@@ -15,26 +17,14 @@ import LabelData from './LabelData.js';
|
|
|
15
17
|
var _MeasurementReport;
|
|
16
18
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
17
19
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
StructuredReport
|
|
27
|
-
} = derivations;
|
|
28
|
-
const {
|
|
29
|
-
Normalizer
|
|
30
|
-
} = normalizers;
|
|
31
|
-
const {
|
|
32
|
-
TID1500MeasurementReport,
|
|
33
|
-
TID1501MeasurementGroup
|
|
34
|
-
} = TID1500;
|
|
35
|
-
const {
|
|
36
|
-
DicomMetaDictionary
|
|
37
|
-
} = data;
|
|
20
|
+
const MetadataModules = Enums.MetadataModules;
|
|
21
|
+
const TID1500 = utilities.TID1500,
|
|
22
|
+
addAccessors = utilities.addAccessors;
|
|
23
|
+
const StructuredReport = derivations.StructuredReport;
|
|
24
|
+
const Normalizer = normalizers.Normalizer;
|
|
25
|
+
const TID1500MeasurementReport = TID1500.TID1500MeasurementReport,
|
|
26
|
+
TID1501MeasurementGroup = TID1500.TID1501MeasurementGroup;
|
|
27
|
+
const DicomMetaDictionary = data.DicomMetaDictionary;
|
|
38
28
|
const FINDING = {
|
|
39
29
|
CodingSchemeDesignator: 'DCM',
|
|
40
30
|
CodeValue: '121071'
|
|
@@ -90,11 +80,10 @@ class MeasurementReport {
|
|
|
90
80
|
return new TID1501MeasurementGroup(Measurements);
|
|
91
81
|
}
|
|
92
82
|
static getCornerstoneLabelFromDefaultState(defaultState) {
|
|
93
|
-
const
|
|
94
|
-
findingSites = [],
|
|
95
|
-
finding,
|
|
96
|
-
commentGroup
|
|
97
|
-
} = defaultState;
|
|
83
|
+
const _defaultState$finding = defaultState.findingSites,
|
|
84
|
+
findingSites = _defaultState$finding === void 0 ? [] : _defaultState$finding,
|
|
85
|
+
finding = defaultState.finding,
|
|
86
|
+
commentGroup = defaultState.commentGroup;
|
|
98
87
|
if (commentGroup !== null && commentGroup !== void 0 && commentGroup.TextValue) {
|
|
99
88
|
return commentGroup.TextValue;
|
|
100
89
|
}
|
|
@@ -111,19 +100,14 @@ class MeasurementReport {
|
|
|
111
100
|
return metaSRAnnotation;
|
|
112
101
|
}
|
|
113
102
|
static processSCOORDGroup(_ref) {
|
|
114
|
-
let
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
} = SCOORDGroup.ContentSequence;
|
|
123
|
-
const {
|
|
124
|
-
ReferencedSOPInstanceUID,
|
|
125
|
-
ReferencedFrameNumber = 1
|
|
126
|
-
} = ReferencedSOPSequence;
|
|
103
|
+
let SCOORDGroup = _ref.SCOORDGroup,
|
|
104
|
+
toolType = _ref.toolType,
|
|
105
|
+
sopInstanceUIDToImageIdMap = _ref.sopInstanceUIDToImageIdMap,
|
|
106
|
+
metadata = _ref.metadata;
|
|
107
|
+
const ReferencedSOPSequence = SCOORDGroup.ContentSequence.ReferencedSOPSequence;
|
|
108
|
+
const ReferencedSOPInstanceUID = ReferencedSOPSequence.ReferencedSOPInstanceUID,
|
|
109
|
+
_ReferencedSOPSequenc = ReferencedSOPSequence.ReferencedFrameNumber,
|
|
110
|
+
ReferencedFrameNumber = _ReferencedSOPSequenc === void 0 ? 1 : _ReferencedSOPSequenc;
|
|
127
111
|
const referencedImageId = sopInstanceUIDToImageIdMap["".concat(ReferencedSOPInstanceUID, ":").concat(ReferencedFrameNumber)];
|
|
128
112
|
const imagePlaneModule = metadata.get('imagePlaneModule', referencedImageId);
|
|
129
113
|
const annotationUID = DicomMetaDictionary.uid();
|
|
@@ -158,10 +142,8 @@ class MeasurementReport {
|
|
|
158
142
|
};
|
|
159
143
|
}
|
|
160
144
|
static processSCOORD3DGroup(_ref2) {
|
|
161
|
-
let
|
|
162
|
-
|
|
163
|
-
toolType
|
|
164
|
-
} = _ref2;
|
|
145
|
+
let SCOORD3DGroup = _ref2.SCOORD3DGroup,
|
|
146
|
+
toolType = _ref2.toolType;
|
|
165
147
|
const annotationUID = DicomMetaDictionary.uid();
|
|
166
148
|
const toolData = {
|
|
167
149
|
SCOORD3DGroup,
|
|
@@ -187,17 +169,15 @@ class MeasurementReport {
|
|
|
187
169
|
}
|
|
188
170
|
}
|
|
189
171
|
};
|
|
190
|
-
utilities.updatePlaneRestriction(toPoint3(SCOORD3DGroup.GraphicData), toolData.state.annotation.metadata);
|
|
172
|
+
utilities$1.updatePlaneRestriction(toPoint3(SCOORD3DGroup.GraphicData), toolData.state.annotation.metadata);
|
|
191
173
|
return toolData;
|
|
192
174
|
}
|
|
193
175
|
static getSpatialCoordinatesState(_ref3) {
|
|
194
176
|
var _contentSequenceArr$f, _contentSequenceArr$f2;
|
|
195
|
-
let
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
toolType
|
|
200
|
-
} = _ref3;
|
|
177
|
+
let NUMGroup = _ref3.NUMGroup,
|
|
178
|
+
sopInstanceUIDToImageIdMap = _ref3.sopInstanceUIDToImageIdMap,
|
|
179
|
+
metadata = _ref3.metadata,
|
|
180
|
+
toolType = _ref3.toolType;
|
|
201
181
|
const contentSequenceArr = toArray(NUMGroup.ContentSequence);
|
|
202
182
|
const SCOORDGroup = (_contentSequenceArr$f = contentSequenceArr.find(group => group.ValueType === 'SCOORD' && !isSecondaryScoordGroup(group))) !== null && _contentSequenceArr$f !== void 0 ? _contentSequenceArr$f : contentSequenceArr.find(group => group.ValueType === 'SCOORD');
|
|
203
183
|
const SCOORD3DGroup = (_contentSequenceArr$f2 = contentSequenceArr.find(group => group.ValueType === 'SCOORD3D' && !isSecondaryScoordGroup(group))) !== null && _contentSequenceArr$f2 !== void 0 ? _contentSequenceArr$f2 : contentSequenceArr.find(group => group.ValueType === 'SCOORD3D');
|
|
@@ -216,33 +196,30 @@ class MeasurementReport {
|
|
|
216
196
|
return result;
|
|
217
197
|
}
|
|
218
198
|
static processSpatialCoordinatesGroup(_ref4) {
|
|
219
|
-
let
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
metadata,
|
|
244
|
-
toolType
|
|
245
|
-
});
|
|
199
|
+
let NUMGroup = _ref4.NUMGroup,
|
|
200
|
+
sopInstanceUIDToImageIdMap = _ref4.sopInstanceUIDToImageIdMap,
|
|
201
|
+
metadata = _ref4.metadata,
|
|
202
|
+
findingGroup = _ref4.findingGroup,
|
|
203
|
+
findingSiteGroups = _ref4.findingSiteGroups,
|
|
204
|
+
commentGroup = _ref4.commentGroup,
|
|
205
|
+
commentPositionGroup = _ref4.commentPositionGroup,
|
|
206
|
+
controlPointsGroup = _ref4.controlPointsGroup,
|
|
207
|
+
toolType = _ref4.toolType;
|
|
208
|
+
const _this$getSpatialCoord = this.getSpatialCoordinatesState({
|
|
209
|
+
NUMGroup,
|
|
210
|
+
sopInstanceUIDToImageIdMap,
|
|
211
|
+
metadata,
|
|
212
|
+
toolType
|
|
213
|
+
}),
|
|
214
|
+
state = _this$getSpatialCoord.state,
|
|
215
|
+
SCOORDGroup = _this$getSpatialCoord.SCOORDGroup,
|
|
216
|
+
ReferencedSOPSequence = _this$getSpatialCoord.ReferencedSOPSequence,
|
|
217
|
+
ReferencedSOPInstanceUID = _this$getSpatialCoord.ReferencedSOPInstanceUID,
|
|
218
|
+
ReferencedFrameNumber = _this$getSpatialCoord.ReferencedFrameNumber,
|
|
219
|
+
SCOORD3DGroup = _this$getSpatialCoord.SCOORD3DGroup,
|
|
220
|
+
FrameOfReferenceUID = _this$getSpatialCoord.FrameOfReferenceUID,
|
|
221
|
+
referencedImageId = _this$getSpatialCoord.referencedImageId,
|
|
222
|
+
textBoxPosition = _this$getSpatialCoord.textBoxPosition;
|
|
246
223
|
const finding = findingGroup ? addAccessors(findingGroup.ConceptCodeSequence) : undefined;
|
|
247
224
|
const findingSites = findingSiteGroups.map(fsg => {
|
|
248
225
|
return addAccessors(fsg.ConceptCodeSequence);
|
|
@@ -289,9 +266,7 @@ class MeasurementReport {
|
|
|
289
266
|
};
|
|
290
267
|
}
|
|
291
268
|
static getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, toolType) {
|
|
292
|
-
const
|
|
293
|
-
ContentSequence
|
|
294
|
-
} = MeasurementGroup;
|
|
269
|
+
const ContentSequence = MeasurementGroup.ContentSequence;
|
|
295
270
|
const contentSequenceArr = toArray(ContentSequence);
|
|
296
271
|
const findingGroup = contentSequenceArr.find(group => this.codeValueMatch(group, FINDING));
|
|
297
272
|
const commentGroup = contentSequenceArr.find(group => this.codeValueMatch(group, COMMENT));
|
|
@@ -316,9 +291,7 @@ class MeasurementReport {
|
|
|
316
291
|
controlPointsGroup,
|
|
317
292
|
toolType
|
|
318
293
|
});
|
|
319
|
-
const
|
|
320
|
-
referencedImageId
|
|
321
|
-
} = spatialGroup.state.annotation.metadata;
|
|
294
|
+
const referencedImageId = spatialGroup.state.annotation.metadata.referencedImageId;
|
|
322
295
|
const is3DMeasurement = !!spatialGroup.SCOORD3DGroup;
|
|
323
296
|
const scoordArgs = {
|
|
324
297
|
referencedImageId,
|
|
@@ -334,27 +307,21 @@ class MeasurementReport {
|
|
|
334
307
|
});
|
|
335
308
|
}
|
|
336
309
|
static generateReferencedSOPSequence(_ref5) {
|
|
337
|
-
let
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
derivationSourceDatasets
|
|
344
|
-
} = _ref5;
|
|
310
|
+
let toolData = _ref5.toolData,
|
|
311
|
+
toolTypes = _ref5.toolTypes,
|
|
312
|
+
metadataProvider = _ref5.metadataProvider,
|
|
313
|
+
imageId = _ref5.imageId,
|
|
314
|
+
sopInstanceUIDsToSeriesInstanceUIDMap = _ref5.sopInstanceUIDsToSeriesInstanceUIDMap,
|
|
315
|
+
derivationSourceDatasets = _ref5.derivationSourceDatasets;
|
|
345
316
|
const effectiveImageId = imageId === NO_IMAGE_ID ? this.getImageIdFromVolume({
|
|
346
317
|
toolData,
|
|
347
318
|
toolTypes
|
|
348
319
|
}) : imageId;
|
|
349
320
|
const sopCommonModule = metadataProvider.get('sopCommonModule', effectiveImageId);
|
|
350
321
|
const instance = metadataProvider.get('instance', effectiveImageId);
|
|
351
|
-
const
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
} = sopCommonModule;
|
|
355
|
-
const {
|
|
356
|
-
SeriesInstanceUID: seriesInstanceUID
|
|
357
|
-
} = instance;
|
|
322
|
+
const sopInstanceUID = sopCommonModule.sopInstanceUID,
|
|
323
|
+
sopClassUID = sopCommonModule.sopClassUID;
|
|
324
|
+
const seriesInstanceUID = instance.SeriesInstanceUID;
|
|
358
325
|
sopInstanceUIDsToSeriesInstanceUIDMap[sopInstanceUID] = seriesInstanceUID;
|
|
359
326
|
if (!derivationSourceDatasets.find(dsd => dsd.SeriesInstanceUID === seriesInstanceUID)) {
|
|
360
327
|
const derivationSourceDataset = MeasurementReport.generateDerivationSourceDataset(instance);
|
|
@@ -373,10 +340,8 @@ class MeasurementReport {
|
|
|
373
340
|
}
|
|
374
341
|
static getImageIdFromVolume(_ref6) {
|
|
375
342
|
var _toolData$toolTypes$, _referenceToolData$me;
|
|
376
|
-
let
|
|
377
|
-
|
|
378
|
-
toolTypes
|
|
379
|
-
} = _ref6;
|
|
343
|
+
let toolData = _ref6.toolData,
|
|
344
|
+
toolTypes = _ref6.toolTypes;
|
|
380
345
|
const referenceToolData = toolData === null || toolData === void 0 || (_toolData$toolTypes$ = toolData[toolTypes === null || toolTypes === void 0 ? void 0 : toolTypes[0]]) === null || _toolData$toolTypes$ === void 0 || (_toolData$toolTypes$ = _toolData$toolTypes$.data) === null || _toolData$toolTypes$ === void 0 ? void 0 : _toolData$toolTypes$[0];
|
|
381
346
|
const volumeId = referenceToolData === null || referenceToolData === void 0 || (_referenceToolData$me = referenceToolData.metadata) === null || _referenceToolData$me === void 0 ? void 0 : _referenceToolData$me.volumeId;
|
|
382
347
|
const volume = cache.getVolume(volumeId);
|
|
@@ -447,9 +412,7 @@ class MeasurementReport {
|
|
|
447
412
|
const GROUP = 'Measurement Group';
|
|
448
413
|
const TRACKING_IDENTIFIER = 'Tracking Identifier';
|
|
449
414
|
const TRACKING_UNIQUE_IDENTIFIER = 'Tracking Unique Identifier';
|
|
450
|
-
const
|
|
451
|
-
imageId: predecessorImageId
|
|
452
|
-
} = dataset;
|
|
415
|
+
const predecessorImageId = dataset.imageId;
|
|
453
416
|
const imagingMeasurementContent = toArray(dataset.ContentSequence).find(codeMeaningEquals(REPORT));
|
|
454
417
|
const measurementGroups = toArray(imagingMeasurementContent.ContentSequence).filter(codeMeaningEquals(GROUP));
|
|
455
418
|
const measurementData = {};
|
|
@@ -458,9 +421,7 @@ class MeasurementReport {
|
|
|
458
421
|
var _hooks$getToolClass;
|
|
459
422
|
const measurementGroupContentSequence = toArray(measurementGroup.ContentSequence);
|
|
460
423
|
const trackingIdentifierGroup = measurementGroupContentSequence.find(contentItem => contentItem.ConceptNameCodeSequence.CodeMeaning === TRACKING_IDENTIFIER);
|
|
461
|
-
const
|
|
462
|
-
TextValue: trackingIdentifierValue
|
|
463
|
-
} = trackingIdentifierGroup;
|
|
424
|
+
const trackingIdentifierValue = trackingIdentifierGroup.TextValue;
|
|
464
425
|
const trackingUniqueIdentifierGroup = measurementGroupContentSequence.find(contentItem => contentItem.ConceptNameCodeSequence.CodeMeaning === TRACKING_UNIQUE_IDENTIFIER);
|
|
465
426
|
const trackingUniqueIdentifierValue = trackingUniqueIdentifierGroup === null || trackingUniqueIdentifierGroup === void 0 ? void 0 : trackingUniqueIdentifierGroup.UID;
|
|
466
427
|
const toolAdapter = (hooks === null || hooks === void 0 || (_hooks$getToolClass = hooks.getToolClass) === null || _hooks$getToolClass === void 0 ? void 0 : _hooks$getToolClass.call(hooks, measurementGroup, dataset, this.measurementAdapterByToolType)) || this.getAdapterForTrackingIdentifier(trackingIdentifierValue) || this.getAdapterForCodeType(measurementGroup);
|
|
@@ -550,9 +511,7 @@ _MeasurementReport.measurementAdapterByToolType = new Map();
|
|
|
550
511
|
_MeasurementReport.measurementAdaptersByType = new Map();
|
|
551
512
|
_MeasurementReport.measurementAdapterByTrackingIdentifier = new Map();
|
|
552
513
|
_MeasurementReport.codeValueMatch = (group, code, oldCode) => {
|
|
553
|
-
const
|
|
554
|
-
ConceptNameCodeSequence
|
|
555
|
-
} = group;
|
|
514
|
+
const ConceptNameCodeSequence = group.ConceptNameCodeSequence;
|
|
556
515
|
if (!ConceptNameCodeSequence) {
|
|
557
516
|
return;
|
|
558
517
|
}
|
|
@@ -560,10 +519,8 @@ _MeasurementReport.codeValueMatch = (group, code, oldCode) => {
|
|
|
560
519
|
if (!seq) {
|
|
561
520
|
return;
|
|
562
521
|
}
|
|
563
|
-
const
|
|
564
|
-
|
|
565
|
-
CodeValue
|
|
566
|
-
} = seq;
|
|
522
|
+
const CodingSchemeDesignator = seq.CodingSchemeDesignator,
|
|
523
|
+
CodeValue = seq.CodeValue;
|
|
567
524
|
return CodingSchemeDesignator == code.CodingSchemeDesignator && CodeValue == code.CodeValue || oldCode && CodingSchemeDesignator == oldCode.CodingSchemeDesignator && CodeValue == oldCode.CodeValue;
|
|
568
525
|
};
|
|
569
526
|
_MeasurementReport.generateDerivationSourceDataset = instance => {
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { CornerstonePMAP } from '../../Cornerstone/index.js';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
} = CornerstonePMAP;
|
|
6
|
-
const {
|
|
7
|
-
generateToolState: generateToolStateCornerstone
|
|
8
|
-
} = ParametricMap;
|
|
3
|
+
const ParametricMap = CornerstonePMAP.ParametricMap;
|
|
4
|
+
const generateToolStateCornerstone = ParametricMap.generateToolState;
|
|
9
5
|
function generateToolState(imageIds, arrayBuffer, metadataProvider) {
|
|
10
6
|
let skipOverlapping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
11
7
|
let tolerance = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1e-3;
|
|
@@ -4,9 +4,9 @@ import { vec3 } from 'gl-matrix';
|
|
|
4
4
|
import BaseAdapter3D from './BaseAdapter3D.js';
|
|
5
5
|
import { extractAllNUMGroups, restoreAdditionalMetrics } from './metricHandler.js';
|
|
6
6
|
import { toArray } from '../helpers/toArray.js';
|
|
7
|
-
import '
|
|
7
|
+
import '../helpers/downloadDICOMData.js';
|
|
8
8
|
import { toScoords } from '../helpers/toScoordType.js';
|
|
9
|
-
import '
|
|
9
|
+
import '../helpers/scoordToWorld.js';
|
|
10
10
|
import ControlPointPolyline from './ControlPointPolyline.js';
|
|
11
11
|
import { SPLINE_TYPE_CODE } from './constants/index.js';
|
|
12
12
|
|
|
@@ -16,13 +16,12 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
16
16
|
class PlanarFreehandROI extends BaseAdapter3D {
|
|
17
17
|
static getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata) {
|
|
18
18
|
var _state$annotation$dat, _state$annotation$dat2, _numSeq$find;
|
|
19
|
-
const
|
|
20
|
-
state,
|
|
21
|
-
NUMGroup,
|
|
22
|
-
worldCoords,
|
|
23
|
-
referencedImageId,
|
|
24
|
-
ReferencedFrameNumber
|
|
25
|
-
} = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType);
|
|
19
|
+
const _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType),
|
|
20
|
+
state = _MeasurementReport$ge.state,
|
|
21
|
+
NUMGroup = _MeasurementReport$ge.NUMGroup,
|
|
22
|
+
worldCoords = _MeasurementReport$ge.worldCoords,
|
|
23
|
+
referencedImageId = _MeasurementReport$ge.referencedImageId,
|
|
24
|
+
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
|
26
25
|
const distanceBetweenFirstAndLastPoint = vec3.distance(worldCoords[worldCoords.length - 1], worldCoords[0]);
|
|
27
26
|
let isOpenContour = true;
|
|
28
27
|
if (distanceBetweenFirstAndLastPoint < this.closedContourThreshold) {
|
|
@@ -69,23 +68,16 @@ class PlanarFreehandROI extends BaseAdapter3D {
|
|
|
69
68
|
static getTID300RepresentationArguments(tool) {
|
|
70
69
|
var _handles$points, _data$spline;
|
|
71
70
|
let is3DMeasurement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
} = data;
|
|
81
|
-
const {
|
|
82
|
-
polyline,
|
|
83
|
-
closed
|
|
84
|
-
} = data.contour;
|
|
71
|
+
const data = tool.data,
|
|
72
|
+
finding = tool.finding,
|
|
73
|
+
findingSites = tool.findingSites,
|
|
74
|
+
metadata = tool.metadata;
|
|
75
|
+
const handles = data.handles;
|
|
76
|
+
const _data$contour = data.contour,
|
|
77
|
+
polyline = _data$contour.polyline,
|
|
78
|
+
closed = _data$contour.closed;
|
|
85
79
|
const isOpenContour = closed !== true;
|
|
86
|
-
const
|
|
87
|
-
referencedImageId
|
|
88
|
-
} = metadata;
|
|
80
|
+
const referencedImageId = metadata.referencedImageId;
|
|
89
81
|
const scoordProps = {
|
|
90
82
|
is3DMeasurement,
|
|
91
83
|
referencedImageId
|
|
@@ -96,16 +88,15 @@ class PlanarFreehandROI extends BaseAdapter3D {
|
|
|
96
88
|
points.push(firstPoint);
|
|
97
89
|
}
|
|
98
90
|
const controlPoints = (handles === null || handles === void 0 || (_handles$points = handles.points) === null || _handles$points === void 0 ? void 0 : _handles$points.length) && toScoords(scoordProps, handles.points);
|
|
99
|
-
const {
|
|
100
|
-
area,
|
|
101
|
-
areaUnit,
|
|
102
|
-
modalityUnit,
|
|
103
|
-
perimeter,
|
|
104
|
-
mean,
|
|
105
|
-
max,
|
|
106
|
-
stdDev,
|
|
107
|
-
length
|
|
108
|
-
} = data.cachedStats["imageId:".concat(referencedImageId)] || {};
|
|
91
|
+
const _ref = data.cachedStats["imageId:".concat(referencedImageId)] || {},
|
|
92
|
+
area = _ref.area,
|
|
93
|
+
areaUnit = _ref.areaUnit,
|
|
94
|
+
modalityUnit = _ref.modalityUnit,
|
|
95
|
+
perimeter = _ref.perimeter,
|
|
96
|
+
mean = _ref.mean,
|
|
97
|
+
max = _ref.max,
|
|
98
|
+
stdDev = _ref.stdDev,
|
|
99
|
+
length = _ref.length;
|
|
109
100
|
return {
|
|
110
101
|
points,
|
|
111
102
|
controlPoints,
|
|
@@ -2,15 +2,14 @@ import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
|
2
2
|
import { utilities } from 'dcmjs';
|
|
3
3
|
import MeasurementReport from './MeasurementReport.js';
|
|
4
4
|
import BaseAdapter3D from './BaseAdapter3D.js';
|
|
5
|
+
import '../helpers/downloadDICOMData.js';
|
|
5
6
|
import { toScoords } from '../helpers/toScoordType.js';
|
|
6
|
-
import '
|
|
7
|
+
import '../helpers/scoordToWorld.js';
|
|
7
8
|
|
|
8
9
|
var _Probe;
|
|
9
10
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
10
11
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
11
|
-
const
|
|
12
|
-
Point: TID300Point
|
|
13
|
-
} = utilities.TID300;
|
|
12
|
+
const TID300Point = utilities.TID300.Point;
|
|
14
13
|
class Probe extends BaseAdapter3D {
|
|
15
14
|
static isValidMeasurement(measurement) {
|
|
16
15
|
const graphicItem = this.getGraphicItem(measurement);
|
|
@@ -18,13 +17,12 @@ class Probe extends BaseAdapter3D {
|
|
|
18
17
|
}
|
|
19
18
|
static getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, _trackingIdentifier) {
|
|
20
19
|
var _NUMGroup$MeasuredVal, _NUMGroup$MeasuredVal2;
|
|
21
|
-
const
|
|
22
|
-
state,
|
|
23
|
-
NUMGroup,
|
|
24
|
-
worldCoords,
|
|
25
|
-
referencedImageId,
|
|
26
|
-
ReferencedFrameNumber
|
|
27
|
-
} = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType);
|
|
20
|
+
const _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType),
|
|
21
|
+
state = _MeasurementReport$ge.state,
|
|
22
|
+
NUMGroup = _MeasurementReport$ge.NUMGroup,
|
|
23
|
+
worldCoords = _MeasurementReport$ge.worldCoords,
|
|
24
|
+
referencedImageId = _MeasurementReport$ge.referencedImageId,
|
|
25
|
+
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
|
28
26
|
const cachedStats = referencedImageId ? {
|
|
29
27
|
["imageId:".concat(referencedImageId)]: {
|
|
30
28
|
value: (_NUMGroup$MeasuredVal = NUMGroup === null || NUMGroup === void 0 || (_NUMGroup$MeasuredVal2 = NUMGroup.MeasuredValueSequence) === null || _NUMGroup$MeasuredVal2 === void 0 ? void 0 : _NUMGroup$MeasuredVal2.NumericValue) !== null && _NUMGroup$MeasuredVal !== void 0 ? _NUMGroup$MeasuredVal : null
|
|
@@ -42,26 +40,17 @@ class Probe extends BaseAdapter3D {
|
|
|
42
40
|
}
|
|
43
41
|
static getTID300RepresentationArguments(tool) {
|
|
44
42
|
let is3DMeasurement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
finding,
|
|
51
|
-
findingSites
|
|
52
|
-
} = tool;
|
|
53
|
-
const {
|
|
54
|
-
referencedImageId
|
|
55
|
-
} = metadata;
|
|
43
|
+
const data = tool.data,
|
|
44
|
+
metadata = tool.metadata;
|
|
45
|
+
const finding = tool.finding,
|
|
46
|
+
findingSites = tool.findingSites;
|
|
47
|
+
const referencedImageId = metadata.referencedImageId;
|
|
56
48
|
const scoordProps = {
|
|
57
49
|
is3DMeasurement,
|
|
58
50
|
referencedImageId
|
|
59
51
|
};
|
|
60
|
-
const
|
|
61
|
-
handles:
|
|
62
|
-
points = []
|
|
63
|
-
}
|
|
64
|
-
} = data;
|
|
52
|
+
const _data$handles$points = data.handles.points,
|
|
53
|
+
points = _data$handles$points === void 0 ? [] : _data$handles$points;
|
|
65
54
|
const pointsImage = toScoords(scoordProps, points);
|
|
66
55
|
return {
|
|
67
56
|
points: pointsImage,
|