@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
@@ -1,88 +1,75 @@
1
- import { slicedToArray as _slicedToArray, createClass as _createClass, objectSpread2 as _objectSpread2, classCallCheck as _classCallCheck } from '../../_virtual/_rollupPluginBabelHelpers.js';
1
+ import _defineProperty from '../../node_modules/@babel/runtime/helpers/esm/defineProperty.js';
2
2
  import { utilities } from 'dcmjs';
3
3
  import MeasurementReport from './MeasurementReport.js';
4
4
  import CORNERSTONE_4_TAG from './cornerstone4Tag.js';
5
5
 
6
- var TID300Angle = utilities.TID300.Angle;
7
- var ANGLE = "Angle";
8
- var Angle = /*#__PURE__*/function () {
9
- function Angle() {
10
- _classCallCheck(this, Angle);
11
- }
12
- return _createClass(Angle, null, [{
13
- key: "getMeasurementData",
14
- value:
15
- /**
16
- * Generate TID300 measurement data for a plane angle measurement - use a Angle, but label it as Angle
17
- */
18
- function getMeasurementData(MeasurementGroup) {
19
- var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup),
20
- defaultState = _MeasurementReport$ge.defaultState,
21
- NUMGroup = _MeasurementReport$ge.NUMGroup,
22
- SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;
23
- var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
24
- rAngle: NUMGroup.MeasuredValueSequence.NumericValue,
25
- toolType: Angle.toolType,
26
- handles: {
27
- start: {},
28
- middle: {},
29
- end: {},
30
- textBox: {
31
- hasMoved: false,
32
- movesIndependently: false,
33
- drawnIndependently: true,
34
- allowedOutsideImage: true,
35
- hasBoundingBox: true
36
- }
6
+ 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; }
7
+ 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; }
8
+ const {
9
+ Angle: TID300Angle
10
+ } = utilities.TID300;
11
+ const ANGLE = "Angle";
12
+ class Angle {
13
+ /**
14
+ * Generate TID300 measurement data for a plane angle measurement - use a Angle, but label it as Angle
15
+ */
16
+ static getMeasurementData(MeasurementGroup) {
17
+ const {
18
+ defaultState,
19
+ NUMGroup,
20
+ SCOORDGroup
21
+ } = MeasurementReport.getSetupMeasurementData(MeasurementGroup);
22
+ const state = _objectSpread(_objectSpread({}, defaultState), {}, {
23
+ rAngle: NUMGroup.MeasuredValueSequence.NumericValue,
24
+ toolType: Angle.toolType,
25
+ handles: {
26
+ start: {},
27
+ middle: {},
28
+ end: {},
29
+ textBox: {
30
+ hasMoved: false,
31
+ movesIndependently: false,
32
+ drawnIndependently: true,
33
+ allowedOutsideImage: true,
34
+ hasBoundingBox: true
37
35
  }
38
- });
39
- var _SCOORDGroup$GraphicD = _slicedToArray(SCOORDGroup.GraphicData, 8);
40
- state.handles.start.x = _SCOORDGroup$GraphicD[0];
41
- state.handles.start.y = _SCOORDGroup$GraphicD[1];
42
- state.handles.middle.x = _SCOORDGroup$GraphicD[2];
43
- state.handles.middle.y = _SCOORDGroup$GraphicD[3];
44
- state.handles.middle.x = _SCOORDGroup$GraphicD[4];
45
- state.handles.middle.y = _SCOORDGroup$GraphicD[5];
46
- state.handles.end.x = _SCOORDGroup$GraphicD[6];
47
- state.handles.end.y = _SCOORDGroup$GraphicD[7];
48
- return state;
49
- }
50
- }, {
51
- key: "getTID300RepresentationArguments",
52
- value: function getTID300RepresentationArguments(tool) {
53
- var handles = tool.handles,
54
- finding = tool.finding,
55
- findingSites = tool.findingSites;
56
- var point1 = handles.start;
57
- var point2 = handles.middle;
58
- var point3 = handles.middle;
59
- var point4 = handles.end;
60
- var rAngle = tool.rAngle;
61
- var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:Angle";
62
- return {
63
- point1: point1,
64
- point2: point2,
65
- point3: point3,
66
- point4: point4,
67
- rAngle: rAngle,
68
- trackingIdentifierTextValue: trackingIdentifierTextValue,
69
- finding: finding,
70
- findingSites: findingSites || []
71
- };
72
- }
73
- }]);
74
- }();
36
+ }
37
+ });
38
+ [state.handles.start.x, state.handles.start.y, state.handles.middle.x, state.handles.middle.y, state.handles.middle.x, state.handles.middle.y, state.handles.end.x, state.handles.end.y] = SCOORDGroup.GraphicData;
39
+ return state;
40
+ }
41
+ static getTID300RepresentationArguments(tool) {
42
+ const {
43
+ handles,
44
+ finding,
45
+ findingSites
46
+ } = tool;
47
+ const point1 = handles.start;
48
+ const point2 = handles.middle;
49
+ const point3 = handles.middle;
50
+ const point4 = handles.end;
51
+ const rAngle = tool.rAngle;
52
+ const trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:Angle";
53
+ return {
54
+ point1,
55
+ point2,
56
+ point3,
57
+ point4,
58
+ rAngle,
59
+ trackingIdentifierTextValue,
60
+ finding,
61
+ findingSites: findingSites || []
62
+ };
63
+ }
64
+ }
75
65
  Angle.toolType = ANGLE;
