@cornerstonejs/adapters 5.0.0-beta.1 → 5.0.1

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 (89) hide show
  1. package/dist/esm/adapters/Cornerstone/Angle.js +23 -16
  2. package/dist/esm/adapters/Cornerstone/ArrowAnnotate.js +14 -19
  3. package/dist/esm/adapters/Cornerstone/Bidirectional.js +22 -27
  4. package/dist/esm/adapters/Cornerstone/CircleRoi.js +21 -27
  5. package/dist/esm/adapters/Cornerstone/CobbAngle.js +23 -16
  6. package/dist/esm/adapters/Cornerstone/EllipticalRoi.js +20 -26
  7. package/dist/esm/adapters/Cornerstone/FreehandRoi.js +22 -26
  8. package/dist/esm/adapters/Cornerstone/Length.js +19 -16
  9. package/dist/esm/adapters/Cornerstone/MeasurementReport.js +20 -40
  10. package/dist/esm/adapters/Cornerstone/ParametricMap.js +27 -38
  11. package/dist/esm/adapters/Cornerstone/RectangleRoi.js +27 -26
  12. package/dist/esm/adapters/Cornerstone/Segmentation_3X.js +19 -31
  13. package/dist/esm/adapters/Cornerstone/Segmentation_4X.js +69 -90
  14. package/dist/esm/adapters/Cornerstone/index.d.ts +11 -11
  15. package/dist/esm/adapters/Cornerstone3D/Angle.d.ts +1 -1
  16. package/dist/esm/adapters/Cornerstone3D/Angle.js +19 -26
  17. package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.d.ts +1 -1
  18. package/dist/esm/adapters/Cornerstone3D/ArrowAnnotate.js +24 -38
  19. package/dist/esm/adapters/Cornerstone3D/BaseAdapter3D.d.ts +1 -1
  20. package/dist/esm/adapters/Cornerstone3D/BaseAdapter3D.js +20 -31
  21. package/dist/esm/adapters/Cornerstone3D/Bidirectional.d.ts +1 -1
  22. package/dist/esm/adapters/Cornerstone3D/Bidirectional.js +27 -39
  23. package/dist/esm/adapters/Cornerstone3D/CircleROI.d.ts +1 -1
  24. package/dist/esm/adapters/Cornerstone3D/CircleROI.js +29 -37
  25. package/dist/esm/adapters/Cornerstone3D/CobbAngle.d.ts +1 -1
  26. package/dist/esm/adapters/Cornerstone3D/CobbAngle.js +27 -30
  27. package/dist/esm/adapters/Cornerstone3D/ControlPointPolyline.d.ts +5 -0
  28. package/dist/esm/adapters/Cornerstone3D/ControlPointPolyline.js +85 -0
  29. package/dist/esm/adapters/Cornerstone3D/EllipticalROI.d.ts +1 -1
  30. package/dist/esm/adapters/Cornerstone3D/EllipticalROI.js +27 -35
  31. package/dist/esm/adapters/Cornerstone3D/KeyImage.d.ts +1 -1
  32. package/dist/esm/adapters/Cornerstone3D/KeyImage.js +5 -11
  33. package/dist/esm/adapters/Cornerstone3D/LabelData.d.ts +3 -1
  34. package/dist/esm/adapters/Cornerstone3D/LabelData.js +41 -33
  35. package/dist/esm/adapters/Cornerstone3D/Length.d.ts +1 -1
  36. package/dist/esm/adapters/Cornerstone3D/Length.js +21 -29
  37. package/dist/esm/adapters/Cornerstone3D/MeasurementReport.d.ts +2 -1
  38. package/dist/esm/adapters/Cornerstone3D/MeasurementReport.js +108 -120
  39. package/dist/esm/adapters/Cornerstone3D/ParametricMap/generateToolState.js +2 -6
  40. package/dist/esm/adapters/Cornerstone3D/PlanarFreehandROI.d.ts +11 -1
  41. package/dist/esm/adapters/Cornerstone3D/PlanarFreehandROI.js +58 -44
  42. package/dist/esm/adapters/Cornerstone3D/Probe.d.ts +1 -1
  43. package/dist/esm/adapters/Cornerstone3D/Probe.js +21 -32
  44. package/dist/esm/adapters/Cornerstone3D/RTStruct/RTSS.js +14 -30
  45. package/dist/esm/adapters/Cornerstone3D/RTStruct/index.d.ts +2 -2
  46. package/dist/esm/adapters/Cornerstone3D/RTStruct/index.js +1 -3
  47. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedFrameOfReferenceSequence.js +1 -3
  48. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getReferencedSeriesSequence.js +7 -13
  49. package/dist/esm/adapters/Cornerstone3D/RTStruct/utilities/getStructureSetModule.js +1 -3
  50. package/dist/esm/adapters/Cornerstone3D/RectangleROI.js +30 -32
  51. package/dist/esm/adapters/Cornerstone3D/Segmentation/compactMergeSegData.d.ts +1 -1
  52. package/dist/esm/adapters/Cornerstone3D/Segmentation/compactMergeSegData.js +5 -9
  53. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateLabelMaps2DFrom3D.js +2 -4
  54. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateSegmentation.js +6 -16
  55. package/dist/esm/adapters/Cornerstone3D/Segmentation/generateToolState.js +3 -4
  56. package/dist/esm/adapters/Cornerstone3D/Segmentation/index.d.ts +4 -4
  57. package/dist/esm/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.d.ts +2 -2
  58. package/dist/esm/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.js +147 -179
  59. package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.d.ts +1 -1
  60. package/dist/esm/adapters/Cornerstone3D/UltrasoundDirectional.js +15 -26
  61. package/dist/esm/adapters/Cornerstone3D/constants/index.d.ts +10 -0
  62. package/dist/esm/adapters/Cornerstone3D/constants/index.js +12 -2
  63. package/dist/esm/adapters/Cornerstone3D/metricHandler.js +57 -24
  64. package/dist/esm/adapters/Cornerstone3D/unitMapper.d.ts +5 -0
  65. package/dist/esm/adapters/Cornerstone3D/unitMapper.js +16 -0
  66. package/dist/esm/adapters/VTKjs/Segmentation.js +2 -4
  67. package/dist/esm/adapters/VTKjs/index.d.ts +1 -1
  68. package/dist/esm/adapters/enums/index.d.ts +1 -1
  69. package/dist/esm/adapters/helpers/checkOrientation.js +5 -7
  70. package/dist/esm/adapters/helpers/downloadDICOMData.js +1 -3
  71. package/dist/esm/adapters/helpers/getDatasetsFromImages.js +3 -7
  72. package/dist/esm/adapters/helpers/index.d.ts +9 -9
  73. package/dist/esm/adapters/helpers/scoordToWorld.d.ts +1 -1
  74. package/dist/esm/adapters/helpers/scoordToWorld.js +5 -13
  75. package/dist/esm/adapters/helpers/toPoint3.d.ts +1 -1
  76. package/dist/esm/adapters/helpers/toPoint3.js +1 -3
  77. package/dist/esm/adapters/helpers/toScoordType.d.ts +1 -1
  78. package/dist/esm/adapters/helpers/toScoordType.js +3 -7
  79. package/dist/esm/adapters/index.d.ts +4 -4
  80. package/dist/esm/adapters/index.js +3 -2
  81. package/dist/esm/utilities/createInstance.js +9 -8
  82. package/dist/esm/utilities/referencedMetadataProvider.d.ts +3 -4
  83. package/dist/esm/utilities/referencedMetadataProvider.js +8 -14
  84. package/dist/esm/version.d.ts +1 -1
  85. package/package.json +13 -9
  86. package/dist/esm/node_modules/@babel/runtime/helpers/esm/defineProperty.js +0 -12
  87. package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +0 -14
  88. package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +0 -9
  89. package/dist/esm/node_modules/@babel/runtime/helpers/esm/typeof.js +0 -11
