@cornerstonejs/adapters 3.0.0-beta.5 → 3.0.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/esm/adapters/Cornerstone/Angle.js +61 -74
  2. package/dist/esm/adapters/Cornerstone/ArrowAnnotate.js +76 -76
  3. package/dist/esm/adapters/Cornerstone/Bidirectional.js +130 -146
  4. package/dist/esm/adapters/Cornerstone/CircleRoi.js +96 -95
  5. package/dist/esm/adapters/Cornerstone/CobbAngle.js +66 -79
  6. package/dist/esm/adapters/Cornerstone/EllipticalRoi.js +152 -152
  7. package/dist/esm/adapters/Cornerstone/FreehandRoi.js +68 -69
  8. package/dist/esm/adapters/Cornerstone/Length.js +54 -63
  9. package/dist/esm/adapters/Cornerstone/MeasurementReport.js +221 -224
  10. package/dist/esm/adapters/Cornerstone/ParametricMap.js +88 -110
  11. package/dist/esm/adapters/Cornerstone/RectangleRoi.js +72 -78
  12. package/dist/esm/adapters/Cornerstone/Segmentation.js +7 -7
  13. package/dist/esm/adapters/Cornerstone/Segmentation_3X.js +113 -104
  14. package/dist/esm/adapters/Cornerstone/Segmentation_4X.js +434 -462
  15. package/dist/esm/adapters/Cornerstone/index.js +14 -14
  16. package/dist/esm/adapters/Cornerstone3D/Angle.d.ts +2 -5
  17. package/dist/esm/adapters/Cornerstone3D/Angle.js +89 -100
  18. package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.d.ts +5 -11
  19. package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.js +106 -118
  20. package/dist/esm/adapters/Cornerstone3D/BaseAdapter3D.d.ts +43 -0
  21. package/dist/esm/adapters/Cornerstone3D/BaseAdapter3D.js +92 -0
  22. package/dist/esm/adapters/Cornerstone3D/Bidirectional.d.ts +2 -5
  23. package/dist/esm/adapters/Cornerstone3D/Bidirectional.js +118 -133
  24. package/dist/esm/adapters/Cornerstone3D/CircleROI.d.ts +2 -7
  25. package/dist/esm/adapters/Cornerstone3D/CircleROI.js +85 -85
  26. package/dist/esm/adapters/Cornerstone3D/CobbAngle.d.ts +2 -5
  27. package/dist/esm/adapters/Cornerstone3D/CobbAngle.js +93 -104
  28. package/dist/esm/adapters/Cornerstone3D/CodingScheme.js +5 -5
  29. package/dist/esm/adapters/Cornerstone3D/EllipticalROI.d.ts +2 -7
  30. package/dist/esm/adapters/Cornerstone3D/EllipticalROI.js +148 -149
  31. package/dist/esm/adapters/Cornerstone3D/KeyImage.d.ts +24 -0
  32. package/dist/esm/adapters/Cornerstone3D/KeyImage.js +49 -0
  33. package/dist/esm/adapters/Cornerstone3D/Length.d.ts +2 -10
  34. package/dist/esm/adapters/Cornerstone3D/Length.js +83 -93
  35. package/dist/esm/adapters/Cornerstone3D/MeasurementReport.d.ts +23 -4
  36. package/dist/esm/adapters/Cornerstone3D/MeasurementReport.js +259 -240
  37. package/dist/esm/adapters/Cornerstone3D/ParametricMap/generateToolState.js +8 -4
  38. package/dist/esm/adapters/Cornerstone3D/PlanarFreehandROI.d.ts +3 -5
  39. package/dist/esm/adapters/Cornerstone3D/PlanarFreehandROI.js +99 -115
  40. package/dist/esm/adapters/Cornerstone3D/Probe.d.ts +4 -17
  41. package/dist/esm/adapters/Cornerstone3D/Probe.js +38 -79
  42. package/dist/esm/adapters/Cornerstone3D/RTStruct/RTSS.js +60 -52
  43. package/dist/esm/adapters/Cornerstone3D/RTStruct/index.js +3 -1
  44. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getPatientModule.js +5 -5
  45. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedFrameOfReferenceSequence.js +14 -10
  46. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedSeriesSequence.js +17 -11
  47. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getStructureSetModule.js +3 -1
  48. package/dist/esm/adapters/Cornerstone3D/RectangleROI.d.ts +2 -5
  49. package/dist/esm/adapters/Cornerstone3D/RectangleROI.js +73 -85
  50. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateLabelMaps2DFrom3D.js +15 -13
  51. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateSegmentation.js +15 -9
  52. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateToolState.js +10 -10
  53. package/dist/esm/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.js +134 -151
  54. package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.d.ts +2 -5
  55. package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.js +68 -84
  56. package/dist/esm/adapters/Cornerstone3D/index.d.ts +4 -0
  57. package/dist/esm/adapters/Cornerstone3D/index.js +21 -17
  58. package/dist/esm/adapters/VTKjs/Segmentation.js +66 -72
  59. package/dist/esm/adapters/VTKjs/index.js +2 -2
  60. package/dist/esm/adapters/helpers/checkIfPerpendicular.js +2 -2
  61. package/dist/esm/adapters/helpers/checkOrientation.js +8 -8
  62. package/dist/esm/adapters/helpers/codeMeaningEquals.js +2 -2
  63. package/dist/esm/adapters/helpers/compareArrays.js +4 -2
  64. package/dist/esm/adapters/helpers/downloadDICOMData.js +6 -4
  65. package/dist/esm/adapters/helpers/getDatasetsFromImages.js +20 -18
  66. package/dist/esm/adapters/helpers/graphicTypeEquals.js +2 -2
  67. package/dist/esm/adapters/helpers/toArray.js +1 -3
  68. package/dist/esm/adapters/index.d.ts +2 -0
  69. package/dist/esm/adapters/index.js +6 -5
  70. package/dist/esm/node_modules/@babel/runtime/helpers/esm/defineProperty.js +18 -0
  71. package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +14 -0
  72. package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +9 -0
  73. package/dist/esm/node_modules/@babel/runtime/helpers/esm/typeof.js +11 -0
  74. package/package.json +4 -4
  75. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +0 -493
  76. package/dist/esm/adapters/Cornerstone3D/isValidCornerstoneTrackingIdentifier.js +0 -18