76
66
  Angle.utilityToolType = ANGLE;
77
67
  Angle.TID300Representation = TID300Angle;
78
- Angle.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
68
+ Angle.isValidCornerstoneTrackingIdentifier = TrackingIdentifier => {
79
69
  if (!TrackingIdentifier.includes(":")) {
80
70
  return false;
81
71
  }
82
- var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
83
- _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
84
- cornerstone4Tag = _TrackingIdentifier$s2[0],
85
- toolType = _TrackingIdentifier$s2[1];
72
+ const [cornerstone4Tag, toolType] = TrackingIdentifier.split(":");
86
73
  if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
87
74
  return false;
88
75
  }
@@ -1,92 +1,92 @@
1
- import { slicedToArray as _slicedToArray, createClass as _createClass, objectSpread2 as _objectSpread2, classCallCheck as _classCallCheck } from '../../_virtual/_rollupPluginBabelHelpers.js';
1
+ import _defineProperty from '../../node_modules/@babel/runtime/helpers/esm/defineProperty.js';
2
2
  import { utilities } from 'dcmjs';
3
3
  import MeasurementReport from './MeasurementReport.js';
4
4
  import CORNERSTONE_4_TAG from './cornerstone4Tag.js';
5
5
 
6
- var TID300Point = utilities.TID300.Point;
7
- var ARROW_ANNOTATE = "ArrowAnnotate";
8
- var CORNERSTONEFREETEXT = "CORNERSTONEFREETEXT";
9
- var ArrowAnnotate = /*#__PURE__*/function () {
10
- function ArrowAnnotate() {
11
- _classCallCheck(this, ArrowAnnotate);
12
- }
13
- return _createClass(ArrowAnnotate, null, [{
14
- key: "getMeasurementData",
15
- value: function getMeasurementData(MeasurementGroup) {
16
- var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup),
17
- defaultState = _MeasurementReport$ge.defaultState,
18
- SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
19
- findingGroup = _MeasurementReport$ge.findingGroup;
20
- var text = findingGroup.ConceptCodeSequence.CodeMeaning;
21
- var GraphicData = SCOORDGroup.GraphicData;
22
- var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
23
- toolType: ArrowAnnotate.toolType,
24
- active: false,
25
- handles: {
26
- start: {
27
- x: GraphicData[0],
28
- y: GraphicData[1],
29
- highlight: true,
30
- active: false
31
- },
32
- // Use a generic offset if the stored data doesn't have the endpoint, otherwise
33
- // use the actual endpoint.
34
- end: {
35
- x: GraphicData.length == 4 ? GraphicData[2] : GraphicData[0] + 20,
36
- y: GraphicData.length == 4 ? GraphicData[3] : GraphicData[1] + 20,
37
- highlight: true,
38
- active: false
39
- },
40
- textBox: {
41
- hasMoved: false,
42
- movesIndependently: false,
43
- drawnIndependently: true,
44
- allowedOutsideImage: true,
45
- hasBoundingBox: true
46
- }
6
+ 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; }
7
+ 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; }
8
+ const {
9
+ Point: TID300Point
10
+ } = utilities.TID300;
11
+ const ARROW_ANNOTATE = "ArrowAnnotate";
12
+ const CORNERSTONEFREETEXT = "CORNERSTONEFREETEXT";
13
+ class ArrowAnnotate {
14
+ static getMeasurementData(MeasurementGroup) {
15
+ const {
16
+ defaultState,
17
+ SCOORDGroup,
18
+ findingGroup
19
+ } = MeasurementReport.getSetupMeasurementData(MeasurementGroup);
20
+ const text = findingGroup.ConceptCodeSequence.CodeMeaning;
21
+ const {
22
+ GraphicData
23
+ } = SCOORDGroup;
24
+ const state = _objectSpread(_objectSpread({}, defaultState), {}, {
25
+ toolType: ArrowAnnotate.toolType,
26
+ active: false,
27
+ handles: {
28
+ start: {
29
+ x: GraphicData[0],
30
+ y: GraphicData[1],
31
+ highlight: true,
32
+ active: false
47
33
  },
48
- invalidated: true,
49
- text: text,
50
- visible: true
51
- });
52
- return state;
53
- }
54
- }, {
55
- key: "getTID300RepresentationArguments",
56
- value: function getTID300RepresentationArguments(tool) {
57
- var points = [tool.handles.start, tool.handles.end];
58
- var finding = tool.finding,
59
- findingSites = tool.findingSites;
60
- var TID300RepresentationArguments = {
61
- points: points,
62
- trackingIdentifierTextValue: "cornerstoneTools@^4.0.0:ArrowAnnotate",
63
- findingSites: findingSites || []
64
- };
34
+ // Use a generic offset if the stored data doesn't have the endpoint, otherwise
35
+ // use the actual endpoint.
36
+ end: {
37
+ x: GraphicData.length == 4 ? GraphicData[2] : GraphicData[0] + 20,
38
+ y: GraphicData.length == 4 ? GraphicData[3] : GraphicData[1] + 20,
39
+ highlight: true,
40
+ active: false
41
+ },
42
+ textBox: {
43
+ hasMoved: false,
44
+ movesIndependently: false,
45
+ drawnIndependently: true,
46
+ allowedOutsideImage: true,
47
+ hasBoundingBox: true
48
+ }
49
+ },
50
+ invalidated: true,
51
+ text,
52
+ visible: true
53
+ });
54
+ return state;
55
+ }
56
+ static getTID300RepresentationArguments(tool) {
57
+ const points = [tool.handles.start, tool.handles.end];
58
+ const {
59
+ findingSites
60
+ } = tool;
61
+ let {
62
+ finding
63
+ } = tool;
64
+ const TID300RepresentationArguments = {
65
+ points,
66
+ trackingIdentifierTextValue: "cornerstoneTools@^4.0.0:ArrowAnnotate",
67
+ findingSites: findingSites || []
68
+ };
65
69
 
66
- // If freetext finding isn't present, add it from the tool text.
67
- if (!finding || finding.CodeValue !== CORNERSTONEFREETEXT) {
68
- finding = {
69
- CodeValue: CORNERSTONEFREETEXT,
70
- CodingSchemeDesignator: "CST4",
71
- CodeMeaning: tool.text
72
- };
73
- }
74
- TID300RepresentationArguments.finding = finding;
75
- return TID300RepresentationArguments;
70
+ // If freetext finding isn't present, add it from the tool text.
71
+ if (!finding || finding.CodeValue !== CORNERSTONEFREETEXT) {
72
+ finding = {
73
+ CodeValue: CORNERSTONEFREETEXT,
74
+ CodingSchemeDesignator: "CST4",
75
+ CodeMeaning: tool.text
76
+ };
76
77
  }
77
- }]);
78
- }();
78
+ TID300RepresentationArguments.finding = finding;
79
+ return TID300RepresentationArguments;
80
+ }
81
+ }
79
82
  ArrowAnnotate.toolType = ARROW_ANNOTATE;