@@ -1,40 +1,47 @@
1
- import _defineProperty from '../../node_modules/@babel/runtime/helpers/esm/defineProperty.js';
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import MeasurementReport from './MeasurementReport.js';
3
- import { utilities } from 'dcmjs';
4
3
  import { vec3 } from 'gl-matrix';
5
4
  import BaseAdapter3D from './BaseAdapter3D.js';
6
- import { toScoords } from '../helpers/toScoordType.js';
7
- import '@cornerstonejs/core';
8
5
  import { extractAllNUMGroups, restoreAdditionalMetrics } from './metricHandler.js';
6
+ import { toArray } from '../helpers/toArray.js';
7
+ import '../helpers/downloadDICOMData.js';
8
+ import { toScoords } from '../helpers/toScoordType.js';
9
+ import '../helpers/scoordToWorld.js';
10
+ import ControlPointPolyline from './ControlPointPolyline.js';
11
+ import { SPLINE_TYPE_CODE } from './constants/index.js';
9
12
 
10
13
  var _PlanarFreehandROI;
11
14
  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; }
12
15
  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; }
13
- const {
14
- Polyline: TID300Polyline
15
- } = utilities.TID300;
16
16
  class PlanarFreehandROI extends BaseAdapter3D {
17
17
  static getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata) {
18
- const {
19
- state,
20
- NUMGroup,
21
- worldCoords,
22
- referencedImageId,
23
- ReferencedFrameNumber
24
- } = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType);
18
+ var _state$annotation$dat, _state$annotation$dat2, _numSeq$find;
19
+ const _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType),
20
+ state = _MeasurementReport$ge.state,
21
+ NUMGroup = _MeasurementReport$ge.NUMGroup,
22
+ worldCoords = _MeasurementReport$ge.worldCoords,
23
+ referencedImageId = _MeasurementReport$ge.referencedImageId,
24
+ ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
25
25
  const distanceBetweenFirstAndLastPoint = vec3.distance(worldCoords[worldCoords.length - 1], worldCoords[0]);
26
26
  let isOpenContour = true;
27
27
  if (distanceBetweenFirstAndLastPoint < this.closedContourThreshold) {
28
28
  worldCoords.pop();
29
29
  isOpenContour = false;
30
30
  }