@@ -11,22 +11,22 @@ import RectangleRoi from './RectangleRoi.js';
11
11
  import * as Segmentation from './Segmentation.js';
12
12
  import ParametricMapObj from './ParametricMap.js';
13
13
 
14
- var CornerstoneSR = {
15
- Length: Length,
16
- FreehandRoi: FreehandRoi,
17
- Bidirectional: Bidirectional,
18
- EllipticalRoi: EllipticalRoi,
19
- CircleRoi: CircleRoi,
20
- ArrowAnnotate: ArrowAnnotate,
21
- MeasurementReport: MeasurementReport,
22
- CobbAngle: CobbAngle,
23
- Angle: Angle,
24
- RectangleRoi: RectangleRoi
14
+ const CornerstoneSR = {
15
+ Length,
16
+ FreehandRoi,
17
+ Bidirectional,
18
+ EllipticalRoi,
19
+ CircleRoi,
20
+ ArrowAnnotate,
21
+ MeasurementReport,
22
+ CobbAngle,
23
+ Angle,
24
+ RectangleRoi
25
25
  };
26
- var CornerstoneSEG = {
27
- Segmentation: Segmentation
26
+ const CornerstoneSEG = {
27
+ Segmentation
28
28
  };
29
- var CornerstonePMAP = {
29
+ const CornerstonePMAP = {
30
30
  ParametricMap: ParametricMapObj
31
31
  };
32
32
 
@@ -1,8 +1,5 @@
1
- declare class Angle {
2
- static toolType: string;
3
- static utilityToolType: string;
4
- static TID300Representation: any;
5
- static isValidCornerstoneTrackingIdentifier: (TrackingIdentifier: any) => boolean;
1
+ import BaseAdapter3D from "./BaseAdapter3D";
2
+ declare class Angle extends BaseAdapter3D {
6
3
  static getMeasurementData(MeasurementGroup: any, sopInstanceUIDToImageIdMap: any, imageToWorldCoords: any, metadata: any): {
7
4
  description: any;
8
5
  sopInstanceUid: any;
@@ -1,109 +1,98 @@
1
- import { slicedToArray as _slicedToArray, createClass as _createClass, defineProperty as _defineProperty, classCallCheck as _classCallCheck } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
1
  import { utilities } from 'dcmjs';
3
- import CORNERSTONE_3D_TAG from './cornerstone3DTag.js';
4
2
  import MeasurementReport from './MeasurementReport.js';
3
+ import BaseAdapter3D from './BaseAdapter3D.js';
5
4
 
6
5
  var _Angle;
7
- var TID300CobbAngle = utilities.TID300.CobbAngle;
8
- var MEASUREMENT_TYPE = "Angle";
9
- var trackingIdentifierTextValue = "".concat(CORNERSTONE_3D_TAG, ":").concat(MEASUREMENT_TYPE);
10
- var Angle = /*#__PURE__*/function () {
11
- function Angle() {
12
- _classCallCheck(this, Angle);
13
- }
14
- return _createClass(Angle, null, [{
15
- key: "getMeasurementData",
16
- value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
17
- var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, Angle.toolType),
18
- defaultState = _MeasurementReport$ge.defaultState,
19
- NUMGroup = _MeasurementReport$ge.NUMGroup,
20
- SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
21
- ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
22
- var referencedImageId = defaultState.annotation.metadata.referencedImageId;
23
- var GraphicData = SCOORDGroup.GraphicData;
24
- var worldCoords = [];
25
- for (var i = 0; i < GraphicData.length; i += 2) {
26
- var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
27
- worldCoords.push(point);
28
- }
29
- var state = defaultState;
30
- state.annotation.data = {
31
- handles: {
32
- points: [worldCoords[0], worldCoords[1], worldCoords[3]],
33
- activeHandleIndex: 0,
34
- textBox: {
35
- hasMoved: false
36
- }
37
- },
38
- cachedStats: _defineProperty({}, "imageId:".concat(referencedImageId), {
39
- angle: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : null
40
- }),
41
- frameNumber: ReferencedFrameNumber
42
- };
43
- return state;
6
+ const {
7
+ CobbAngle: TID300CobbAngle
8
+ } = utilities.TID300;
9
+ class Angle extends BaseAdapter3D {
10
+ static getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
11
+ const {
12
+ defaultState,
13
+ NUMGroup,
14
+ SCOORDGroup,
15
+ ReferencedFrameNumber
16
+ } = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, Angle.toolType);
17
+ const referencedImageId = defaultState.annotation.metadata.referencedImageId;
18
+ const {
19
+ GraphicData
20
+ } = SCOORDGroup;
21
+ const worldCoords = [];
22
+ for (let i = 0; i < GraphicData.length; i += 2) {
23
+ const point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
24
+ worldCoords.push(point);
44
25
  }
45
- }, {
46
- key: "getTID300RepresentationArguments",
47
- value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
48
- var data = tool.data,
49
- finding = tool.finding,
50
- findingSites = tool.findingSites,
51
- metadata = tool.metadata;
52
- var _data$cachedStats = data.cachedStats,
53
- cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
54
- handles = data.handles;
55
- var referencedImageId = metadata.referencedImageId;
56
- if (!referencedImageId) {
57
- throw new Error("Angle.getTID300RepresentationArguments: referencedImageId is not defined");
58
- }
59
- var start1 = worldToImageCoords(referencedImageId, handles.points[0]);
60
- var middle = worldToImageCoords(referencedImageId, handles.points[1]);
61
- var end = worldToImageCoords(referencedImageId, handles.points[2]);
62
- var point1 = {
63
- x: start1[0],
64
- y: start1[1]
65
- };
66
- var point2 = {
67
- x: middle[0],
68
- y: middle[1]
69
- };
70
- var point3 = point2;
71
- var point4 = {
72
- x: end[0],
73
- y: end[1]
74
- };
75
- var _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
76
- angle = _ref.angle;
77
- return {
78
- point1: point1,
79
- point2: point2,
80
- point3: point3,
81
- point4: point4,
82
- rAngle: angle,
83
- trackingIdentifierTextValue: trackingIdentifierTextValue,
84
- finding: finding,
85
- findingSites: findingSites || []
86
- };
87
- }
88
- }]);
89
- }();
90
- _Angle = Angle;
91
- _Angle.toolType = MEASUREMENT_TYPE;
92
- _Angle.utilityToolType = MEASUREMENT_TYPE;
93
- _Angle.TID300Representation = TID300CobbAngle;
94
- _Angle.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
95
- if (!TrackingIdentifier.includes(":")) {
96
- return false;
26
+ const state = defaultState;
27
+ state.annotation.data = {
28
+ handles: {
29
+ points: [worldCoords[0], worldCoords[1], worldCoords[3]],
30
+ activeHandleIndex: 0,
31
+ textBox: {
32
+ hasMoved: false
33
+ }
34
+ },
35
+ cachedStats: {
36
+ ["imageId:".concat(referencedImageId)]: {
37
+ angle: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : null
38
+ }
39
+ },
40
+ frameNumber: ReferencedFrameNumber
41
+ };
42
+ return state;
97
43
  }
98
- var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
99
- _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
100
- cornerstone3DTag = _TrackingIdentifier$s2[0],
101
- toolType = _TrackingIdentifier$s2[1];
102
- if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
103
- return false;
44
+ static getTID300RepresentationArguments(tool, worldToImageCoords) {
45
+ const {
46
+ data,
47
+ finding,
48
+ findingSites,
49
+ metadata
50
+ } = tool;
51
+ const {
52
+ cachedStats = {},
53
+ handles
54
+ } = data;
55
+ const {
56
+ referencedImageId
57
+ } = metadata;
58
+ if (!referencedImageId) {
59
+ throw new Error("Angle.getTID300RepresentationArguments: referencedImageId is not defined");
60
+ }
61
+ const start1 = worldToImageCoords(referencedImageId, handles.points[0]);
62
+ const middle = worldToImageCoords(referencedImageId, handles.points[1]);
63
+ const end = worldToImageCoords(referencedImageId, handles.points[2]);
64
+ const point1 = {
65
+ x: start1[0],
66
+ y: start1[1]
67
+ };
68
+ const point2 = {
69
+ x: middle[0],
70
+ y: middle[1]
71
+ };
72
+ const point3 = point2;
73
+ const point4 = {
74
+ x: end[0],
75
+ y: end[1]
76
+ };
77
+ const {
78
+ angle
79
+ } = cachedStats["imageId:".concat(referencedImageId)] || {};
80
+ return {
81
+ point1,
82
+ point2,
83
+ point3,
84
+ point4,
85
+ rAngle: angle,
86
+ trackingIdentifierTextValue: this.trackingIdentifierTextValue,
87
+ finding,
88
+ findingSites: findingSites || []
89
+ };
104
90
  }
105
- return toolType === MEASUREMENT_TYPE;
106
- };
107
- MeasurementReport.registerTool(Angle);
91
+ }
92
+ _Angle = Angle;
93
+ (() => {
94
+ _Angle.init("Angle", TID300CobbAngle);
95
+ _Angle.registerLegacy();
96
+ })();
108
97
 
109
98
  export { Angle as default };
@@ -1,6 +1,6 @@
1
- export default ArrowAnnotate;
2
- declare class ArrowAnnotate {
3
- static getMeasurementData(MeasurementGroup: any, sopInstanceUIDToImageIdMap: any, imageToWorldCoords: any, metadata: any): {
1
+ import BaseAdapter3D from "./BaseAdapter3D";
2
+ declare class ArrowAnnotate extends BaseAdapter3D {
3
+ static getMeasurementData(MeasurementGroup: any, sopInstanceUIDToImageIdMap: any, imageToWorldCoords: any, metadata: any, _trackingIdentifier: any): {
4
4
  description: any;
5
5
  sopInstanceUid: any;
6
6
  annotation: {
@@ -23,13 +23,7 @@ declare class ArrowAnnotate {
23
23
  }[];
24
24
  trackingIdentifierTextValue: string;
25
25
  findingSites: any;
26
+ finding: any;
26
27
  };
27
28
  }
28
- declare namespace ArrowAnnotate {
29
- export { ARROW_ANNOTATE as toolType };
30
- export { ARROW_ANNOTATE as utilityToolType };
31
- export { TID300Point as TID300Representation };
32
- export function isValidCornerstoneTrackingIdentifier(TrackingIdentifier: any): boolean;
33
- }
34
- declare const ARROW_ANNOTATE: "ArrowAnnotate";
35
- declare const TID300Point: any;
29
+ export default ArrowAnnotate;
@@ -1,130 +1,118 @@
1
- import { slicedToArray as _slicedToArray, createClass as _createClass, classCallCheck as _classCallCheck } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
1
  import MeasurementReport from './MeasurementReport.js';
3
2
  import { utilities } from 'dcmjs';
4
- import CORNERSTONE_3D_TAG from './cornerstone3DTag.js';
3
+ import BaseAdapter3D from './BaseAdapter3D.js';
5
4
  import CodingScheme from './CodingScheme.js';
6
5
 
7
- var TID300Point = utilities.TID300.Point;
8
- var ARROW_ANNOTATE = "ArrowAnnotate";
9
- var trackingIdentifierTextValue = "".concat(CORNERSTONE_3D_TAG, ":").concat(ARROW_ANNOTATE);
10
- var codeValues = CodingScheme.codeValues,
11
- CodingSchemeDesignator = CodingScheme.CodingSchemeDesignator;
12
- var ArrowAnnotate = /*#__PURE__*/function () {
13
- function ArrowAnnotate() {
14
- _classCallCheck(this, ArrowAnnotate);
15
- }
16
- return _createClass(ArrowAnnotate, null, [{
17
- key: "getMeasurementData",
18
- value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
19
- var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, ArrowAnnotate.toolType),
20
- defaultState = _MeasurementReport$ge.defaultState,
21
- SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
22
- ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
23
- var referencedImageId = defaultState.annotation.metadata.referencedImageId;
24
- var text = defaultState.annotation.metadata.label;
25
- var GraphicData = SCOORDGroup.GraphicData;
26
- var worldCoords = [];
27
- for (var i = 0; i < GraphicData.length; i += 2) {
28
- var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
29
- worldCoords.push(point);
6
+ var _ArrowAnnotate;
7
+ const {
8
+ Point: TID300Point
9
+ } = utilities.TID300;
10
+ const {
11
+ codeValues
12
+ } = CodingScheme;
13
+ class ArrowAnnotate extends BaseAdapter3D {
14
+ static getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata, _trackingIdentifier) {
15
+ const {
16
+ defaultState,
17
+ SCOORDGroup,
18
+ ReferencedFrameNumber
19
+ } = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, ArrowAnnotate.toolType);
20
+ const referencedImageId = defaultState.annotation.metadata.referencedImageId;
21
+ const text = defaultState.annotation.metadata.label;
22
+ const {
23
+ GraphicData
24
+ } = SCOORDGroup;
25
+ const worldCoords = [];
26
+ for (let i = 0; i < GraphicData.length; i += 2) {
27
+ const point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
28
+ worldCoords.push(point);
29
+ }
30
+ if (worldCoords.length === 1) {
31
+ const imagePixelModule = metadata.get("imagePixelModule", referencedImageId);
32
+ let xOffset = 10;
33
+ let yOffset = 10;
34
+ if (imagePixelModule) {
35
+ const {
36
+ columns,
37
+ rows
38
+ } = imagePixelModule;
39
+ xOffset = columns / 10;
40
+ yOffset = rows / 10;
30
41
  }
31
-
32
- // Since the arrowAnnotate measurement is just a point, to generate the tool state
33
- // we derive the second point based on the image size relative to the first point.
34
- if (worldCoords.length === 1) {
35
- var imagePixelModule = metadata.get("imagePixelModule", referencedImageId);
36
- var xOffset = 10;
37
- var yOffset = 10;
38
- if (imagePixelModule) {
39
- var columns = imagePixelModule.columns,
40
- rows = imagePixelModule.rows;
41
- xOffset = columns / 10;
42
- yOffset = rows / 10;
42
+ const secondPoint = imageToWorldCoords(referencedImageId, [GraphicData[0] + xOffset, GraphicData[1] + yOffset]);
43
+ worldCoords.push(secondPoint);
44
+ }
45
+ const state = defaultState;
46
+ state.annotation.data = {
47
+ text,
48
+ handles: {
49
+ arrowFirst: true,
50
+ points: [worldCoords[0], worldCoords[1]],
51
+ activeHandleIndex: 0,
52
+ textBox: {
53
+ hasMoved: false
43
54
  }
44
- var secondPoint = imageToWorldCoords(referencedImageId, [GraphicData[0] + xOffset, GraphicData[1] + yOffset]);
45
- worldCoords.push(secondPoint);
46
- }
47
- var state = defaultState;
48
- state.annotation.data = {
49
- text: text,
50
- handles: {
51
- arrowFirst: true,
52
- points: [worldCoords[0], worldCoords[1]],
53
- activeHandleIndex: 0,
54
- textBox: {
55
- hasMoved: false
56
- }
57
- },
58
- frameNumber: ReferencedFrameNumber
59
- };
60
- return state;
55
+ },
56
+ frameNumber: ReferencedFrameNumber
57
+ };
58
+ return state;
59
+ }
60
+ static getTID300RepresentationArguments(tool, worldToImageCoords) {
61
+ const {
62
+ data,
63
+ metadata,
64
+ findingSites
65
+ } = tool;
66
+ let {
67
+ finding
68
+ } = tool;
69
+ const {
70
+ referencedImageId
71
+ } = metadata;
72
+ if (!referencedImageId) {
73
+ throw new Error("ArrowAnnotate.getTID300RepresentationArguments: referencedImageId is not defined");
61
74
  }
62
- }, {
63
- key: "getTID300RepresentationArguments",
64
- value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
65
- var data = tool.data,
66
- metadata = tool.metadata;
67
- var finding = tool.finding,
68
- findingSites = tool.findingSites;
69
- var referencedImageId = metadata.referencedImageId;
70
- if (!referencedImageId) {
71
- throw new Error("ArrowAnnotate.getTID300RepresentationArguments: referencedImageId is not defined");
72
- }
73
- var _data$handles = data.handles,
74
- points = _data$handles.points,
75
- arrowFirst = _data$handles.arrowFirst;
76
- var point;
77
- var point2;
78
- if (arrowFirst) {
79
- point = points[0];
80
- point2 = points[1];
81
- } else {
82
- point = points[1];
83
- point2 = points[0];
84
- }
85
- var pointImage = worldToImageCoords(referencedImageId, point);
86
- var pointImage2 = worldToImageCoords(referencedImageId, point2);
87
- var TID300RepresentationArguments = {
88
- points: [{
89
- x: pointImage[0],
90
- y: pointImage[1]
91
- }, {
92
- x: pointImage2[0],
93
- y: pointImage2[1]
94
- }],
95
- trackingIdentifierTextValue: trackingIdentifierTextValue,
96
- findingSites: findingSites || []
75
+ const {
76
+ points,
77
+ arrowFirst
78
+ } = data.handles;
79
+ let point;
80
+ let point2;
81
+ if (arrowFirst) {
82
+ point = points[0];
83
+ point2 = points[1];
84
+ } else {
85
+ point = points[1];
86
+ point2 = points[0];
87
+ }
88
+ const pointImage = worldToImageCoords(referencedImageId, point);
89
+ const pointImage2 = worldToImageCoords(referencedImageId, point2);
90
+ const TID300RepresentationArguments = {
91
+ points: [{
92
+ x: pointImage[0],
93
+ y: pointImage[1]
94
+ }, {
95
+ x: pointImage2[0],
96
+ y: pointImage2[1]
97
+ }],
98
+ trackingIdentifierTextValue: this.trackingIdentifierTextValue,
99
+ findingSites: findingSites || [],
100
+ finding
101
+ };
102
+ if (!finding || finding.CodeValue !== codeValues.CORNERSTONEFREETEXT) {
103
+ finding = {
104
+ CodeValue: codeValues.CORNERSTONEFREETEXT,
105
+ CodingSchemeDesignator: CodingScheme.CodingSchemeDesignator,
106
+ CodeMeaning: data.text
97
107
  };
98
-
99
- // If freetext finding isn't present, add it from the tool text.
100
- if (!finding || finding.CodeValue !== codeValues.CORNERSTONEFREETEXT) {
101
- finding = {
102
- CodeValue: codeValues.CORNERSTONEFREETEXT,
103
- CodingSchemeDesignator: CodingSchemeDesignator,
104
- CodeMeaning: data.text
105
- };
106
- }
107
- TID300RepresentationArguments.finding = finding;
108
- return TID300RepresentationArguments;
109
108
  }
110
- }]);
111
- }();
112
- ArrowAnnotate.toolType = ARROW_ANNOTATE;
113
- ArrowAnnotate.utilityToolType = ARROW_ANNOTATE;
114
- ArrowAnnotate.TID300Representation = TID300Point;
115
- ArrowAnnotate.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
116
- if (!TrackingIdentifier.includes(":")) {
117
- return false;
118
- }
119
- var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
120
- _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
121
- cornerstone3DTag = _TrackingIdentifier$s2[0],
122
- toolType = _TrackingIdentifier$s2[1];
123
- if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
124
- return false;
109
+ return TID300RepresentationArguments;
125
110
  }
126
- return toolType === ARROW_ANNOTATE;
127
- };
128
- MeasurementReport.registerTool(ArrowAnnotate);
111
+ }
112
+ _ArrowAnnotate = ArrowAnnotate;
113
+ (() => {
114
+ _ArrowAnnotate.init("ArrowAnnotate", TID300Point);
115
+ _ArrowAnnotate.registerLegacy();
116
+ })();
129
117
 
130
118
  export { ArrowAnnotate as default };
@@ -0,0 +1,43 @@
1
+ import { type AdapterOptions, type MeasurementAdapter } from "./MeasurementReport";
2
+ export type Point = {
3
+ x: number;
4
+ y: number;
5
+ z?: number;
6
+ };
7
+ export type TID300Arguments = {
8
+ points?: Point[];
9
+ point1?: Point;
10
+ point2?: Point;
11
+ trackingIdentifierTextValue: string;
12
+ findingSites: [];
13
+ finding: any;
14
+ [key: string]: unknown;
15
+ };
16
+ export default class BaseAdapter3D {
17
+ static toolType: string;
18
+ static TID300Representation: any;
19
+ static trackingIdentifierTextValue: string;
20
+ static trackingIdentifiers: Set<string>;
21
+ static parentType: string;
22
+ static init(toolType: string, representation: any, options?: AdapterOptions): void;
23
+ static registerLegacy(): void;
24
+ static registerSubType(adapter: MeasurementAdapter, toolType: string, replace?: any): any;
25
+ static isValidCornerstoneTrackingIdentifier(trackingIdentifier: string): boolean;
26
+ static getMeasurementData(MeasurementGroup: any, sopInstanceUIDToImageIdMap: any, _imageToWorldCoords: any, metadata: any, trackingIdentifier?: string): {
27
+ description: any;
28
+ sopInstanceUid: any;
29
+ annotation: {
30
+ annotationUID: any;
31
+ metadata: {
32
+ toolName: any;
33
+ referencedImageId: any;
34
+ FrameOfReferenceUID: any;
35
+ label: string;
36
+ };
37
+ data: any;
38
+ };
39
+ finding: any;
40
+ findingSites: any[];
41
+ };
42
+ static getTID300RepresentationArguments(tool: any, worldToImageCoords: any): TID300Arguments;
43
+ }
@@ -0,0 +1,92 @@
1
+ import CORNERSTONE_3D_TAG from './cornerstone3DTag.js';
2
+ import MeasurementReport from './MeasurementReport.js';
3
+
4
+ class BaseAdapter3D {
5
+ static init(toolType, representation, options) {
6
+ this.toolType = toolType;
7
+ if (BaseAdapter3D.toolType) {
8
+ throw new Error("Base adapter tool type set to ".concat(this.toolType, " while setting ").concat(toolType));
9
+ }
10
+ this.parentType = options === null || options === void 0 ? void 0 : options.parentType;
11
+ this.trackingIdentifiers = new Set();
12
+ this.TID300Representation = representation;
13
+ if (this.parentType) {
14
+ this.trackingIdentifierTextValue = "".concat(CORNERSTONE_3D_TAG, ":").concat(this.parentType, ":").concat(this.toolType);
15
+ const alternateTrackingIdentifier = "".concat(CORNERSTONE_3D_TAG, ":").concat(this.toolType);
16
+ this.trackingIdentifiers.add(alternateTrackingIdentifier);
17
+ } else {
18
+ this.trackingIdentifierTextValue = "".concat(CORNERSTONE_3D_TAG, ":").concat(toolType);
19
+ }
20
+ this.trackingIdentifiers.add(this.trackingIdentifierTextValue);
21
+ MeasurementReport.registerTool(this);
22
+ }
23
+ static registerLegacy() {
24
+ this.trackingIdentifiers.add("cornerstoneTools@^4.0.0:".concat(this.toolType));
25
+ }
26
+ static registerSubType(adapter, toolType, replace) {
27
+ const subAdapter = Object.create(adapter);
28
+ subAdapter.init(toolType, adapter.TID300Representation, {
29
+ parentType: adapter.parentType || adapter.toolType,
30
+ replace
31
+ });
32
+ return subAdapter;
33
+ }
34
+ static isValidCornerstoneTrackingIdentifier(trackingIdentifier) {
35
+ if (this.trackingIdentifiers.has(trackingIdentifier)) {
36
+ return true;
37
+ }
38
+ if (!trackingIdentifier.includes(":")) {
39
+ return false;
40
+ }
41
+ return trackingIdentifier.startsWith(this.trackingIdentifierTextValue);
42
+ }
43
+ static getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, _imageToWorldCoords, metadata, trackingIdentifier) {
44
+ const {
45
+ defaultState: state,
46
+ ReferencedFrameNumber
47
+ } = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType);
48
+ state.annotation.data = {
49
+ cachedStats: {},
50
+ frameNumber: ReferencedFrameNumber,
51
+ seriesLevel: (trackingIdentifier === null || trackingIdentifier === void 0 ? void 0 : trackingIdentifier.indexOf(":Series")) > 0
52
+ };
53
+ return state;
54
+ }
55
+ static getTID300RepresentationArguments(tool, worldToImageCoords) {
56
+ const {
57
+ data,
58
+ metadata
59
+ } = tool;
60
+ const {
61
+ finding,
62
+ findingSites
63
+ } = tool;
64
+ const {
65
+ referencedImageId
66
+ } = metadata;
67
+ if (!referencedImageId) {
68
+ throw new Error("Probe.getTID300RepresentationArguments: referencedImageId is not defined");
69
+ }
70
+ const {
71
+ handles: {
72
+ points = []
73
+ }
74
+ } = data;
75
+ const pointsImage = points.map(point => {
76
+ const pointImage = worldToImageCoords(referencedImageId, point);
77
+ return {
78
+ x: pointImage[0],
79
+ y: pointImage[1]
80
+ };
81
+ });
82
+ const tidArguments = {
83
+ points: pointsImage,
84
+ trackingIdentifierTextValue: this.trackingIdentifierTextValue,
85
+ findingSites: findingSites || [],
86
+ finding
87
+ };
88
+ return tidArguments;
89
+ }
90
+ }
91
+
92
+ export { BaseAdapter3D as default };
@@ -1,8 +1,5 @@
1
- declare class Bidirectional {
2
- static toolType: string;
3
- static utilityToolType: string;
4
- static TID300Representation: any;
5
- static isValidCornerstoneTrackingIdentifier: (TrackingIdentifier: any) => boolean;
1
+ import BaseAdapter3D from "./BaseAdapter3D";
2
+ declare class Bidirectional extends BaseAdapter3D {
6
3
  static getMeasurementData(MeasurementGroup: any, sopInstanceUIDToImageIdMap: any, imageToWorldCoords: any, metadata: any): {
7
4
  description: any;
8
5
  sopInstanceUid: any;