80
83
  ArrowAnnotate.utilityToolType = ARROW_ANNOTATE;
81
84
  ArrowAnnotate.TID300Representation = TID300Point;
82
- ArrowAnnotate.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
85
+ ArrowAnnotate.isValidCornerstoneTrackingIdentifier = TrackingIdentifier => {
83
86
  if (!TrackingIdentifier.includes(":")) {
84
87
  return false;
85
88
  }
86
- var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
87
- _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
88
- cornerstone4Tag = _TrackingIdentifier$s2[0],
89
- toolType = _TrackingIdentifier$s2[1];
89
+ const [cornerstone4Tag, toolType] = TrackingIdentifier.split(":");
90
90
  if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
91
91
  return false;
92
92
  }
@@ -1,165 +1,149 @@
1
- import { slicedToArray as _slicedToArray, createClass as _createClass, classCallCheck as _classCallCheck } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
1
  import { utilities } from 'dcmjs';
3
2
  import MeasurementReport from './MeasurementReport.js';
4
3
  import CORNERSTONE_4_TAG from './cornerstone4Tag.js';
5
4
  import { toArray } from '../helpers/toArray.js';
6
- import '../helpers/downloadDICOMData.js';
5
+ import 'buffer';
7
6
 
8
- var TID300Bidirectional = utilities.TID300.Bidirectional;
9
- var BIDIRECTIONAL = "Bidirectional";
10
- var LONG_AXIS = "Long Axis";
11
- var SHORT_AXIS = "Short Axis";
12
- var FINDING = "121071";
13
- var FINDING_SITE = "G-C0E3";
14
- var Bidirectional = /*#__PURE__*/function () {
15
- function Bidirectional() {
16
- _classCallCheck(this, Bidirectional);
17
- }
18
- return _createClass(Bidirectional, null, [{
19
- key: "getMeasurementData",
20
- value:
21
- // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.
22
- function getMeasurementData(MeasurementGroup) {
23
- var ContentSequence = MeasurementGroup.ContentSequence;
24
- var findingGroup = toArray(ContentSequence).find(function (group) {
25
- return group.ConceptNameCodeSequence.CodeValue === FINDING;
26
- });
27
- var findingSiteGroups = toArray(ContentSequence).filter(function (group) {
28
- return group.ConceptNameCodeSequence.CodeValue === FINDING_SITE;
29
- });
30
- var longAxisNUMGroup = toArray(ContentSequence).find(function (group) {
31
- return group.ConceptNameCodeSequence.CodeMeaning === LONG_AXIS;
32
- });
33
- var longAxisSCOORDGroup = toArray(longAxisNUMGroup.ContentSequence).find(function (group) {
34
- return group.ValueType === "SCOORD";
35
- });
36
- var shortAxisNUMGroup = toArray(ContentSequence).find(function (group) {
37
- return group.ConceptNameCodeSequence.CodeMeaning === SHORT_AXIS;
38
- });
39
- var shortAxisSCOORDGroup = toArray(shortAxisNUMGroup.ContentSequence).find(function (group) {
40
- return group.ValueType === "SCOORD";
41
- });
42
- var ReferencedSOPSequence = longAxisSCOORDGroup.ContentSequence.ReferencedSOPSequence;
43
- var ReferencedSOPInstanceUID = ReferencedSOPSequence.ReferencedSOPInstanceUID,
44
- ReferencedFrameNumber = ReferencedSOPSequence.ReferencedFrameNumber;
7
+ const {
8
+ Bidirectional: TID300Bidirectional
9
+ } = utilities.TID300;
10
+ const BIDIRECTIONAL = "Bidirectional";
11
+ const LONG_AXIS = "Long Axis";
12
+ const SHORT_AXIS = "Short Axis";
13
+ const FINDING = "121071";
14
+ const FINDING_SITE = "G-C0E3";
15
+ class Bidirectional {
16
+ // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.
17
+ static getMeasurementData(MeasurementGroup) {
18
+ const {
19
+ ContentSequence
20
+ } = MeasurementGroup;
21
+ const findingGroup = toArray(ContentSequence).find(group => group.ConceptNameCodeSequence.CodeValue === FINDING);
22
+ const findingSiteGroups = toArray(ContentSequence).filter(group => group.ConceptNameCodeSequence.CodeValue === FINDING_SITE);
23
+ const longAxisNUMGroup = toArray(ContentSequence).find(group => group.ConceptNameCodeSequence.CodeMeaning === LONG_AXIS);
24
+ const longAxisSCOORDGroup = toArray(longAxisNUMGroup.ContentSequence).find(group => group.ValueType === "SCOORD");
25
+ const shortAxisNUMGroup = toArray(ContentSequence).find(group => group.ConceptNameCodeSequence.CodeMeaning === SHORT_AXIS);
26
+ const shortAxisSCOORDGroup = toArray(shortAxisNUMGroup.ContentSequence).find(group => group.ValueType === "SCOORD");
27
+ const {
28
+ ReferencedSOPSequence
29
+ } = longAxisSCOORDGroup.ContentSequence;
30
+ const {
31
+ ReferencedSOPInstanceUID,
32
+ ReferencedFrameNumber
33
+ } = ReferencedSOPSequence;
45
34
 
46
- // Long axis
35
+ // Long axis
47
36
 
48
- var longestDiameter = String(longAxisNUMGroup.MeasuredValueSequence.NumericValue);
49
- var shortestDiameter = String(shortAxisNUMGroup.MeasuredValueSequence.NumericValue);
50
- var bottomRight = {
51
- x: Math.max(longAxisSCOORDGroup.GraphicData[0], longAxisSCOORDGroup.GraphicData[2], shortAxisSCOORDGroup.GraphicData[0], shortAxisSCOORDGroup.GraphicData[2]),
52
- y: Math.max(longAxisSCOORDGroup.GraphicData[1], longAxisSCOORDGroup.GraphicData[3], shortAxisSCOORDGroup.GraphicData[1], shortAxisSCOORDGroup.GraphicData[3])
53
- };
54
- var state = {
55
- sopInstanceUid: ReferencedSOPInstanceUID,
56
- frameIndex: ReferencedFrameNumber || 1,
57
- toolType: Bidirectional.toolType,
58
- active: false,
59
- handles: {
60
- start: {
61
- x: longAxisSCOORDGroup.GraphicData[0],
62
- y: longAxisSCOORDGroup.GraphicData[1],
63
- drawnIndependently: false,
64
- allowedOutsideImage: false,
65
- active: false,
66
- highlight: false,
67
- index: 0
68
- },
69
- end: {
70
- x: longAxisSCOORDGroup.GraphicData[2],
71
- y: longAxisSCOORDGroup.GraphicData[3],
72
- drawnIndependently: false,
73
- allowedOutsideImage: false,
74
- active: false,
75
- highlight: false,
76
- index: 1
77
- },
78
- perpendicularStart: {
79
- x: shortAxisSCOORDGroup.GraphicData[0],
80
- y: shortAxisSCOORDGroup.GraphicData[1],
81
- drawnIndependently: false,
82
- allowedOutsideImage: false,
83
- active: false,
84
- highlight: false,
85
- index: 2
86
- },
87
- perpendicularEnd: {
88
- x: shortAxisSCOORDGroup.GraphicData[2],
89
- y: shortAxisSCOORDGroup.GraphicData[3],
90
- drawnIndependently: false,
91
- allowedOutsideImage: false,
92
- active: false,
93
- highlight: false,
94
- index: 3
95
- },
96
- textBox: {
97
- highlight: false,
98
- hasMoved: true,
99
- active: false,
100
- movesIndependently: false,
101
- drawnIndependently: true,
102
- allowedOutsideImage: true,
103
- hasBoundingBox: true,
104
- x: bottomRight.x + 10,
105
- y: bottomRight.y + 10
106
- }
37
+ const longestDiameter = String(longAxisNUMGroup.MeasuredValueSequence.NumericValue);
38
+ const shortestDiameter = String(shortAxisNUMGroup.MeasuredValueSequence.NumericValue);
39
+ const bottomRight = {
40
+ x: Math.max(longAxisSCOORDGroup.GraphicData[0], longAxisSCOORDGroup.GraphicData[2], shortAxisSCOORDGroup.GraphicData[0], shortAxisSCOORDGroup.GraphicData[2]),
41
+ y: Math.max(longAxisSCOORDGroup.GraphicData[1], longAxisSCOORDGroup.GraphicData[3], shortAxisSCOORDGroup.GraphicData[1], shortAxisSCOORDGroup.GraphicData[3])
42
+ };
43
+ const state = {
44
+ sopInstanceUid: ReferencedSOPInstanceUID,
45
+ frameIndex: ReferencedFrameNumber || 1,
46
+ toolType: Bidirectional.toolType,
47
+ active: false,
48
+ handles: {
49
+ start: {
50
+ x: longAxisSCOORDGroup.GraphicData[0],
51
+ y: longAxisSCOORDGroup.GraphicData[1],
52
+ drawnIndependently: false,
53
+ allowedOutsideImage: false,
54
+ active: false,
55
+ highlight: false,
56
+ index: 0
57
+ },
58
+ end: {
59
+ x: longAxisSCOORDGroup.GraphicData[2],
60
+ y: longAxisSCOORDGroup.GraphicData[3],
61
+ drawnIndependently: false,
62
+ allowedOutsideImage: false,
63
+ active: false,
64
+ highlight: false,
65
+ index: 1
107
66
  },
108
- invalidated: false,
109
- isCreating: false,
110
- longestDiameter: longestDiameter,
111
- shortestDiameter: shortestDiameter,
112
- toolName: "Bidirectional",
113
- visible: true,
114
- finding: findingGroup ? findingGroup.ConceptCodeSequence : undefined,
115
- findingSites: findingSiteGroups.map(function (fsg) {
116
- return fsg.ConceptCodeSequence;
117
- })
118
- };
119
- return state;
120
- }
121
- }, {
122
- key: "getTID300RepresentationArguments",
123
- value: function getTID300RepresentationArguments(tool) {
124
- var _tool$handles = tool.handles,
125
- start = _tool$handles.start,
126
- end = _tool$handles.end,
127
- perpendicularStart = _tool$handles.perpendicularStart,
128
- perpendicularEnd = _tool$handles.perpendicularEnd;
129
- var shortestDiameter = tool.shortestDiameter,
130
- longestDiameter = tool.longestDiameter,
131
- finding = tool.finding,
132
- findingSites = tool.findingSites;
133
- var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:Bidirectional";
134
- return {
135
- longAxis: {
136
- point1: start,
137
- point2: end
67
+ perpendicularStart: {
68
+ x: shortAxisSCOORDGroup.GraphicData[0],
69
+ y: shortAxisSCOORDGroup.GraphicData[1],
70
+ drawnIndependently: false,
71
+ allowedOutsideImage: false,
72
+ active: false,
73
+ highlight: false,
74
+ index: 2
138
75
  },
139
- shortAxis: {
140
- point1: perpendicularStart,
141
- point2: perpendicularEnd
76
+ perpendicularEnd: {
77
+ x: shortAxisSCOORDGroup.GraphicData[2],
78
+ y: shortAxisSCOORDGroup.GraphicData[3],
79
+ drawnIndependently: false,
80
+ allowedOutsideImage: false,
81
+ active: false,
82
+ highlight: false,
83
+ index: 3
142
84
  },
143
- longAxisLength: longestDiameter,
144
- shortAxisLength: shortestDiameter,
145
- trackingIdentifierTextValue: trackingIdentifierTextValue,
146
- finding: finding,
147
- findingSites: findingSites || []
148
- };
149
- }
150
- }]);
151
- }();
85
+ textBox: {
86
+ highlight: false,
87
+ hasMoved: true,
88
+ active: false,
89
+ movesIndependently: false,
90
+ drawnIndependently: true,
91
+ allowedOutsideImage: true,
92
+ hasBoundingBox: true,
93
+ x: bottomRight.x + 10,
94
+ y: bottomRight.y + 10
95
+ }
96
+ },
97
+ invalidated: false,
98
+ isCreating: false,
99
+ longestDiameter,
100
+ shortestDiameter,
101
+ toolName: "Bidirectional",
102
+ visible: true,
103
+ finding: findingGroup ? findingGroup.ConceptCodeSequence : undefined,
104
+ findingSites: findingSiteGroups.map(fsg => fsg.ConceptCodeSequence)
105
+ };
106
+ return state;
107
+ }
108
+ static getTID300RepresentationArguments(tool) {
109
+ const {
110
+ start,
111
+ end,
112
+ perpendicularStart,
113
+ perpendicularEnd
114
+ } = tool.handles;
115
+ const {
116
+ shortestDiameter,
117
+ longestDiameter,
118
+ finding,
119
+ findingSites
120
+ } = tool;
121
+ const trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:Bidirectional";
122
+ return {
123
+ longAxis: {
124
+ point1: start,
125
+ point2: end
126
+ },
127
+ shortAxis: {
128
+ point1: perpendicularStart,
129
+ point2: perpendicularEnd
130
+ },
131
+ longAxisLength: longestDiameter,
132
+ shortAxisLength: shortestDiameter,
133
+ trackingIdentifierTextValue,
134
+ finding: finding,
135
+ findingSites: findingSites || []
136
+ };
137
+ }
138
+ }
152
139
  Bidirectional.toolType = BIDIRECTIONAL;
153
140
  Bidirectional.utilityToolType = BIDIRECTIONAL;
154
141
  Bidirectional.TID300Representation = TID300Bidirectional;
155
- Bidirectional.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
142
+ Bidirectional.isValidCornerstoneTrackingIdentifier = TrackingIdentifier => {
156
143
  if (!TrackingIdentifier.includes(":")) {
157
144
  return false;
158
145
  }
159
- var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
160
- _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
161
- cornerstone4Tag = _TrackingIdentifier$s2[0],
162
- toolType = _TrackingIdentifier$s2[1];
146
+ const [cornerstone4Tag, toolType] = TrackingIdentifier.split(":");
163
147
  if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
164
148
  return false;
165
149
  }