@cornerstonejs/adapters 2.0.0-beta.2 → 2.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +493 -0
- package/dist/esm/adapters/Cornerstone/Angle.d.ts +45 -0
- package/dist/esm/adapters/Cornerstone/Angle.js +93 -0
- package/dist/esm/adapters/Cornerstone/ArrowAnnotate.d.ts +49 -0
- package/dist/esm/adapters/Cornerstone/ArrowAnnotate.js +97 -0
- package/dist/esm/adapters/Cornerstone/Bidirectional.d.ts +89 -0
- package/dist/esm/adapters/Cornerstone/Bidirectional.js +170 -0
- package/dist/esm/adapters/Cornerstone/CircleRoi.d.ts +65 -0
- package/dist/esm/adapters/Cornerstone/CircleRoi.js +115 -0
- package/dist/esm/adapters/Cornerstone/CobbAngle.d.ts +49 -0
- package/dist/esm/adapters/Cornerstone/CobbAngle.js +98 -0
- package/dist/esm/adapters/Cornerstone/EllipticalRoi.d.ts +57 -0
- package/dist/esm/adapters/Cornerstone/EllipticalRoi.js +178 -0
- package/dist/esm/adapters/Cornerstone/FreehandRoi.d.ts +42 -0
- package/dist/esm/adapters/Cornerstone/FreehandRoi.js +89 -0
- package/dist/esm/adapters/Cornerstone/Length.d.ts +39 -0
- package/dist/esm/adapters/Cornerstone/Length.js +82 -0
- package/dist/esm/adapters/Cornerstone/MeasurementReport.d.ts +36 -0
- package/dist/esm/adapters/Cornerstone/MeasurementReport.js +276 -0
- package/dist/esm/adapters/Cornerstone/RectangleRoi.d.ts +44 -0
- package/dist/esm/adapters/Cornerstone/RectangleRoi.js +97 -0
- package/dist/esm/adapters/Cornerstone/Segmentation.d.ts +44 -0
- package/dist/esm/adapters/Cornerstone/Segmentation.js +79 -0
- package/dist/esm/adapters/Cornerstone/Segmentation_3X.d.ts +45 -0
- package/dist/esm/adapters/Cornerstone/Segmentation_3X.js +428 -0
- package/dist/esm/adapters/Cornerstone/Segmentation_4X.d.ts +54 -0
- package/dist/esm/adapters/Cornerstone/Segmentation_4X.js +1200 -0
- package/dist/esm/adapters/Cornerstone/cornerstone4Tag.d.ts +2 -0
- package/dist/esm/adapters/Cornerstone/cornerstone4Tag.js +3 -0
- package/dist/esm/adapters/Cornerstone/index.d.ts +34 -0
- package/dist/esm/adapters/Cornerstone/index.js +29 -0
- package/dist/esm/adapters/Cornerstone3D/Angle.js +110 -0
- package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.d.ts +35 -0
- package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.js +123 -0
- package/dist/esm/adapters/Cornerstone3D/Bidirectional.js +146 -0
- package/dist/esm/adapters/Cornerstone3D/CircleROI.js +103 -0
- package/dist/esm/adapters/Cornerstone3D/CobbAngle.js +113 -0
- package/dist/esm/adapters/Cornerstone3D/CodingScheme.d.ts +9 -0
- package/dist/esm/adapters/Cornerstone3D/CodingScheme.js +15 -0
- package/dist/esm/adapters/Cornerstone3D/EllipticalROI.js +170 -0
- package/dist/esm/adapters/Cornerstone3D/Length.d.ts +41 -0
- package/dist/esm/adapters/Cornerstone3D/Length.js +101 -0
- package/dist/{types → esm}/adapters/Cornerstone3D/MeasurementReport.d.ts +1 -1
- package/dist/esm/adapters/Cornerstone3D/MeasurementReport.js +314 -0
- package/dist/{types → esm}/adapters/Cornerstone3D/PlanarFreehandROI.d.ts +9 -2
- package/dist/esm/adapters/Cornerstone3D/PlanarFreehandROI.js +129 -0
- package/dist/esm/adapters/Cornerstone3D/Probe.d.ts +33 -0
- package/dist/esm/adapters/Cornerstone3D/Probe.js +87 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/RTSS.d.ts +90 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/RTSS.js +250 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/index.d.ts +4 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/index.js +6 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getPatientModule.d.ts +13 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getPatientModule.js +22 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getRTROIObservationsSequence.d.ts +6 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getRTROIObservationsSequence.js +10 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getRTSeriesModule.d.ts +4 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getRTSeriesModule.js +9 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedFrameOfReferenceSequence.d.ts +11 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedFrameOfReferenceSequence.js +22 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedSeriesSequence.d.ts +4 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedSeriesSequence.js +27 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getStructureSetModule.d.ts +7 -0
- package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getStructureSetModule.js +12 -0
- package/dist/esm/adapters/Cornerstone3D/RectangleROI.js +92 -0
- package/dist/esm/adapters/Cornerstone3D/Segmentation/generateLabelMaps2DFrom3D.js +45 -0
- package/dist/esm/adapters/Cornerstone3D/Segmentation/generateSegmentation.js +47 -0
- package/dist/esm/adapters/Cornerstone3D/Segmentation/generateToolState.js +25 -0
- package/dist/esm/adapters/Cornerstone3D/Segmentation/index.js +3 -0
- package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.d.ts +36 -0
- package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.js +93 -0
- package/dist/esm/adapters/Cornerstone3D/cornerstone3DTag.d.ts +2 -0
- package/dist/esm/adapters/Cornerstone3D/cornerstone3DTag.js +3 -0
- package/dist/{types → esm}/adapters/Cornerstone3D/index.d.ts +20 -6
- package/dist/esm/adapters/Cornerstone3D/index.js +41 -0
- package/dist/esm/adapters/Cornerstone3D/isValidCornerstoneTrackingIdentifier.js +20 -0
- package/dist/esm/adapters/VTKjs/Segmentation.d.ts +41 -0
- package/dist/esm/adapters/VTKjs/Segmentation.js +186 -0
- package/dist/esm/adapters/VTKjs/index.d.ts +5 -0
- package/dist/esm/adapters/VTKjs/index.js +7 -0
- package/dist/esm/adapters/enums/Events.js +13 -0
- package/dist/esm/adapters/enums/index.js +1 -0
- package/dist/esm/adapters/helpers/codeMeaningEquals.js +14 -0
- package/dist/{types → esm}/adapters/helpers/downloadDICOMData.d.ts +1 -1
- package/dist/esm/adapters/helpers/downloadDICOMData.js +31 -0
- package/dist/esm/adapters/helpers/graphicTypeEquals.js +12 -0
- package/dist/esm/adapters/helpers/index.js +4 -0
- package/dist/esm/adapters/helpers/toArray.js +5 -0
- package/dist/esm/adapters/index.d.ts +62 -0
- package/dist/esm/adapters/index.js +20 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +5 -0
- package/dist/umd/adapters.umd.js +5738 -0
- package/dist/umd/adapters.umd.js.map +1 -0
- package/package.json +14 -10
- package/dist/adapters.es.js +0 -5194
- package/dist/adapters.es.js.map +0 -1
- package/dist/types/adapters/Cornerstone/index.d.ts +0 -16
- package/dist/types/adapters/VTKjs/index.d.ts +0 -4
- package/dist/types/adapters/index.d.ts +0 -43
- package/dist/types/index.d.ts +0 -2
- /package/dist/{types → esm}/adapters/Cornerstone3D/Angle.d.ts +0 -0
- /package/dist/{types → esm}/adapters/Cornerstone3D/Bidirectional.d.ts +0 -0
- /package/dist/{types → esm}/adapters/Cornerstone3D/CircleROI.d.ts +0 -0
- /package/dist/{types → esm}/adapters/Cornerstone3D/CobbAngle.d.ts +0 -0
- /package/dist/{types → esm}/adapters/Cornerstone3D/EllipticalROI.d.ts +0 -0
- /package/dist/{types → esm}/adapters/Cornerstone3D/RectangleROI.d.ts +0 -0
- /package/dist/{types → esm}/adapters/Cornerstone3D/Segmentation/generateLabelMaps2DFrom3D.d.ts +0 -0
- /package/dist/{types → esm}/adapters/Cornerstone3D/Segmentation/generateSegmentation.d.ts +0 -0
- /package/dist/{types → esm}/adapters/Cornerstone3D/Segmentation/generateToolState.d.ts +0 -0
- /package/dist/{types → esm}/adapters/Cornerstone3D/Segmentation/index.d.ts +0 -0
- /package/dist/{types → esm}/adapters/Cornerstone3D/isValidCornerstoneTrackingIdentifier.d.ts +0 -0
- /package/dist/{types → esm}/adapters/enums/Events.d.ts +0 -0
- /package/dist/{types → esm}/adapters/enums/index.d.ts +0 -0
- /package/dist/{types → esm}/adapters/helpers/codeMeaningEquals.d.ts +0 -0
- /package/dist/{types → esm}/adapters/helpers/graphicTypeEquals.d.ts +0 -0
- /package/dist/{types → esm}/adapters/helpers/index.d.ts +0 -0
- /package/dist/{types → esm}/adapters/helpers/toArray.d.ts +0 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { defineProperty as _defineProperty, createClass as _createClass, slicedToArray as _slicedToArray, 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 TID300CobbAngle = utilities.TID300.CobbAngle;
|
|
7
|
+
var MEASUREMENT_TYPE = "CobbAngle";
|
|
8
|
+
var trackingIdentifierTextValue = "".concat(CORNERSTONE_3D_TAG, ":").concat(MEASUREMENT_TYPE);
|
|
9
|
+
var CobbAngle = /*#__PURE__*/function () {
|
|
10
|
+
function CobbAngle() {
|
|
11
|
+
_classCallCheck(this, CobbAngle);
|
|
12
|
+
}
|
|
13
|
+
return _createClass(CobbAngle, null, [{
|
|
14
|
+
key: "getMeasurementData",
|
|
15
|
+
value:
|
|
16
|
+
// TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.
|
|
17
|
+
function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
|
|
18
|
+
var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, CobbAngle.toolType),
|
|
19
|
+
defaultState = _MeasurementReport$ge.defaultState,
|
|
20
|
+
NUMGroup = _MeasurementReport$ge.NUMGroup,
|
|
21
|
+
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
|
|
22
|
+
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
|
23
|
+
var referencedImageId = defaultState.annotation.metadata.referencedImageId;
|
|
24
|
+
var GraphicData = SCOORDGroup.GraphicData;
|
|
25
|
+
var worldCoords = [];
|
|
26
|
+
for (var i = 0; i < GraphicData.length; i += 2) {
|
|
27
|
+
var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
|
|
28
|
+
worldCoords.push(point);
|
|
29
|
+
}
|
|
30
|
+
var state = defaultState;
|
|
31
|
+
state.annotation.data = {
|
|
32
|
+
handles: {
|
|
33
|
+
points: [worldCoords[0], worldCoords[1], worldCoords[2], worldCoords[3]],
|
|
34
|
+
activeHandleIndex: 0,
|
|
35
|
+
textBox: {
|
|
36
|
+
hasMoved: false
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
cachedStats: _defineProperty({}, "imageId:".concat(referencedImageId), {
|
|
40
|
+
angle: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : null
|
|
41
|
+
}),
|
|
42
|
+
frameNumber: ReferencedFrameNumber
|
|
43
|
+
};
|
|
44
|
+
return state;
|
|
45
|
+
}
|
|
46
|
+
}, {
|
|
47
|
+
key: "getTID300RepresentationArguments",
|
|
48
|
+
value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
|
|
49
|
+
var data = tool.data,
|
|
50
|
+
finding = tool.finding,
|
|
51
|
+
findingSites = tool.findingSites,
|
|
52
|
+
metadata = tool.metadata;
|
|
53
|
+
var _data$cachedStats = data.cachedStats,
|
|
54
|
+
cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
|
|
55
|
+
handles = data.handles;
|
|
56
|
+
var referencedImageId = metadata.referencedImageId;
|
|
57
|
+
if (!referencedImageId) {
|
|
58
|
+
throw new Error("CobbAngle.getTID300RepresentationArguments: referencedImageId is not defined");
|
|
59
|
+
}
|
|
60
|
+
var start1 = worldToImageCoords(referencedImageId, handles.points[0]);
|
|
61
|
+
var end1 = worldToImageCoords(referencedImageId, handles.points[1]);
|
|
62
|
+
var start2 = worldToImageCoords(referencedImageId, handles.points[2]);
|
|
63
|
+
var end2 = worldToImageCoords(referencedImageId, handles.points[3]);
|
|
64
|
+
var point1 = {
|
|
65
|
+
x: start1[0],
|
|
66
|
+
y: start1[1]
|
|
67
|
+
};
|
|
68
|
+
var point2 = {
|
|
69
|
+
x: end1[0],
|
|
70
|
+
y: end1[1]
|
|
71
|
+
};
|
|
72
|
+
var point3 = {
|
|
73
|
+
x: start2[0],
|
|
74
|
+
y: start2[1]
|
|
75
|
+
};
|
|
76
|
+
var point4 = {
|
|
77
|
+
x: end2[0],
|
|
78
|
+
y: end2[1]
|
|
79
|
+
};
|
|
80
|
+
var _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
|
|
81
|
+
angle = _ref.angle;
|
|
82
|
+
return {
|
|
83
|
+
point1: point1,
|
|
84
|
+
point2: point2,
|
|
85
|
+
point3: point3,
|
|
86
|
+
point4: point4,
|
|
87
|
+
rAngle: angle,
|
|
88
|
+
trackingIdentifierTextValue: trackingIdentifierTextValue,
|
|
89
|
+
finding: finding,
|
|
90
|
+
findingSites: findingSites || []
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}]);
|
|
94
|
+
}();
|
|
95
|
+
_defineProperty(CobbAngle, "toolType", MEASUREMENT_TYPE);
|
|
96
|
+
_defineProperty(CobbAngle, "utilityToolType", MEASUREMENT_TYPE);
|
|
97
|
+
_defineProperty(CobbAngle, "TID300Representation", TID300CobbAngle);
|
|
98
|
+
_defineProperty(CobbAngle, "isValidCornerstoneTrackingIdentifier", function (TrackingIdentifier) {
|
|
99
|
+
if (!TrackingIdentifier.includes(":")) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
|
103
|
+
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
|
104
|
+
cornerstone3DTag = _TrackingIdentifier$s2[0],
|
|
105
|
+
toolType = _TrackingIdentifier$s2[1];
|
|
106
|
+
if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
return toolType === MEASUREMENT_TYPE;
|
|
110
|
+
});
|
|
111
|
+
MeasurementReport.registerTool(CobbAngle);
|
|
112
|
+
|
|
113
|
+
export { CobbAngle as default };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export default CodingScheme;
|
|
2
|
+
declare namespace CodingScheme {
|
|
3
|
+
export { CodingSchemeDesignator };
|
|
4
|
+
export namespace codeValues {
|
|
5
|
+
export { CORNERSTONEFREETEXT };
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
declare const CodingSchemeDesignator: "CORNERSTONEJS";
|
|
9
|
+
declare const CORNERSTONEFREETEXT: "CORNERSTONEFREETEXT";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// This is a custom coding scheme defined to store some annotations from Cornerstone.
|
|
2
|
+
// Note: CodeMeaning is VR type LO, which means we only actually support 64 characters
|
|
3
|
+
// here this is fine for most labels, but may be problematic at some point.
|
|
4
|
+
var CORNERSTONEFREETEXT = "CORNERSTONEFREETEXT";
|
|
5
|
+
|
|
6
|
+
// Cornerstone specified coding scheme for storing findings
|
|
7
|
+
var CodingSchemeDesignator = "CORNERSTONEJS";
|
|
8
|
+
var CodingScheme = {
|
|
9
|
+
CodingSchemeDesignator: CodingSchemeDesignator,
|
|
10
|
+
codeValues: {
|
|
11
|
+
CORNERSTONEFREETEXT: CORNERSTONEFREETEXT
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export { CodingScheme as default };
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { defineProperty as _defineProperty, createClass as _createClass, toConsumableArray as _toConsumableArray, classCallCheck as _classCallCheck } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import { vec3 } from 'gl-matrix';
|
|
3
|
+
import { utilities } from 'dcmjs';
|
|
4
|
+
import CORNERSTONE_3D_TAG from './cornerstone3DTag.js';
|
|
5
|
+
import MeasurementReport from './MeasurementReport.js';
|
|
6
|
+
import isValidCornerstoneTrackingIdentifier from './isValidCornerstoneTrackingIdentifier.js';
|
|
7
|
+
|
|
8
|
+
var TID300Ellipse = utilities.TID300.Ellipse;
|
|
9
|
+
var ELLIPTICALROI = "EllipticalROI";
|
|
10
|
+
var EPSILON = 1e-4;
|
|
11
|
+
var EllipticalROI = /*#__PURE__*/function () {
|
|
12
|
+
function EllipticalROI() {
|
|
13
|
+
_classCallCheck(this, EllipticalROI);
|
|
14
|
+
}
|
|
15
|
+
return _createClass(EllipticalROI, null, [{
|
|
16
|
+
key: "getMeasurementData",
|
|
17
|
+
value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
|
|
18
|
+
var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, EllipticalROI.toolType),
|
|
19
|
+
defaultState = _MeasurementReport$ge.defaultState,
|
|
20
|
+
NUMGroup = _MeasurementReport$ge.NUMGroup,
|
|
21
|
+
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
|
|
22
|
+
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
|
23
|
+
var referencedImageId = defaultState.annotation.metadata.referencedImageId;
|
|
24
|
+
var GraphicData = SCOORDGroup.GraphicData;
|
|
25
|
+
// GraphicData is ordered as [majorAxisStartX, majorAxisStartY, majorAxisEndX, majorAxisEndY, minorAxisStartX, minorAxisStartY, minorAxisEndX, minorAxisEndY]
|
|
26
|
+
// But Cornerstone3D points are ordered as top, bottom, left, right for the
|
|
27
|
+
// ellipse so we need to identify if the majorAxis is horizontal or vertical
|
|
28
|
+
// in the image plane and then choose the correct points to use for the ellipse.
|
|
29
|
+
var pointsWorld = [];
|
|
30
|
+
for (var i = 0; i < GraphicData.length; i += 2) {
|
|
31
|
+
var worldPos = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
|
|
32
|
+
pointsWorld.push(worldPos);
|
|
33
|
+
}
|
|
34
|
+
var majorAxisStart = vec3.fromValues.apply(vec3, _toConsumableArray(pointsWorld[0]));
|
|
35
|
+
var majorAxisEnd = vec3.fromValues.apply(vec3, _toConsumableArray(pointsWorld[1]));
|
|
36
|
+
var minorAxisStart = vec3.fromValues.apply(vec3, _toConsumableArray(pointsWorld[2]));
|
|
37
|
+
var minorAxisEnd = vec3.fromValues.apply(vec3, _toConsumableArray(pointsWorld[3]));
|
|
38
|
+
var majorAxisVec = vec3.create();
|
|
39
|
+
vec3.sub(majorAxisVec, majorAxisEnd, majorAxisStart);
|
|
40
|
+
// normalize majorAxisVec to avoid scaling issues
|
|
41
|
+
vec3.normalize(majorAxisVec, majorAxisVec);
|
|
42
|
+
var minorAxisVec = vec3.create();
|
|
43
|
+
vec3.sub(minorAxisVec, minorAxisEnd, minorAxisStart);
|
|
44
|
+
vec3.normalize(minorAxisVec, minorAxisVec);
|
|
45
|
+
var imagePlaneModule = metadata.get("imagePlaneModule", referencedImageId);
|
|
46
|
+
if (!imagePlaneModule) {
|
|
47
|
+
throw new Error("imageId does not have imagePlaneModule metadata");
|
|
48
|
+
}
|
|
49
|
+
var columnCosines = imagePlaneModule.columnCosines;
|
|
50
|
+
// find which axis is parallel to the columnCosines
|
|
51
|
+
var columnCosinesVec = vec3.fromValues(columnCosines[0], columnCosines[1], columnCosines[2]);
|
|
52
|
+
var projectedMajorAxisOnColVec = vec3.dot(columnCosinesVec, majorAxisVec);
|
|
53
|
+
var projectedMinorAxisOnColVec = vec3.dot(columnCosinesVec, minorAxisVec);
|
|
54
|
+
var absoluteOfMajorDotProduct = Math.abs(projectedMajorAxisOnColVec);
|
|
55
|
+
var absoluteOfMinorDotProduct = Math.abs(projectedMinorAxisOnColVec);
|
|
56
|
+
var ellipsePoints = [];
|
|
57
|
+
if (Math.abs(absoluteOfMajorDotProduct - 1) < EPSILON) {
|
|
58
|
+
ellipsePoints = [pointsWorld[0], pointsWorld[1], pointsWorld[2], pointsWorld[3]];
|
|
59
|
+
} else if (Math.abs(absoluteOfMinorDotProduct - 1) < EPSILON) {
|
|
60
|
+
ellipsePoints = [pointsWorld[2], pointsWorld[3], pointsWorld[0], pointsWorld[1]];
|
|
61
|
+
} else {
|
|
62
|
+
console.warn("OBLIQUE ELLIPSE NOT YET SUPPORTED");
|
|
63
|
+
}
|
|
64
|
+
var state = defaultState;
|
|
65
|
+
state.annotation.data = {
|
|
66
|
+
handles: {
|
|
67
|
+
points: _toConsumableArray(ellipsePoints),
|
|
68
|
+
activeHandleIndex: 0,
|
|
69
|
+
textBox: {
|
|
70
|
+
hasMoved: false
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
cachedStats: _defineProperty({}, "imageId:".concat(referencedImageId), {
|
|
74
|
+
area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0
|
|
75
|
+
}),
|
|
76
|
+
frameNumber: ReferencedFrameNumber
|
|
77
|
+
};
|
|
78
|
+
return state;
|
|
79
|
+
}
|
|
80
|
+
}, {
|
|
81
|
+
key: "getTID300RepresentationArguments",
|
|
82
|
+
value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
|
|
83
|
+
var data = tool.data,
|
|
84
|
+
finding = tool.finding,
|
|
85
|
+
findingSites = tool.findingSites,
|
|
86
|
+
metadata = tool.metadata;
|
|
87
|
+
var _data$cachedStats = data.cachedStats,
|
|
88
|
+
cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
|
|
89
|
+
handles = data.handles;
|
|
90
|
+
var rotation = data.initialRotation || 0;
|
|
91
|
+
var referencedImageId = metadata.referencedImageId;
|
|
92
|
+
if (!referencedImageId) {
|
|
93
|
+
throw new Error("EllipticalROI.getTID300RepresentationArguments: referencedImageId is not defined");
|
|
94
|
+
}
|
|
95
|
+
var top, bottom, left, right;
|
|
96
|
+
// this way when it's restored we can assume the initial rotation is 0.
|
|
97
|
+
if (rotation == 90 || rotation == 270) {
|
|
98
|
+
bottom = worldToImageCoords(referencedImageId, handles.points[2]);
|
|
99
|
+
top = worldToImageCoords(referencedImageId, handles.points[3]);
|
|
100
|
+
left = worldToImageCoords(referencedImageId, handles.points[0]);
|
|
101
|
+
right = worldToImageCoords(referencedImageId, handles.points[1]);
|
|
102
|
+
} else {
|
|
103
|
+
top = worldToImageCoords(referencedImageId, handles.points[0]);
|
|
104
|
+
bottom = worldToImageCoords(referencedImageId, handles.points[1]);
|
|
105
|
+
left = worldToImageCoords(referencedImageId, handles.points[2]);
|
|
106
|
+
right = worldToImageCoords(referencedImageId, handles.points[3]);
|
|
107
|
+
}
|
|
108
|
+
// find the major axis and minor axis
|
|
109
|
+
var topBottomLength = Math.abs(top[1] - bottom[1]);
|
|
110
|
+
var leftRightLength = Math.abs(left[0] - right[0]);
|
|
111
|
+
var points = [];
|
|
112
|
+
if (topBottomLength > leftRightLength) {
|
|
113
|
+
// major axis is bottom to top
|
|
114
|
+
points.push({
|
|
115
|
+
x: top[0],
|
|
116
|
+
y: top[1]
|
|
117
|
+
});
|
|
118
|
+
points.push({
|
|
119
|
+
x: bottom[0],
|
|
120
|
+
y: bottom[1]
|
|
121
|
+
});
|
|
122
|
+
// minor axis is left to right
|
|
123
|
+
points.push({
|
|
124
|
+
x: left[0],
|
|
125
|
+
y: left[1]
|
|
126
|
+
});
|
|
127
|
+
points.push({
|
|
128
|
+
x: right[0],
|
|
129
|
+
y: right[1]
|
|
130
|
+
});
|
|
131
|
+
} else {
|
|
132
|
+
// major axis is left to right
|
|
133
|
+
points.push({
|
|
134
|
+
x: left[0],
|
|
135
|
+
y: left[1]
|
|
136
|
+
});
|
|
137
|
+
points.push({
|
|
138
|
+
x: right[0],
|
|
139
|
+
y: right[1]
|
|
140
|
+
});
|
|
141
|
+
// minor axis is bottom to top
|
|
142
|
+
points.push({
|
|
143
|
+
x: top[0],
|
|
144
|
+
y: top[1]
|
|
145
|
+
});
|
|
146
|
+
points.push({
|
|
147
|
+
x: bottom[0],
|
|
148
|
+
y: bottom[1]
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
var _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
|
|
152
|
+
area = _ref.area;
|
|
153
|
+
return {
|
|
154
|
+
area: area,
|
|
155
|
+
points: points,
|
|
156
|
+
trackingIdentifierTextValue: this.trackingIdentifierTextValue,
|
|
157
|
+
finding: finding,
|
|
158
|
+
findingSites: findingSites || []
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}]);
|
|
162
|
+
}();
|
|
163
|
+
_defineProperty(EllipticalROI, "trackingIdentifierTextValue", "".concat(CORNERSTONE_3D_TAG, ":").concat(ELLIPTICALROI));
|
|
164
|
+
_defineProperty(EllipticalROI, "toolType", ELLIPTICALROI);
|
|
165
|
+
_defineProperty(EllipticalROI, "utilityToolType", ELLIPTICALROI);
|
|
166
|
+
_defineProperty(EllipticalROI, "TID300Representation", TID300Ellipse);
|
|
167
|
+
_defineProperty(EllipticalROI, "isValidCornerstoneTrackingIdentifier", isValidCornerstoneTrackingIdentifier);
|
|
168
|
+
MeasurementReport.registerTool(EllipticalROI);
|
|
169
|
+
|
|
170
|
+
export { EllipticalROI as default };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export default Length;
|
|
2
|
+
declare class Length {
|
|
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
|
+
point1: {
|
|
21
|
+
x: any;
|
|
22
|
+
y: any;
|
|
23
|
+
};
|
|
24
|
+
point2: {
|
|
25
|
+
x: any;
|
|
26
|
+
y: any;
|
|
27
|
+
};
|
|
28
|
+
distance: any;
|
|
29
|
+
trackingIdentifierTextValue: string;
|
|
30
|
+
finding: any;
|
|
31
|
+
findingSites: any;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
declare namespace Length {
|
|
35
|
+
export { LENGTH as toolType };
|
|
36
|
+
export { LENGTH as utilityToolType };
|
|
37
|
+
export { TID300Length as TID300Representation };
|
|
38
|
+
export function isValidCornerstoneTrackingIdentifier(TrackingIdentifier: any): boolean;
|
|
39
|
+
}
|
|
40
|
+
declare const LENGTH: "Length";
|
|
41
|
+
declare const TID300Length: any;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { slicedToArray as _slicedToArray, createClass as _createClass, defineProperty as _defineProperty, 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 TID300Length = utilities.TID300.Length;
|
|
7
|
+
var LENGTH = "Length";
|
|
8
|
+
var trackingIdentifierTextValue = "".concat(CORNERSTONE_3D_TAG, ":").concat(LENGTH);
|
|
9
|
+
var Length = /*#__PURE__*/function () {
|
|
10
|
+
function Length() {
|
|
11
|
+
_classCallCheck(this, Length);
|
|
12
|
+
}
|
|
13
|
+
return _createClass(Length, null, [{
|
|
14
|
+
key: "getMeasurementData",
|
|
15
|
+
value:
|
|
16
|
+
// TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.
|
|
17
|
+
function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
|
|
18
|
+
var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, Length.toolType),
|
|
19
|
+
defaultState = _MeasurementReport$ge.defaultState,
|
|
20
|
+
NUMGroup = _MeasurementReport$ge.NUMGroup,
|
|
21
|
+
SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
|
|
22
|
+
ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
|
|
23
|
+
var referencedImageId = defaultState.annotation.metadata.referencedImageId;
|
|
24
|
+
var GraphicData = SCOORDGroup.GraphicData;
|
|
25
|
+
var worldCoords = [];
|
|
26
|
+
for (var i = 0; i < GraphicData.length; i += 2) {
|
|
27
|
+
var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
|
|
28
|
+
worldCoords.push(point);
|
|
29
|
+
}
|
|
30
|
+
var state = defaultState;
|
|
31
|
+
state.annotation.data = {
|
|
32
|
+
handles: {
|
|
33
|
+
points: [worldCoords[0], worldCoords[1]],
|
|
34
|
+
activeHandleIndex: 0,
|
|
35
|
+
textBox: {
|
|
36
|
+
hasMoved: false
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
cachedStats: _defineProperty({}, "imageId:".concat(referencedImageId), {
|
|
40
|
+
length: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0
|
|
41
|
+
}),
|
|
42
|
+
frameNumber: ReferencedFrameNumber
|
|
43
|
+
};
|
|
44
|
+
return state;
|
|
45
|
+
}
|
|
46
|
+
}, {
|
|
47
|
+
key: "getTID300RepresentationArguments",
|
|
48
|
+
value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
|
|
49
|
+
var data = tool.data,
|
|
50
|
+
finding = tool.finding,
|
|
51
|
+
findingSites = tool.findingSites,
|
|
52
|
+
metadata = tool.metadata;
|
|
53
|
+
var _data$cachedStats = data.cachedStats,
|
|
54
|
+
cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
|
|
55
|
+
handles = data.handles;
|
|
56
|
+
var referencedImageId = metadata.referencedImageId;
|
|
57
|
+
if (!referencedImageId) {
|
|
58
|
+
throw new Error("Length.getTID300RepresentationArguments: referencedImageId is not defined");
|
|
59
|
+
}
|
|
60
|
+
var start = worldToImageCoords(referencedImageId, handles.points[0]);
|
|
61
|
+
var end = worldToImageCoords(referencedImageId, handles.points[1]);
|
|
62
|
+
var point1 = {
|
|
63
|
+
x: start[0],
|
|
64
|
+
y: start[1]
|
|
65
|
+
};
|
|
66
|
+
var point2 = {
|
|
67
|
+
x: end[0],
|
|
68
|
+
y: end[1]
|
|
69
|
+
};
|
|
70
|
+
var _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
|
|
71
|
+
distance = _ref.length;
|
|
72
|
+
return {
|
|
73
|
+
point1: point1,
|
|
74
|
+
point2: point2,
|
|
75
|
+
distance: distance,
|
|
76
|
+
trackingIdentifierTextValue: trackingIdentifierTextValue,
|
|
77
|
+
finding: finding,
|
|
78
|
+
findingSites: findingSites || []
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}]);
|
|
82
|
+
}();
|
|
83
|
+
Length.toolType = LENGTH;
|
|
84
|
+
Length.utilityToolType = LENGTH;
|
|
85
|
+
Length.TID300Representation = TID300Length;
|
|
86
|
+
Length.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
|
|
87
|
+
if (!TrackingIdentifier.includes(":")) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
|
|
91
|
+
_TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
|
|
92
|
+
cornerstone3DTag = _TrackingIdentifier$s2[0],
|
|
93
|
+
toolType = _TrackingIdentifier$s2[1];
|
|
94
|
+
if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
return toolType === LENGTH;
|
|
98
|
+
};
|
|
99
|
+
MeasurementReport.registerTool(Length);
|
|
100
|
+
|
|
101
|
+
export { Length as default };
|