31
- const points = [];
32
- if (isOpenContour) {
33
- points.push(worldCoords[0], worldCoords[worldCoords.length - 1]);
31
+ let points = (_state$annotation$dat = (_state$annotation$dat2 = state.annotation.data.handles) === null || _state$annotation$dat2 === void 0 ? void 0 : _state$annotation$dat2.points) !== null && _state$annotation$dat !== void 0 ? _state$annotation$dat : [];
32
+ if (isOpenContour && points.length === 0) {
33
+ points = [worldCoords[0], worldCoords[worldCoords.length - 1]];
34
34
  }
35
35
  const referencedSOPInstanceUID = state.sopInstanceUid;
36
36
  const allNUMGroups = extractAllNUMGroups(MeasurementGroup, referencedSOPInstanceUID);
37
37
  const measurementNUMGroups = allNUMGroups[referencedSOPInstanceUID] || {};
38
+ const SPLINE_TYPE = {
39
+ CodingSchemeDesignator: SPLINE_TYPE_CODE.schemeDesignator,
40
+ CodeValue: SPLINE_TYPE_CODE.value
41
+ };
42
+ const numSeq = NUMGroup ? toArray(NUMGroup.ContentSequence) : [];
43
+ const mgContentSeq = toArray(MeasurementGroup.ContentSequence);
44
+ const splineTypeItem = (_numSeq$find = numSeq.find(item => MeasurementReport.codeValueMatch(item, SPLINE_TYPE))) !== null && _numSeq$find !== void 0 ? _numSeq$find : mgContentSeq.find(item => MeasurementReport.codeValueMatch(item, SPLINE_TYPE));
38
45
  state.annotation.data = _objectSpread(_objectSpread({}, state.annotation.data), {}, {
39
46
  contour: {
40
47
  polyline: worldCoords,
@@ -44,32 +51,33 @@ class PlanarFreehandROI extends BaseAdapter3D {
44
51
  points
45
52
  }),
46
53
  frameNumber: ReferencedFrameNumber
54
+ }, splineTypeItem && {
55
+ spline: {
56
+ type: splineTypeItem.TextValue
57
+ }
47
58
  });
48
59
  if (referencedImageId) {
49
60
  state.annotation.data.cachedStats = {
50
- ["imageId:".concat(referencedImageId)]: _objectSpread({
51
- area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : null
52
- }, restoreAdditionalMetrics(measurementNUMGroups))
61
+ ["imageId:".concat(referencedImageId)]: _objectSpread(_objectSpread({}, !isOpenContour && NUMGroup ? {
62
+ area: NUMGroup.MeasuredValueSequence.NumericValue
63
+ } : {}), restoreAdditionalMetrics(measurementNUMGroups))
53
64
  };
54
65
  }
55
66
  return state;
56
67
  }
