@cornerstonejs/adapters 5.0.0-beta.1 → 5.0.0
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 +23 -16
- package/dist/esm/adapters/Cornerstone/ArrowAnnotate.js +14 -19
- package/dist/esm/adapters/Cornerstone/Bidirectional.js +22 -27
- package/dist/esm/adapters/Cornerstone/CircleRoi.js +21 -27
- package/dist/esm/adapters/Cornerstone/CobbAngle.js +23 -16
- package/dist/esm/adapters/Cornerstone/EllipticalRoi.js +20 -26
- package/dist/esm/adapters/Cornerstone/FreehandRoi.js +22 -26
- package/dist/esm/adapters/Cornerstone/Length.js +19 -16
- package/dist/esm/adapters/Cornerstone/MeasurementReport.js +20 -40
- package/dist/esm/adapters/Cornerstone/ParametricMap.js +27 -38
- package/dist/esm/adapters/Cornerstone/RectangleRoi.js +27 -26
- package/dist/esm/adapters/Cornerstone/Segmentation_3X.js +19 -31
- package/dist/esm/adapters/Cornerstone/Segmentation_4X.js +69 -90
- package/dist/esm/adapters/Cornerstone/index.d.ts +11 -11
- package/dist/esm/adapters/Cornerstone3D/Angle.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/Angle.js +19 -26
- package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.js +24 -38
- package/dist/esm/adapters/Cornerstone3D/BaseAdapter3D.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/BaseAdapter3D.js +20 -31
- package/dist/esm/adapters/Cornerstone3D/Bidirectional.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/Bidirectional.js +27 -39
- package/dist/esm/adapters/Cornerstone3D/CircleROI.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/CircleROI.js +29 -37
- package/dist/esm/adapters/Cornerstone3D/CobbAngle.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/CobbAngle.js +27 -30
- package/dist/esm/adapters/Cornerstone3D/ControlPointPolyline.d.ts +5 -0
- package/dist/esm/adapters/Cornerstone3D/ControlPointPolyline.js +85 -0
- package/dist/esm/adapters/Cornerstone3D/EllipticalROI.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/EllipticalROI.js +27 -35
- package/dist/esm/adapters/Cornerstone3D/KeyImage.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/KeyImage.js +5 -11
- package/dist/esm/adapters/Cornerstone3D/LabelData.d.ts +3 -1
- package/dist/esm/adapters/Cornerstone3D/LabelData.js +41 -33
- package/dist/esm/adapters/Cornerstone3D/Length.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/Length.js +21 -29
- package/dist/esm/adapters/Cornerstone3D/MeasurementReport.d.ts +2 -1
- package/dist/esm/adapters/Cornerstone3D/MeasurementReport.js +108 -120
- package/dist/esm/adapters/Cornerstone3D/ParametricMap/generateToolState.js +2 -6
- package/dist/esm/adapters/Cornerstone3D/PlanarFreehandROI.d.ts +11 -1
- package/dist/esm/adapters/Cornerstone3D/PlanarFreehandROI.js +58 -44
- package/dist/esm/adapters/Cornerstone3D/Probe.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/Probe.js +21 -32
- package/dist/esm/adapters/Cornerstone3D/RTStruct/RTSS.js +14 -30
- package/dist/esm/adapters/Cornerstone3D/RTStruct/index.d.ts +2 -2
- 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 +30 -32
- package/dist/esm/adapters/Cornerstone3D/Segmentation/compactMergeSegData.d.ts +1 -1
- 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 +6 -16
- package/dist/esm/adapters/Cornerstone3D/Segmentation/generateToolState.js +3 -4
- package/dist/esm/adapters/Cornerstone3D/Segmentation/index.d.ts +4 -4
- package/dist/esm/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.d.ts +2 -2
- package/dist/esm/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.js +147 -179
- package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.js +15 -26
- package/dist/esm/adapters/Cornerstone3D/constants/index.d.ts +10 -0
- package/dist/esm/adapters/Cornerstone3D/constants/index.js +12 -2
- package/dist/esm/adapters/Cornerstone3D/metricHandler.js +57 -24
- package/dist/esm/adapters/Cornerstone3D/unitMapper.d.ts +5 -0
- package/dist/esm/adapters/Cornerstone3D/unitMapper.js +16 -0
- package/dist/esm/adapters/VTKjs/Segmentation.js +2 -4
- package/dist/esm/adapters/VTKjs/index.d.ts +1 -1
- package/dist/esm/adapters/enums/index.d.ts +1 -1
- package/dist/esm/adapters/helpers/checkOrientation.js +5 -7
- package/dist/esm/adapters/helpers/downloadDICOMData.js +1 -3
- package/dist/esm/adapters/helpers/getDatasetsFromImages.js +3 -7
- package/dist/esm/adapters/helpers/index.d.ts +9 -9
- package/dist/esm/adapters/helpers/scoordToWorld.d.ts +1 -1
- package/dist/esm/adapters/helpers/scoordToWorld.js +5 -13
- package/dist/esm/adapters/helpers/toPoint3.d.ts +1 -1
- package/dist/esm/adapters/helpers/toPoint3.js +1 -3
- package/dist/esm/adapters/helpers/toScoordType.d.ts +1 -1
- package/dist/esm/adapters/helpers/toScoordType.js +3 -7
- package/dist/esm/adapters/index.d.ts +4 -4
- package/dist/esm/adapters/index.js +3 -2
- package/dist/esm/utilities/createInstance.js +9 -8
- package/dist/esm/utilities/referencedMetadataProvider.d.ts +3 -4
- package/dist/esm/utilities/referencedMetadataProvider.js +8 -14
- package/dist/esm/version.d.ts +1 -1
- package/package.json +13 -9
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/defineProperty.js +0 -12
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +0 -14
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +0 -9
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/typeof.js +0 -11
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import _defineProperty from '
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
2
|
import { utilities } from 'dcmjs';
|
|
3
3
|
import MeasurementReport from './MeasurementReport.js';
|
|
4
4
|
import { toArray } from '../helpers/toArray.js';
|
|
5
|
+
import '../helpers/downloadDICOMData.js';
|
|
5
6
|
import { toScoord } from '../helpers/toScoordType.js';
|
|
6
7
|
import { scoordToWorld } from '../helpers/scoordToWorld.js';
|
|
7
8
|
import BaseAdapter3D from './BaseAdapter3D.js';
|
|
@@ -9,26 +10,21 @@ import BaseAdapter3D from './BaseAdapter3D.js';
|
|
|
9
10
|
var _Bidirectional;
|
|
10
11
|
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; }
|
|
11
12
|
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; }
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const LONG_AXIS = "Long Axis";
|
|
16
|
-
const SHORT_AXIS = "Short Axis";
|
|
13
|
+
const TID300Bidirectional = utilities.TID300.Bidirectional;
|
|
14
|
+
const LONG_AXIS = 'Long Axis';
|
|
15
|
+
const SHORT_AXIS = 'Short Axis';
|
|
17
16
|
class Bidirectional extends BaseAdapter3D {
|
|
18
17
|
static getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata) {
|
|
19
|
-
const
|
|
20
|
-
state,
|
|
21
|
-
scoordArgs,
|
|
22
|
-
referencedImageId,
|
|
23
|
-
ReferencedFrameNumber
|
|
24
|
-
|
|
25
|
-
const {
|
|
26
|
-
ContentSequence
|
|
27
|
-
} = MeasurementGroup;
|
|
18
|
+
const _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType),
|
|
19
|
+
state = _MeasurementReport$ge.state,
|
|
20
|
+
scoordArgs = _MeasurementReport$ge.scoordArgs,
|
|
21
|
+
referencedImageId = _MeasurementReport$ge.referencedImageId,
|
|
22
|
+
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
|
23
|
+
const ContentSequence = MeasurementGroup.ContentSequence;
|
|
28
24
|
const longAxisNUMGroup = toArray(ContentSequence).find(group => group.ConceptNameCodeSequence.CodeMeaning === LONG_AXIS);
|
|
29
25
|
const shortAxisNUMGroup = toArray(ContentSequence).find(group => group.ConceptNameCodeSequence.CodeMeaning === SHORT_AXIS);
|
|
30
|
-
const longAxisScoordGroup = toArray(longAxisNUMGroup.ContentSequence).find(group => group.ValueType ===
|
|
31
|
-
const shortAxisScoordGroup = toArray(shortAxisNUMGroup.ContentSequence).find(group => group.ValueType ===
|
|
26
|
+
const longAxisScoordGroup = toArray(longAxisNUMGroup.ContentSequence).find(group => group.ValueType === 'SCOORD3D' || group.ValueType === 'SCOORD');
|
|
27
|
+
const shortAxisScoordGroup = toArray(shortAxisNUMGroup.ContentSequence).find(group => group.ValueType === 'SCOORD3D' || group.ValueType === 'SCOORD');
|
|
32
28
|
const worldCoords = [];
|
|
33
29
|
worldCoords.push(...scoordToWorld(scoordArgs, longAxisScoordGroup));
|
|
34
30
|
worldCoords.push(...scoordToWorld(scoordArgs, shortAxisScoordGroup));
|
|
@@ -52,26 +48,19 @@ class Bidirectional extends BaseAdapter3D {
|
|
|
52
48
|
}
|
|
53
49
|
static getTID300RepresentationArguments(tool) {
|
|
54
50
|
let is3DMeasurement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
handles
|
|
64
|
-
} = data;
|
|
65
|
-
const {
|
|
66
|
-
referencedImageId
|
|
67
|
-
} = metadata;
|
|
51
|
+
const data = tool.data,
|
|
52
|
+
finding = tool.finding,
|
|
53
|
+
findingSites = tool.findingSites,
|
|
54
|
+
metadata = tool.metadata;
|
|
55
|
+
const _data$cachedStats = data.cachedStats,
|
|
56
|
+
cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
|
|
57
|
+
handles = data.handles;
|
|
58
|
+
const referencedImageId = metadata.referencedImageId;
|
|
68
59
|
const scoordProps = {
|
|
69
60
|
is3DMeasurement,
|
|
70
61
|
referencedImageId
|
|
71
62
|
};
|
|
72
|
-
const
|
|
73
|
-
points
|
|
74
|
-
} = handles;
|
|
63
|
+
const points = handles.points;
|
|
75
64
|
const firstPointPairs = [points[0], points[1]];
|
|
76
65
|
const secondPointPairs = [points[2], points[3]];
|
|
77
66
|
const firstPointPairsDistance = Math.sqrt(Math.pow(firstPointPairs[0][0] - firstPointPairs[1][0], 2) + Math.pow(firstPointPairs[0][1] - firstPointPairs[1][1], 2) + Math.pow(firstPointPairs[0][2] - firstPointPairs[1][2], 2));
|
|
@@ -89,11 +78,10 @@ class Bidirectional extends BaseAdapter3D {
|
|
|
89
78
|
const longAxisEndImage = toScoord(scoordProps, shortAxisPoints[1]);
|
|
90
79
|
const shortAxisStartImage = toScoord(scoordProps, longAxisPoints[0]);
|
|
91
80
|
const shortAxisEndImage = toScoord(scoordProps, longAxisPoints[1]);
|
|
92
|
-
const {
|
|
93
|
-
length,
|
|
94
|
-
width,
|
|
95
|
-
unit
|
|
96
|
-
} = cachedStats["imageId:".concat(referencedImageId)] || {};
|
|
81
|
+
const _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
|
|
82
|
+
length = _ref.length,
|
|
83
|
+
width = _ref.width,
|
|
84
|
+
unit = _ref.unit;
|
|
97
85
|
return {
|
|
98
86
|
longAxis: {
|
|
99
87
|
point1: longAxisStartImage,
|
|
@@ -116,7 +104,7 @@ class Bidirectional extends BaseAdapter3D {
|
|
|
116
104
|
}
|
|
117
105
|
_Bidirectional = Bidirectional;
|
|
118
106
|
(() => {
|
|
119
|
-
_Bidirectional.init(
|
|
107
|
+
_Bidirectional.init('Bidirectional', TID300Bidirectional);
|
|
120
108
|
_Bidirectional.registerLegacy();
|
|
121
109
|
})();
|
|
122
110
|
|
|
@@ -1,26 +1,24 @@
|
|
|
1
|
-
import _defineProperty from '
|
|
1
|
+
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
|
import { extractAllNUMGroups, restoreAdditionalMetrics } from './metricHandler.js';
|
|
8
9
|
|
|
9
10
|
var _CircleROI;
|
|
10
11
|
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; }
|
|
11
12
|
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; }
|
|
12
|
-
const
|
|
13
|
-
Circle: TID300Circle
|
|
14
|
-
} = utilities.TID300;
|
|
13
|
+
const TID300Circle = utilities.TID300.Circle;
|
|
15
14
|
class CircleROI 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 referencedSOPInstanceUID = state.sopInstanceUid;
|
|
25
23
|
const allNUMGroups = extractAllNUMGroups(MeasurementGroup, referencedSOPInstanceUID);
|
|
26
24
|
const measurementNUMGroups = allNUMGroups[referencedSOPInstanceUID] || {};
|
|
@@ -43,36 +41,30 @@ class CircleROI extends BaseAdapter3D {
|
|
|
43
41
|
}
|
|
44
42
|
static getTID300RepresentationArguments(tool) {
|
|
45
43
|
let is3DMeasurement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
handles
|
|
55
|
-
} = data;
|
|
56
|
-
const {
|
|
57
|
-
referencedImageId
|
|
58
|
-
} = metadata;
|
|
44
|
+
const data = tool.data,
|
|
45
|
+
finding = tool.finding,
|
|
46
|
+
findingSites = tool.findingSites,
|
|
47
|
+
metadata = tool.metadata;
|
|
48
|
+
const _data$cachedStats = data.cachedStats,
|
|
49
|
+
cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
|
|
50
|
+
handles = data.handles;
|
|
51
|
+
const referencedImageId = metadata.referencedImageId;
|
|
59
52
|
const scoordProps = {
|
|
60
53
|
is3DMeasurement,
|
|
61
54
|
referencedImageId
|
|
62
55
|
};
|
|
63
56
|
const center = toScoord(scoordProps, handles.points[0]);
|
|
64
57
|
const end = toScoord(scoordProps, handles.points[1]);
|
|
65
|
-
const {
|
|
66
|
-
area,
|
|
67
|
-
radius,
|
|
68
|
-
max,
|
|
69
|
-
min,
|
|
70
|
-
stdDev,
|
|
71
|
-
mean,
|
|
72
|
-
modalityUnit,
|
|
73
|
-
radiusUnit,
|
|
74
|
-
areaUnit
|
|
75
|
-
} = cachedStats["imageId:".concat(referencedImageId)] || {};
|
|
58
|
+
const _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
|
|
59
|
+
area = _ref.area,
|
|
60
|
+
radius = _ref.radius,
|
|
61
|
+
max = _ref.max,
|
|
62
|
+
min = _ref.min,
|
|
63
|
+
stdDev = _ref.stdDev,
|
|
64
|
+
mean = _ref.mean,
|
|
65
|
+
modalityUnit = _ref.modalityUnit,
|
|
66
|
+
radiusUnit = _ref.radiusUnit,
|
|
67
|
+
areaUnit = _ref.areaUnit;
|
|
76
68
|
const perimeter = 2 * Math.PI * radius;
|
|
77
69
|
return {
|
|
78
70
|
area,
|
|
@@ -96,7 +88,7 @@ class CircleROI extends BaseAdapter3D {
|
|
|
96
88
|
}
|
|
97
89
|
_CircleROI = CircleROI;
|
|
98
90
|
(() => {
|
|
99
|
-
_CircleROI.init(
|
|
91
|
+
_CircleROI.init('CircleROI', TID300Circle);
|
|
100
92
|
_CircleROI.registerLegacy();
|
|
101
93
|
})();
|
|
102
94
|
|
|
@@ -1,25 +1,24 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
3
|
import { utilities } from 'dcmjs';
|
|
3
4
|
import MeasurementReport from './MeasurementReport.js';
|
|
4
5
|
import BaseAdapter3D from './BaseAdapter3D.js';
|
|
6
|
+
import '../helpers/downloadDICOMData.js';
|
|
5
7
|
import { toScoords } from '../helpers/toScoordType.js';
|
|
6
|
-
import '
|
|
8
|
+
import '../helpers/scoordToWorld.js';
|
|
7
9
|
|
|
8
10
|
var _CobbAngle;
|
|
9
11
|
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
12
|
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
|
-
CobbAngle: TID300CobbAngle
|
|
13
|
-
} = utilities.TID300;
|
|
13
|
+
const TID300CobbAngle = utilities.TID300.CobbAngle;
|
|
14
14
|
class CobbAngle extends BaseAdapter3D {
|
|
15
15
|
static getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata) {
|
|
16
|
-
const
|
|
17
|
-
state,
|
|
18
|
-
NUMGroup,
|
|
19
|
-
referencedImageId,
|
|
20
|
-
worldCoords,
|
|
21
|
-
ReferencedFrameNumber
|
|
22
|
-
} = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, CobbAngle.toolType);
|
|
16
|
+
const _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, CobbAngle.toolType),
|
|
17
|
+
state = _MeasurementReport$ge.state,
|
|
18
|
+
NUMGroup = _MeasurementReport$ge.NUMGroup,
|
|
19
|
+
referencedImageId = _MeasurementReport$ge.referencedImageId,
|
|
20
|
+
worldCoords = _MeasurementReport$ge.worldCoords,
|
|
21
|
+
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
|
23
22
|
state.annotation.data = _objectSpread(_objectSpread({}, state.annotation.data), {}, {
|
|
24
23
|
handles: _objectSpread(_objectSpread({}, state.annotation.data.handles), {}, {
|
|
25
24
|
points: [worldCoords[0], worldCoords[1], worldCoords[2], worldCoords[3]]
|
|
@@ -37,28 +36,26 @@ class CobbAngle extends BaseAdapter3D {
|
|
|
37
36
|
}
|
|
38
37
|
static getTID300RepresentationArguments(tool) {
|
|
39
38
|
let is3DMeasurement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
handles
|
|
49
|
-
} = data;
|
|
50
|
-
const {
|
|
51
|
-
referencedImageId
|
|
52
|
-
} = metadata;
|
|
39
|
+
const data = tool.data,
|
|
40
|
+
finding = tool.finding,
|
|
41
|
+
findingSites = tool.findingSites,
|
|
42
|
+
metadata = tool.metadata;
|
|
43
|
+
const _data$cachedStats = data.cachedStats,
|
|
44
|
+
cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
|
|
45
|
+
handles = data.handles;
|
|
46
|
+
const referencedImageId = metadata.referencedImageId;
|
|
53
47
|
const scoordProps = {
|
|
54
48
|
is3DMeasurement,
|
|
55
49
|
referencedImageId
|
|
56
50
|
};
|
|
57
51
|
const points = toScoords(scoordProps, handles.points);
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
52
|
+
const _points = _slicedToArray(points, 4),
|
|
53
|
+
point1 = _points[0],
|
|
54
|
+
point2 = _points[1],
|
|
55
|
+
point3 = _points[2],
|
|
56
|
+
point4 = _points[3];
|
|
57
|
+
const _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
|
|
58
|
+
angle = _ref.angle;
|
|
62
59
|
return {
|
|
63
60
|
point1,
|
|
64
61
|
point2,
|
|
@@ -75,7 +72,7 @@ class CobbAngle extends BaseAdapter3D {
|
|
|
75
72
|
}
|
|
76
73
|
_CobbAngle = CobbAngle;
|
|
77
74
|
(() => {
|
|
78
|
-
_CobbAngle.init(
|
|
75
|
+
_CobbAngle.init('CobbAngle', TID300CobbAngle);
|
|
79
76
|
_CobbAngle.registerLegacy();
|
|
80
77
|
})();
|
|
81
78
|
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { sr, utilities } from 'dcmjs';
|
|
2
|
+
import { CONTROL_POINTS_CODE, SPLINE_TYPE_CODE } from './constants/index.js';
|
|
3
|
+
|
|
4
|
+
const valueTypes = sr.valueTypes;
|
|
5
|
+
const TID300Polyline = utilities.TID300.Polyline;
|
|
6
|
+
class ControlPointPolyline extends TID300Polyline {
|
|
7
|
+
contentItem() {
|
|
8
|
+
const contentEntries = super.contentItem();
|
|
9
|
+
const self = this;
|
|
10
|
+
const _self$props = self.props,
|
|
11
|
+
controlPoints = _self$props.controlPoints,
|
|
12
|
+
use3DSpatialCoordinates = _self$props.use3DSpatialCoordinates,
|
|
13
|
+
ReferencedSOPSequence = _self$props.ReferencedSOPSequence,
|
|
14
|
+
ReferencedFrameOfReferenceUID = _self$props.ReferencedFrameOfReferenceUID,
|
|
15
|
+
is3DMeasurement = _self$props.use3DSpatialCoordinates;
|
|
16
|
+
if (!(controlPoints !== null && controlPoints !== void 0 && controlPoints.length)) {
|
|
17
|
+
return contentEntries;
|
|
18
|
+
}
|
|
19
|
+
const GraphicData = self.flattenPoints({
|
|
20
|
+
points: controlPoints,
|
|
21
|
+
use3DSpatialCoordinates
|
|
22
|
+
});
|
|
23
|
+
const GraphicType = valueTypes.GraphicTypes.MULTIPOINT;
|
|
24
|
+
const scoordPlain = is3DMeasurement ? {
|
|
25
|
+
RelationshipType: valueTypes.RelationshipTypes.CONTAINS,
|
|
26
|
+
ValueType: 'SCOORD3D',
|
|
27
|
+
ConceptNameCodeSequence: [{
|
|
28
|
+
CodeValue: CONTROL_POINTS_CODE.value,
|
|
29
|
+
CodingSchemeDesignator: CONTROL_POINTS_CODE.schemeDesignator,
|
|
30
|
+
CodeMeaning: CONTROL_POINTS_CODE.meaning
|
|
31
|
+
}],
|
|
32
|
+
GraphicType,
|
|
33
|
+
GraphicData,
|
|
34
|
+
ReferencedFrameOfReferenceUID,
|
|
35
|
+
ContentSequence: [{
|
|
36
|
+
RelationshipType: valueTypes.RelationshipTypes.SELECTED_FROM,
|
|
37
|
+
ValueType: valueTypes.ValueTypes.IMAGE,
|
|
38
|
+
ReferencedSOPSequence
|
|
39
|
+
}]
|
|
40
|
+
} : {
|
|
41
|
+
RelationshipType: valueTypes.RelationshipTypes.CONTAINS,
|
|
42
|
+
ValueType: 'SCOORD',
|
|
43
|
+
ConceptNameCodeSequence: [{
|
|
44
|
+
CodeValue: CONTROL_POINTS_CODE.value,
|
|
45
|
+
CodingSchemeDesignator: CONTROL_POINTS_CODE.schemeDesignator,
|
|
46
|
+
CodeMeaning: CONTROL_POINTS_CODE.meaning
|
|
47
|
+
}],
|
|
48
|
+
GraphicType,
|
|
49
|
+
GraphicData,
|
|
50
|
+
ContentSequence: [{
|
|
51
|
+
RelationshipType: valueTypes.RelationshipTypes.SELECTED_FROM,
|
|
52
|
+
ValueType: valueTypes.ValueTypes.IMAGE,
|
|
53
|
+
ReferencedSOPSequence
|
|
54
|
+
}]
|
|
55
|
+
};
|
|
56
|
+
const splineType = self.props.splineType;
|
|
57
|
+
const entries = contentEntries;
|
|
58
|
+
const numEntry = entries.find(e => e.ValueType === 'NUM');
|
|
59
|
+
if (numEntry) {
|
|
60
|
+
const inner = numEntry.ContentSequence;
|
|
61
|
+
const innerArray = Array.isArray(inner) ? inner : inner ? [inner] : [];
|
|
62
|
+
numEntry.ContentSequence = [...innerArray, scoordPlain];
|
|
63
|
+
} else {
|
|
64
|
+
entries.push(scoordPlain);
|
|
65
|
+
}
|
|
66
|
+
if (splineType) {
|
|
67
|
+
const splineTypeObsContext = {
|
|
68
|
+
RelationshipType: valueTypes.RelationshipTypes.HAS_OBS_CONTEXT,
|
|
69
|
+
ValueType: 'TEXT',
|
|
70
|
+
ConceptNameCodeSequence: {
|
|
71
|
+
CodeValue: SPLINE_TYPE_CODE.value,
|
|
72
|
+
CodingSchemeDesignator: SPLINE_TYPE_CODE.schemeDesignator,
|
|
73
|
+
CodeMeaning: SPLINE_TYPE_CODE.meaning
|
|
74
|
+
},
|
|
75
|
+
TextValue: splineType
|
|
76
|
+
};
|
|
77
|
+
const hasObsContextIndex = entries.findIndex(e => e.RelationshipType === valueTypes.RelationshipTypes.HAS_OBS_CONTEXT);
|
|
78
|
+
const insertIndex = hasObsContextIndex >= 0 ? hasObsContextIndex + 2 : 2;
|
|
79
|
+
entries.splice(insertIndex, 0, splineTypeObsContext);
|
|
80
|
+
}
|
|
81
|
+
return entries;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export { ControlPointPolyline as default };
|
|
@@ -1,26 +1,24 @@
|
|
|
1
|
-
import _defineProperty from '
|
|
1
|
+
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
|
import { extractAllNUMGroups, restoreAdditionalMetrics } from './metricHandler.js';
|
|
8
9
|
|
|
9
10
|
var _EllipticalROI;
|
|
10
11
|
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; }
|
|
11
12
|
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; }
|
|
12
|
-
const
|
|
13
|
-
Ellipse: TID300Ellipse
|
|
14
|
-
} = utilities.TID300;
|
|
13
|
+
const TID300Ellipse = utilities.TID300.Ellipse;
|
|
15
14
|
class EllipticalROI 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, EllipticalROI.toolType);
|
|
16
|
+
const _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, EllipticalROI.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 referencedSOPInstanceUID = state.sopInstanceUid;
|
|
25
23
|
const allNUMGroups = extractAllNUMGroups(MeasurementGroup, referencedSOPInstanceUID);
|
|
26
24
|
const measurementNUMGroups = allNUMGroups[referencedSOPInstanceUID] || {};
|
|
@@ -39,20 +37,15 @@ class EllipticalROI 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
|
-
cachedStats = {},
|
|
50
|
-
handles
|
|
51
|
-
} = data;
|
|
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;
|
|
52
47
|
const rotation = data.initialRotation || 0;
|
|
53
|
-
const
|
|
54
|
-
referencedImageId
|
|
55
|
-
} = metadata;
|
|
48
|
+
const referencedImageId = metadata.referencedImageId;
|
|
56
49
|
const scoordProps = {
|
|
57
50
|
is3DMeasurement,
|
|
58
51
|
referencedImageId
|
|
@@ -77,15 +70,14 @@ class EllipticalROI extends BaseAdapter3D {
|
|
|
77
70
|
} else {
|
|
78
71
|
points.push(left, right, top, bottom);
|
|
79
72
|
}
|
|
80
|
-
const {
|
|
81
|
-
area,
|
|
82
|
-
max,
|
|
83
|
-
min,
|
|
84
|
-
mean,
|
|
85
|
-
stdDev,
|
|
86
|
-
modalityUnit,
|
|
87
|
-
areaUnit
|
|
88
|
-
} = cachedStats["imageId:".concat(referencedImageId)] || {};
|
|
73
|
+
const _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
|
|
74
|
+
area = _ref.area,
|
|
75
|
+
max = _ref.max,
|
|
76
|
+
min = _ref.min,
|
|
77
|
+
mean = _ref.mean,
|
|
78
|
+
stdDev = _ref.stdDev,
|
|
79
|
+
modalityUnit = _ref.modalityUnit,
|
|
80
|
+
areaUnit = _ref.areaUnit;
|
|
89
81
|
const convertedPoints = points.map(point => toScoord(scoordProps, point));
|
|
90
82
|
return {
|
|
91
83
|
area,
|
|
@@ -105,6 +97,6 @@ class EllipticalROI extends BaseAdapter3D {
|
|
|
105
97
|
}
|
|
106
98
|
}
|
|
107
99
|
_EllipticalROI = EllipticalROI;
|
|
108
|
-
_EllipticalROI.init(
|
|
100
|
+
_EllipticalROI.init('EllipticalROI', TID300Ellipse);
|
|
109
101
|
|
|
110
102
|
export { EllipticalROI as default };
|
|
@@ -2,23 +2,17 @@ import { utilities } from 'dcmjs';
|
|
|
2
2
|
import Probe from './Probe.js';
|
|
3
3
|
|
|
4
4
|
var _KeyImage;
|
|
5
|
-
const
|
|
6
|
-
Point: TID300Point
|
|
7
|
-
} = utilities.TID300;
|
|
5
|
+
const TID300Point = utilities.TID300.Point;
|
|
8
6
|
class KeyImage extends Probe {
|
|
9
7
|
static getMeasurementData(measurementGroup, sopInstanceUIDToImageIdMap, metadata, trackingIdentifier) {
|
|
10
8
|
const baseData = super.getMeasurementData(measurementGroup, sopInstanceUIDToImageIdMap, metadata, trackingIdentifier);
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
} = baseData.annotation;
|
|
14
|
-
data.isPoint = trackingIdentifier.indexOf("Point") !== -1;
|
|
9
|
+
const data = baseData.annotation.data;
|
|
10
|
+
data.isPoint = trackingIdentifier.indexOf('Point') !== -1;
|
|
15
11
|
return baseData;
|
|
16
12
|
}
|
|
17
13
|
static getTID300RepresentationArguments(tool) {
|
|
18
14
|
const tid300Arguments = super.getTID300RepresentationArguments(tool);
|
|
19
|
-
const
|
|
20
|
-
data
|
|
21
|
-
} = tool;
|
|
15
|
+
const data = tool.data;
|
|
22
16
|
if (data.isPoint) {
|
|
23
17
|
if (data.seriesLevel) {
|
|
24
18
|
tid300Arguments.trackingIdentifierTextValue = this.trackingSeriesPointIdentifier;
|
|
@@ -39,7 +33,7 @@ class KeyImage extends Probe {
|
|
|
39
33
|
}
|
|
40
34
|
}
|
|
41
35
|
_KeyImage = KeyImage;
|
|
42
|
-
_KeyImage.init(
|
|
36
|
+
_KeyImage.init('KeyImage', TID300Point, {
|
|
43
37
|
parentType: Probe.toolType
|
|
44
38
|
});
|
|
45
39
|
_KeyImage.trackingSeriesIdentifier = "".concat(_KeyImage.trackingIdentifierTextValue, ":Series");
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import type { Types } from
|
|
1
|
+
import type { Types } from '@cornerstonejs/tools';
|
|
2
2
|
export default class LabelData {
|
|
3
3
|
protected tid300Item: any;
|
|
4
4
|
protected annotation: Types.Annotation;
|
|
5
5
|
ReferencedSOPSequence: any;
|
|
6
6
|
constructor(tid300Item: any, annotation: Types.Annotation);
|
|
7
7
|
contentItem(): any;
|
|
8
|
+
protected fixScoordRelationships(contentEntries: unknown[]): void;
|
|
9
|
+
protected normalizeContentSequence(contentSeq: unknown): Array<Record<string, unknown>>;
|
|
8
10
|
filterCornerstoneFreeText(contentEntries: any): void;
|
|
9
11
|
createQualitativeLabel(label: string): any;
|
|
10
12
|
createQualitativeLabelPosition(annotation: Types.Annotation): any;
|