57
68
  static getTID300RepresentationArguments(tool) {
69
+ var _handles$points, _data$spline;
58
70
  let is3DMeasurement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
59
- const {
60
- data,
61
- finding,
62
- findingSites,
63
- metadata
64
- } = tool;
65
- const {
66
- polyline,
67
- closed
68
- } = data.contour;
71
+ const data = tool.data,
72
+ finding = tool.finding,
73
+ findingSites = tool.findingSites,
74
+ metadata = tool.metadata;
75
+ const handles = data.handles;
76
+ const _data$contour = data.contour,
77
+ polyline = _data$contour.polyline,
78
+ closed = _data$contour.closed;
69
79
  const isOpenContour = closed !== true;
70
- const {
71
- referencedImageId
72
- } = metadata;
80
+ const referencedImageId = metadata.referencedImageId;
73
81
  const scoordProps = {
74
82
  is3DMeasurement,
75
83
  referencedImageId
@@ -79,18 +87,19 @@ class PlanarFreehandROI extends BaseAdapter3D {
79
87
  const firstPoint = points[0];
80
88
  points.push(firstPoint);
81
89
  }
82
- const {
83
- area,
84
- areaUnit,
85
- modalityUnit,
86
- perimeter,
87
- mean,
88
- max,
89
- stdDev,
90
- length
91
- } = data.cachedStats["imageId:".concat(referencedImageId)] || {};
90
+ const controlPoints = (handles === null || handles === void 0 || (_handles$points = handles.points) === null || _handles$points === void 0 ? void 0 : _handles$points.length) && toScoords(scoordProps, handles.points);
91
+ const _ref = data.cachedStats["imageId:".concat(referencedImageId)] || {},
92
+ area = _ref.area,
93
+ areaUnit = _ref.areaUnit,
94
+ modalityUnit = _ref.modalityUnit,
95
+ perimeter = _ref.perimeter,
96
+ mean = _ref.mean,
97
+ max = _ref.max,
98
+ stdDev = _ref.stdDev,
99
+ length = _ref.length;
92
100
  return {
93
101
  points,
102
+ controlPoints,
94
103
  area,
95
104
  areaUnit,
96
105
  perimeter: perimeter !== null && perimeter !== void 0 ? perimeter : length,
@@ -98,6 +107,7 @@ class PlanarFreehandROI extends BaseAdapter3D {
98
107
  mean,
99
108
  max,
100
109
  stdDev,
110
+ splineType: (_data$spline = data.spline) === null || _data$spline === void 0 ? void 0 : _data$spline.type,
101
111
  trackingIdentifierTextValue: this.trackingIdentifierTextValue,
102
112
  finding,
103
113
  findingSites: findingSites || [],
@@ -108,6 +118,10 @@ class PlanarFreehandROI extends BaseAdapter3D {
108
118
  }
109
119
  _PlanarFreehandROI = PlanarFreehandROI;
110
120
  _PlanarFreehandROI.closedContourThreshold = 1e-5;
111
- _PlanarFreehandROI.init("PlanarFreehandROI", TID300Polyline);
121
+ (() => {
122
+ _PlanarFreehandROI.init('PlanarFreehandROI', ControlPointPolyline);
123
+ _PlanarFreehandROI.registerSubType(_PlanarFreehandROI, 'LivewireContour');
124
+ _PlanarFreehandROI.registerSubType(_PlanarFreehandROI, 'SplineROI');
125
+ })();
112
126
 
113
127
  export { PlanarFreehandROI as default };
@@ -1,4 +1,4 @@
1
- import BaseAdapter3D from "./BaseAdapter3D";
1
+ import BaseAdapter3D from './BaseAdapter3D';
2
2
  declare class Probe extends BaseAdapter3D {
3
3
  static isValidMeasurement(measurement: any): boolean;
4
4
  static getMeasurementData(MeasurementGroup: any, sopInstanceUIDToImageIdMap: any, metadata: any, _trackingIdentifier: any): {
@@ -1,30 +1,28 @@
1
- import _defineProperty from '../../node_modules/@babel/runtime/helpers/esm/defineProperty.js';
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 { toScoords } from '../helpers/toScoordType.js';
6
- import '@cornerstonejs/core';
7
+ import '../helpers/scoordToWorld.js';
7
8
 
8
9
  var _Probe;
9
10
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
10
11
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
11
- const {
12
- Point: TID300Point
13
- } = utilities.TID300;
12
+ const TID300Point = utilities.TID300.Point;
14
13
  class Probe extends BaseAdapter3D {
15
14
  static isValidMeasurement(measurement) {
16
15
  const graphicItem = this.getGraphicItem(measurement);
17
- return this.getGraphicType(graphicItem) === "POINT" && this.getPointsCount(graphicItem) <= 2;
16
+ return this.getGraphicType(graphicItem) === 'POINT' && this.getPointsCount(graphicItem) <= 2;
18
17
  }
19
18
  static getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, _trackingIdentifier) {
20
19
  var _NUMGroup$MeasuredVal, _NUMGroup$MeasuredVal2;
21
- const {
22
- state,
23
- NUMGroup,
24
- worldCoords,
25
- referencedImageId,
26
- ReferencedFrameNumber
27
- } = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType);
20
+ const _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType),
21
+ state = _MeasurementReport$ge.state,
22
+ NUMGroup = _MeasurementReport$ge.NUMGroup,
23
+ worldCoords = _MeasurementReport$ge.worldCoords,
24
+ referencedImageId = _MeasurementReport$ge.referencedImageId,
25
+ ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
28
26
  const cachedStats = referencedImageId ? {
29
27
  ["imageId:".concat(referencedImageId)]: {
30
28
  value: (_NUMGroup$MeasuredVal = NUMGroup === null || NUMGroup === void 0 || (_NUMGroup$MeasuredVal2 = NUMGroup.MeasuredValueSequence) === null || _NUMGroup$MeasuredVal2 === void 0 ? void 0 : _NUMGroup$MeasuredVal2.NumericValue) !== null && _NUMGroup$MeasuredVal !== void 0 ? _NUMGroup$MeasuredVal : null
@@ -42,26 +40,17 @@ class Probe extends BaseAdapter3D {
42
40
  }
43
41
  static getTID300RepresentationArguments(tool) {
44
42
  let is3DMeasurement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
45
- const {
46
- data,
47
- metadata
48
- } = tool;
49
- const {
50
- finding,
51
- findingSites
52
- } = tool;
53
- const {
54
- referencedImageId
55
- } = metadata;
43
+ const data = tool.data,
44
+ metadata = tool.metadata;
45
+ const finding = tool.finding,
46
+ findingSites = tool.findingSites;
47
+ const referencedImageId = metadata.referencedImageId;
56
48
  const scoordProps = {
57
49
  is3DMeasurement,
58
50
  referencedImageId
59
51
  };
60
- const {
61
- handles: {
62
- points = []
63
- }
64
- } = data;
52
+ const _data$handles$points = data.handles.points,
53
+ points = _data$handles$points === void 0 ? [] : _data$handles$points;
65
54
  const pointsImage = toScoords(scoordProps, points);
66
55
  return {
67
56
  points: pointsImage,
@@ -75,10 +64,10 @@ class Probe extends BaseAdapter3D {
75
64
  }
76
65
  _Probe = Probe;
77
66
  (() => {
78
- _Probe.init("Probe", TID300Point);
67
+ _Probe.init('Probe', TID300Point);
79
68
  _Probe.registerLegacy();
80
- _Probe.registerType("DCM:111030", "POINT", 1);
81
- _Probe.registerType("DCM:111030", "POINT", 2);
69
+ _Probe.registerType('DCM:111030', 'POINT', 1);
70
+ _Probe.registerType('DCM:111030', 'POINT', 2);
82
71
  })();
83
72
 
84
73
  export { Probe as default };
@@ -1,5 +1,5 @@
1
- import _defineProperty from '../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js';
2
- import { metaData, Enums } from '@cornerstonejs/core';
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
+ import { Enums, metaData } from '@cornerstonejs/core';
3
3
  import { utilities, annotation } from '@cornerstonejs/tools';
4
4
  import getReferencedFrameOfReferenceSequence from './utilities/getReferencedFrameOfReferenceSequence.js';
5
5
  import getReferencedSeriesSequence from './utilities/getReferencedSeriesSequence.js';
@@ -10,13 +10,10 @@ import { createInstance } from '../../../utilities/createInstance.js';
10
10
 
11
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; }
12
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; }
13
- const {
14
- generateContourSetsFromLabelmap,
15
- AnnotationToPointData
16
- } = utilities.contours;
17
- const {
18
- MetadataModules
19
- } = Enums;
13
+ const _utilities$contours = utilities.contours,
14
+ generateContourSetsFromLabelmap = _utilities$contours.generateContourSetsFromLabelmap,
15
+ AnnotationToPointData = _utilities$contours.AnnotationToPointData;
16
+ const MetadataModules = Enums.MetadataModules;
20
17
  function generateRTSSFromSegmentations(segmentation, metadataProvider, _DicomMetadataStore) {
21
18
  return generateRTSSFromLabelmap(segmentation, {
22
19
  metadataProvider,
@@ -25,9 +22,8 @@ function generateRTSSFromSegmentations(segmentation, metadataProvider, _DicomMet
25
22
  }
26
23
  async function generateRTSSFromLabelmap(segmentations, options) {
27
24
  var _dataset$ReferencedFr;
28
- const {
29
- metadataProvider = metaData
30
- } = options;
25
+ const _options$metadataProv = options.metadataProvider,
26
+ metadataProvider = _options$metadataProv === void 0 ? metaData : _options$metadataProv;
31
27
  const roiContours = [];
32
28
  const contourSets = await generateContourSetsFromLabelmap({
33
29
  segmentations
@@ -37,9 +33,7 @@ async function generateRTSSFromLabelmap(segmentations, options) {
37
33
  const contourSequence = [];
38
34
  contourSet.sliceContours.forEach(sliceContour => {
39
35
  const ContourImageSequence = metadataProvider.get('ImageSopInstanceReference', sliceContour.referencedImageId);
40
- const {
41
- points: polyDataPoints
42
- } = sliceContour.polyData;
36
+ const polyDataPoints = sliceContour.polyData.points;
43
37
  sliceContour.contours.forEach((contour, index) => {
44
38
  const ContourGeometricType = contour.type;
45
39
  const NumberOfContourPoints = contour.contourPoints.length;
@@ -92,19 +86,13 @@ function generateRTSSFromAnnotations(segmentations, annotations, options) {
92
86
  const dataset = _initializeDataset(segmentations, annotations[0].metadata, options);
93
87
  const segmentsContour = new Map();
94
88
  annotations.forEach((annotation, index) => {
95
- const {
96
- data: {
97
- segmentation
98
- }
99
- } = annotation;
89
+ const segmentation = annotation.data.segmentation;
100
90
  if (!segmentation) {
101
91
  console.warn('Annotation is not a segmentation:', annotation);
102
92
  return;
103
93
  }
104
- const {
105
- segmentationId,
106
- segmentIndex
107
- } = segmentation;
94
+ const segmentationId = segmentation.segmentationId,
95
+ segmentIndex = segmentation.segmentIndex;
108
96
  const key = "".concat(segmentationId, ":").concat(segmentIndex);
109
97
  let segmentAnnotation = segmentsContour.get(key);
110
98
  if (!segmentAnnotation) {
@@ -136,9 +124,7 @@ function generateRTSSFromAnnotations(segmentations, annotations, options) {
136
124
  return dataset;
137
125
  }
138
126
  function _initializeDataset(segmentation, imgMetadata, options) {
139
- const {
140
- referencedImageId: studyExemplarImageId
141
- } = imgMetadata;
127
+ const studyExemplarImageId = imgMetadata.referencedImageId;
142
128
  return createInstance(MetadataModules.RTSS_INSTANCE_DATA, studyExemplarImageId, {
143
129
  StructureSetLabel: segmentation.label,
144
130
  StructureSetName: segmentation.label,
@@ -147,9 +133,7 @@ function _initializeDataset(segmentation, imgMetadata, options) {
147
133
  }, options);
148
134
  }
149
135
  function generateRTSSFromContour(segmentations, options) {
150
- const {
151
- annotationUIDsMap
152
- } = segmentations.representationData.Contour;
136
+ const annotationUIDsMap = segmentations.representationData.Contour.annotationUIDsMap;
153
137
  const annotations = [];
154
138
  for (const annotationSet of annotationUIDsMap.values()) {
155
139
  for (const annotationUID of annotationSet.values()) {
@@ -1,4 +1,4 @@
1
- import { utilities } from "@cornerstonejs/tools";
2
- export * from "./RTSS";
1
+ import { utilities } from '@cornerstonejs/tools';
2
+ export * from './RTSS';
3
3
  declare const generateContourSetsFromLabelmap: typeof utilities.contours.generateContourSetsFromLabelmap;
4
4
  export { generateContourSetsFromLabelmap };
@@ -1,8 +1,6 @@
1
1
  import { utilities } from '@cornerstonejs/tools';
2
2
  export { generateRTSSFromAnnotations, generateRTSSFromContour, generateRTSSFromLabelmap, generateRTSSFromRepresentation, generateRTSSFromSegmentations } from './RTSS.js';
3
3
 
4
- const {
5
- generateContourSetsFromLabelmap
6
- } = utilities.contours;
4
+ const generateContourSetsFromLabelmap = utilities.contours.generateContourSetsFromLabelmap;
7
5
 
8
6
  export { generateContourSetsFromLabelmap };
@@ -1,7 +1,5 @@
1
1
  function getReferencedFrameOfReferenceSequence(referencedFrameOfReferenceSequence, metadata, _options) {
2
- const {
3
- FrameOfReferenceUID
4
- } = metadata;
2
+ const FrameOfReferenceUID = metadata.FrameOfReferenceUID;
5
3
  referencedFrameOfReferenceSequence || (referencedFrameOfReferenceSequence = []);
6
4
  let referencedItem = referencedFrameOfReferenceSequence.find(it => it.FrameOfReferenceUID === FrameOfReferenceUID);
7
5
  if (!referencedItem) {
@@ -1,22 +1,16 @@
1
- import { metaData, Enums } from '@cornerstonejs/core';
1
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
2
+ import { Enums, metaData } from '@cornerstonejs/core';
2
3
 
3
- const {
4
- MetadataModules
5
- } = Enums;
4
+ const MetadataModules = Enums.MetadataModules;
6
5
  function getReferencedSeriesSequence(referencedSeriesSequence, metadata, options) {
7
6
  const metadataProvider = (options === null || options === void 0 ? void 0 : options.metadataProvider) || metaData;
8
- const {
9
- referencedImageId: imageId
10
- } = metadata;
7
+ const imageId = metadata.referencedImageId;
11
8
  const newReferenceSeq = metadataProvider.get(MetadataModules.REFERENCED_SERIES_REFERENCE, imageId);
12
9
  referencedSeriesSequence || (referencedSeriesSequence = []);
13
10
  if (newReferenceSeq) {
14
- const {
15
- ReferencedSeriesInstanceUID: newSeriesUid,
16
- ReferencedInstanceSequence: [{
17
- ReferencedSOPInstanceUID: newSopUID
18
- }]
19
- } = newReferenceSeq;
11
+ const newSeriesUid = newReferenceSeq.ReferencedSeriesInstanceUID,
12
+ _newReferenceSeq$Refe = _slicedToArray(newReferenceSeq.ReferencedInstanceSequence, 1),
13
+ newSopUID = _newReferenceSeq$Refe[0].ReferencedSOPInstanceUID;
20
14
  const existingSeries = referencedSeriesSequence.find(it => it.ReferencedSeriesInstanceUID === newSeriesUid);
21
15
  if (!existingSeries) {
22
16
  referencedSeriesSequence.push(newReferenceSeq);
@@ -1,7 +1,5 @@
1
1
  function getStructureSetModule(contour, segment) {
2
- const {
3
- FrameOfReferenceUID
4
- } = contour.metadata;
2
+ const FrameOfReferenceUID = contour.metadata.FrameOfReferenceUID;
5
3
  return {
6
4
  ROINumber: segment.segmentIndex,
7
5
  ROIName: segment.label,
@@ -1,17 +1,17 @@
1
- import _defineProperty from '../../node_modules/@babel/runtime/helpers/esm/defineProperty.js';
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import { utilities } from 'dcmjs';
3
+ import '../helpers/downloadDICOMData.js';
3
4
  import { toScoords } from '../helpers/toScoordType.js';
4
- import '@cornerstonejs/core';
5
+ import '../helpers/scoordToWorld.js';
5
6
  import MeasurementReport from './MeasurementReport.js';
6
7
  import BaseAdapter3D from './BaseAdapter3D.js';
7
8
  import { extractAllNUMGroups, restoreAdditionalMetrics } from './metricHandler.js';
9
+ import { mapUnitFromUCUM } from './unitMapper.js';
8
10
 
9
11
  var _RectangleROI;
10
12
  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
13
  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
- Polyline: TID300Polyline
14
- } = utilities.TID300;
14
+ const TID300Polyline = utilities.TID300.Polyline;
15
15
  class RectangleROI extends BaseAdapter3D {
16
16
  static isValidMeasurement(measurement) {
17
17
  const graphicItem = this.getGraphicItem(measurement);
@@ -20,22 +20,25 @@ class RectangleROI extends BaseAdapter3D {
20
20
  }
21
21
  static getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata) {
22
22
  var _areaGroup$MeasuredVa, _areaGroup$MeasuredVa2;
23
- const {
24
- state,
25
- worldCoords,
26
- referencedImageId,
27
- ReferencedFrameNumber
28
- } = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType);
23
+ const _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType),
24
+ state = _MeasurementReport$ge.state,
25
+ worldCoords = _MeasurementReport$ge.worldCoords,
26
+ referencedImageId = _MeasurementReport$ge.referencedImageId,
27
+ ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
29
28
  const points = worldCoords.length === 5 ? worldCoords.slice(0, 4) : worldCoords;
30
29
  const areaGroup = MeasurementGroup.ContentSequence.find(g => g.ValueType === 'NUM' && g.ConceptNameCodeSequence.CodeMeaning === 'Area');
31
30
  const referencedSOPInstanceUID = state.sopInstanceUid;
32
31
  const allNUMGroups = extractAllNUMGroups(MeasurementGroup, referencedSOPInstanceUID);
33
32
  const measurementNUMGroups = allNUMGroups[referencedSOPInstanceUID] || {};
33
+ const restoredMetrics = restoreAdditionalMetrics(measurementNUMGroups);
34
+ const rawAreaUnit = areaGroup === null || areaGroup === void 0 || (_areaGroup$MeasuredVa = areaGroup.MeasuredValueSequence) === null || _areaGroup$MeasuredVa === void 0 || (_areaGroup$MeasuredVa = _areaGroup$MeasuredVa[0]) === null || _areaGroup$MeasuredVa === void 0 ? void 0 : _areaGroup$MeasuredVa.MeasurementUnitsCodeSequence;
35
+ const areaUnitFromSR = rawAreaUnit === null || rawAreaUnit === void 0 ? void 0 : rawAreaUnit.CodeValue;
36
+ const mappedAreaUnit = areaUnitFromSR ? mapUnitFromUCUM(areaUnitFromSR) : restoredMetrics.areaUnit;
34
37
  const cachedStats = referencedImageId ? {
35
38
  ["imageId:".concat(referencedImageId)]: _objectSpread({
36
- area: (areaGroup === null || areaGroup === void 0 || (_areaGroup$MeasuredVa = areaGroup.MeasuredValueSequence) === null || _areaGroup$MeasuredVa === void 0 || (_areaGroup$MeasuredVa = _areaGroup$MeasuredVa[0]) === null || _areaGroup$MeasuredVa === void 0 ? void 0 : _areaGroup$MeasuredVa.NumericValue) || 0,
37
- areaUnit: areaGroup === null || areaGroup === void 0 || (_areaGroup$MeasuredVa2 = areaGroup.MeasuredValueSequence) === null || _areaGroup$MeasuredVa2 === void 0 || (_areaGroup$MeasuredVa2 = _areaGroup$MeasuredVa2[0]) === null || _areaGroup$MeasuredVa2 === void 0 || (_areaGroup$MeasuredVa2 = _areaGroup$MeasuredVa2.MeasurementUnitsCodeSequence) === null || _areaGroup$MeasuredVa2 === void 0 ? void 0 : _areaGroup$MeasuredVa2.CodeValue
38
- }, restoreAdditionalMetrics(measurementNUMGroups))
39
+ area: (areaGroup === null || areaGroup === void 0 || (_areaGroup$MeasuredVa2 = areaGroup.MeasuredValueSequence) === null || _areaGroup$MeasuredVa2 === void 0 || (_areaGroup$MeasuredVa2 = _areaGroup$MeasuredVa2[0]) === null || _areaGroup$MeasuredVa2 === void 0 ? void 0 : _areaGroup$MeasuredVa2.NumericValue) || 0,
40
+ areaUnit: mappedAreaUnit
41
+ }, restoredMetrics)
39
42
  } : {};
40
43
  const handlesPoints = [points[0], points[1], points[3], points[2]];
41
44
  state.annotation.data = _objectSpread(_objectSpread({}, state.annotation.data), {}, {
@@ -49,29 +52,24 @@ class RectangleROI extends BaseAdapter3D {
49
52
  }
50
53
  static getTID300RepresentationArguments(tool) {
51
54
  let is3DMeasurement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
52
- const {
53
- data,
54
- finding,
55
- findingSites,
56
- metadata
57
- } = tool;
58
- const {
59
- referencedImageId
60
- } = metadata;
55
+ const data = tool.data,
56
+ finding = tool.finding,
57
+ findingSites = tool.findingSites,
58
+ metadata = tool.metadata;
59
+ const referencedImageId = metadata.referencedImageId;
61
60
  const scoordProps = {
62
61
  is3DMeasurement,
63
62
  referencedImageId
64
63
  };
65
64
  const corners = toScoords(scoordProps, data.handles.points);
66
- const {
67
- area,
68
- perimeter,
69
- max,
70
- mean,
71
- stdDev,
72
- areaUnit,
73
- modalityUnit
74
- } = data.cachedStats["imageId:".concat(referencedImageId)] || {};
65
+ const _ref = data.cachedStats["imageId:".concat(referencedImageId)] || {},
66
+ area = _ref.area,
67
+ perimeter = _ref.perimeter,
68
+ max = _ref.max,
69
+ mean = _ref.mean,
70
+ stdDev = _ref.stdDev,
71
+ areaUnit = _ref.areaUnit,
72
+ modalityUnit = _ref.modalityUnit;
75
73
  return {
76
74
  points: [corners[0], corners[1], corners[3], corners[2], corners[0]],
77
75
  area,
@@ -1,4 +1,4 @@
1
- export declare const compactMergeSegmentDataWithoutInformationLoss: ({ arrayOfSegmentData, newSegmentData }: {
1
+ export declare const compactMergeSegmentDataWithoutInformationLoss: ({ arrayOfSegmentData, newSegmentData, }: {
2
2
  arrayOfSegmentData: any;
3
3
  newSegmentData: any;
4
4
  }) => void;
@@ -1,9 +1,7 @@
1
1
  const checkHasOverlapping = _ref => {
2
- let {
3
- largerArray,
4
- currentTestedArray,
5
- newArray
6
- } = _ref;
2
+ let largerArray = _ref.largerArray,
3
+ currentTestedArray = _ref.currentTestedArray,
4
+ newArray = _ref.newArray;
7
5
  return largerArray.some((_, currentImageIndex) => {
8
6
  const originalImagePixelData = currentTestedArray[currentImageIndex];
9
7
  const newImagePixelData = newArray[currentImageIndex];
@@ -17,10 +15,8 @@ const checkHasOverlapping = _ref => {
17
15
  });
18
16
  };
19
17
  const compactMergeSegmentDataWithoutInformationLoss = _ref2 => {
20
- let {
21
- arrayOfSegmentData,
22
- newSegmentData
23
- } = _ref2;
18
+ let arrayOfSegmentData = _ref2.arrayOfSegmentData,
19
+ newSegmentData = _ref2.newSegmentData;
24
20
  if (arrayOfSegmentData.length === 0) {
25
21
  arrayOfSegmentData.push(newSegmentData);
26
22
  return;
@@ -1,8 +1,6 @@
1
1
  function generateLabelMaps2DFrom3D(labelmap3D) {
2
- const {
3
- scalarData,
4
- dimensions
5
- } = labelmap3D;
2
+ const scalarData = labelmap3D.scalarData,
3
+ dimensions = labelmap3D.dimensions;
6
4
  const labelmaps2D = [];
7
5
  const segmentsOnLabelmap3D = new Set();
8
6
  for (let z = 0; z < dimensions[2]; z++) {
@@ -1,19 +1,13 @@
1
- import _defineProperty from '../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js';
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import { normalizers, derivations } from 'dcmjs';
3
3
  import { Enums } from '@cornerstonejs/core';
4
4
  import { fillSegmentation } from '../../Cornerstone/Segmentation_4X.js';
5
5
 
6
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
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
- MetadataModules
10
- } = Enums;
11
- const {
12
- SEGImageNormalizer
13
- } = normalizers;
14
- const {
15
- Segmentation: SegmentationDerivation
16
- } = derivations;
8
+ const MetadataModules = Enums.MetadataModules;
9
+ const SEGImageNormalizer = normalizers.SEGImageNormalizer;
10
+ const SegmentationDerivation = derivations.Segmentation;
17
11
  function generateSegmentation(images, labelmaps, metadata) {
18
12
  let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
19
13
  const segmentation = _createMultiframeSegmentationFromReferencedImages(images, metadata, options);
@@ -29,9 +23,7 @@ function _createMultiframeSegmentationFromReferencedImages(images, metadata, opt
29
23
  const studyImageId = (options === null || options === void 0 ? void 0 : options.predecessorImageId) || images[0].imageId;
30
24
  const studyData = metadata.get(MetadataModules.STUDY_DATA, studyImageId);
31
25
  const datasets = images.map(image => {
32
- const {
33
- imageId
34
- } = image;
26
+ const imageId = image.imageId;
35
27
  const seriesData = metadata.get(MetadataModules.SERIES_DATA, imageId);
36
28
  const imageData = metadata.get(MetadataModules.IMAGE_DATA, imageId);
37
29
  return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, studyData), seriesData), imageData), {}, {
@@ -49,9 +41,7 @@ function _createMultiframeSegmentationFromReferencedImages(images, metadata, opt
49
41
  }
50
42
  const normalizer = new SEGImageNormalizer(datasets);
51
43
  normalizer.normalize();
52
- const {
53
- dataset: multiframe
54
- } = normalizer;
44
+ const multiframe = normalizer.dataset;
55
45
  if (!multiframe) {
56
46
  throw new Error('Failed to normalize the multiframe dataset, the data is not multi-frame.');
57
47
  }
@@ -8,10 +8,9 @@ function generateToolState(imageIds, arrayBuffer, metadataProvider) {
8
8
  return generateToolState$1(imageIds, arrayBuffer, metadataProvider, skipOverlapping, tolerance, cs3dVersion);
9
9
  }
10
10
  function createFromDICOMSegBuffer(referencedImageIds, arrayBuffer, _ref) {
11
- let {
12
- metadataProvider,
13
- tolerance = 1e-3
14
- } = _ref;
11
+ let metadataProvider = _ref.metadataProvider,
12
+ _ref$tolerance = _ref.tolerance,
13
+ tolerance = _ref$tolerance === void 0 ? 1e-3 : _ref$tolerance;
15
14
  return createLabelmapsFromBufferInternal(referencedImageIds, arrayBuffer, metadataProvider, {
16
15
  tolerance
17
16
  });
@@ -1,4 +1,4 @@
1
- import { generateSegmentation } from "./generateSegmentation";
2
- import { generateLabelMaps2DFrom3D } from "./generateLabelMaps2DFrom3D";
3
- import { generateToolState, createFromDICOMSegBuffer } from "./generateToolState";
4
- export { generateLabelMaps2DFrom3D, generateSegmentation, generateToolState, createFromDICOMSegBuffer };
1
+ import { generateSegmentation } from './generateSegmentation';
2
+ import { generateLabelMaps2DFrom3D } from './generateLabelMaps2DFrom3D';
3
+ import { generateToolState, createFromDICOMSegBuffer } from './generateToolState';
4
+ export { generateLabelMaps2DFrom3D, generateSegmentation, generateToolState, createFromDICOMSegBuffer, };