@cornerstonejs/adapters 5.0.0-beta.1 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,17 +1,13 @@
1
1
  import { COMMENT_CODE, TEXT_ANNOTATION_POSITION } from './constants/index.js';
2
- import dcmjs from 'dcmjs';
2
+ import '../helpers/downloadDICOMData.js';
3
3
  import { toScoord } from '../helpers/toScoordType.js';
4
- import '@cornerstonejs/core';
4
+ import '../helpers/scoordToWorld.js';
5
+ import dcmjs from 'dcmjs';
5
6
 
6
- const {
7
- sr: {
8
- valueTypes,
9
- coding
10
- },
11
- adapters: {
12
- Cornerstone3D
13
- }
14
- } = dcmjs;
7
+ const _dcmjs$sr = dcmjs.sr,
8
+ valueTypes = _dcmjs$sr.valueTypes,
9
+ coding = _dcmjs$sr.coding,
10
+ Cornerstone3D = dcmjs.adapters.Cornerstone3D;
15
11
  class LabelData {
16
12
  constructor(tid300Item, annotation) {
17
13
  this.tid300Item = tid300Item;
@@ -21,10 +17,10 @@ class LabelData {
21
17
  contentItem() {
22
18
  var _handles$textBox;
23
19
  const contentEntries = this.tid300Item.contentItem();
24
- const {
25
- label,
26
- handles
27
- } = this.annotation.data;
20
+ this.fixScoordRelationships(contentEntries);
21
+ const _this$annotation$data = this.annotation.data,
22
+ label = _this$annotation$data.label,
23
+ handles = _this$annotation$data.handles;
28
24
  if (label) {
29
25
  contentEntries.push(this.createQualitativeLabel(label));
30
26
  this.filterCornerstoneFreeText(contentEntries);
@@ -34,10 +30,26 @@ class LabelData {
34
30
  }
35
31
  return contentEntries;
36
32
  }
33
+ fixScoordRelationships(contentEntries) {
34
+ const INFERRED_FROM = valueTypes.RelationshipTypes.INFERRED_FROM;
35
+ for (const entry of contentEntries) {
36
+ const item = entry;
37
+ const contentSeq = item.ContentSequence;
38
+ const children = this.normalizeContentSequence(contentSeq);
39
+ for (const child of children) {
40
+ if ((child.ValueType === 'SCOORD' || child.ValueType === 'SCOORD3D') && (child.RelationshipType === 'CONTAINS' || child.RelationshipType === 'Contains')) {
41
+ child.RelationshipType = INFERRED_FROM;
42
+ }
43
+ }
44
+ }
45
+ }
46
+ normalizeContentSequence(contentSeq) {
47
+ if (!contentSeq) return [];
48
+ if (Array.isArray(contentSeq)) return contentSeq;
49
+ return [contentSeq];
50
+ }
37
51
  filterCornerstoneFreeText(contentEntries) {
38
- const {
39
- codeValues
40
- } = Cornerstone3D.CodeScheme;
52
+ const codeValues = Cornerstone3D.CodeScheme.codeValues;
41
53
  const freeTextCodes = [codeValues.FREE_TEXT_CODE_VALUE, codeValues.CORNERSTONEFREETEXT];
42
54
  for (let i = 0; i < contentEntries.length; i++) {
43
55
  const group = contentEntries[i];
@@ -63,22 +75,18 @@ class LabelData {
63
75
  });
64
76
  }
65
77
  createQualitativeLabelPosition(annotation) {
66
- const {
67
- textBox
68
- } = annotation.data.handles;
69
- const {
70
- referencedImageId,
71
- FrameOfReferenceUID: frameOfReferenceUID
72
- } = annotation.metadata;
78
+ const textBox = annotation.data.handles.textBox;
79
+ const _annotation$metadata = annotation.metadata,
80
+ referencedImageId = _annotation$metadata.referencedImageId,
81
+ frameOfReferenceUID = _annotation$metadata.FrameOfReferenceUID;
73
82
  const is3DMeasurement = !referencedImageId;
74
- const {
75
- x,
76
- y,
77
- z
78
- } = toScoord({
79
- is3DMeasurement,
80
- referencedImageId
81
- }, textBox.worldPosition);
83
+ const _toScoord = toScoord({
84
+ is3DMeasurement,
85
+ referencedImageId
86
+ }, textBox.worldPosition),
87
+ x = _toScoord.x,
88
+ y = _toScoord.y,
89
+ z = _toScoord.z;
82
90
  const graphicType = valueTypes.GraphicTypes.POINT;
83
91
  const relationshipType = valueTypes.RelationshipTypes.CONTAINS;
84
92
  const name = new coding.CodedConcept(TEXT_ANNOTATION_POSITION);
@@ -1,4 +1,4 @@
1
- import BaseAdapter3D from "./BaseAdapter3D";
1
+ import BaseAdapter3D from './BaseAdapter3D';
2
2
  export default class Length extends BaseAdapter3D {
3
3
  static getMeasurementData(MeasurementGroup: any, sopInstanceUIDToImageIdMap: any, metadata: any): {
4
4
  description?: string;
@@ -1,26 +1,24 @@
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 { toScoord } from '../helpers/toScoordType.js';
6
- import '@cornerstonejs/core';
7
+ import '../helpers/scoordToWorld.js';
7
8
 
8
9
  var _Length;
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
- Length: TID300Length
13
- } = utilities.TID300;
14
- const LENGTH = "Length";
12
+ const TID300Length = utilities.TID300.Length;
13
+ const LENGTH = 'Length';
15
14
  class Length extends BaseAdapter3D {
16
15
  static getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata) {
17
- const {
18
- state,
19
- NUMGroup,
20
- worldCoords,
21
- referencedImageId,
22
- ReferencedFrameNumber
23
- } = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType);
16
+ const _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, this.toolType),
17
+ state = _MeasurementReport$ge.state,
18
+ NUMGroup = _MeasurementReport$ge.NUMGroup,
19
+ worldCoords = _MeasurementReport$ge.worldCoords,
20
+ referencedImageId = _MeasurementReport$ge.referencedImageId,
21
+ ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
24
22
  const cachedStats = referencedImageId ? {
25
23
  ["imageId:".concat(referencedImageId)]: {
26
24
  length: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0,
@@ -39,28 +37,22 @@ class Length extends BaseAdapter3D {
39
37
  }
40
38
  static getTID300RepresentationArguments(tool) {
41
39
  let is3DMeasurement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
42
- const {
43
- data,
44
- finding,
45
- findingSites,
46
- metadata
47
- } = tool;
48
- const {
49
- cachedStats = {},
50
- handles
51
- } = data;
52
- const {
53
- referencedImageId
54
- } = metadata;
40
+ const data = tool.data,
41
+ finding = tool.finding,
42
+ findingSites = tool.findingSites,
43
+ metadata = tool.metadata;
44
+ const _data$cachedStats = data.cachedStats,
45
+ cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
46
+ handles = data.handles;
47
+ const referencedImageId = metadata.referencedImageId;
55
48
  const scoordProps = {
56
49
  is3DMeasurement,
57
50
  referencedImageId
58
51
  };
59
52
  const point1 = toScoord(scoordProps, handles.points[0]);
60
53
  const point2 = toScoord(scoordProps, handles.points[1]);
61
- const {
62
- length: distance
63
- } = cachedStats["imageId:".concat(referencedImageId)] || {};
54
+ const _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
55
+ distance = _ref.length;
64
56
  return {
65
57
  point1,
66
58
  point2,
@@ -148,7 +148,7 @@ export default class MeasurementReport {
148
148
  metadata: any;
149
149
  toolType: any;
150
150
  }): SpatialCoordinatesData;
151
- static processSpatialCoordinatesGroup({ NUMGroup, sopInstanceUIDToImageIdMap, metadata, findingGroup, findingSiteGroups, commentGroup, commentPositionGroup, toolType, }: {
151
+ static processSpatialCoordinatesGroup({ NUMGroup, sopInstanceUIDToImageIdMap, metadata, findingGroup, findingSiteGroups, commentGroup, commentPositionGroup, controlPointsGroup, toolType, }: {
152
152
  NUMGroup: any;
153
153
  sopInstanceUIDToImageIdMap: any;
154
154
  metadata: any;
@@ -156,6 +156,7 @@ export default class MeasurementReport {
156
156
  findingSiteGroups: any;
157
157
  commentGroup: any;
158
158
  commentPositionGroup: any;
159
+ controlPointsGroup: any;
159
160
  toolType: any;
160
161
  }): {
161
162
  defaultState: SpatialCoordinatesState;
@@ -1,40 +1,30 @@
1
- import _defineProperty from '../../node_modules/@babel/runtime/helpers/esm/defineProperty.js';
2
- import { utilities as utilities$1, derivations, normalizers, data } from 'dcmjs';
3
- import { utilities, cache, Enums } from '@cornerstonejs/core';
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
+ import { utilities, derivations, normalizers, data } from 'dcmjs';
3
+ import { Enums, utilities as utilities$1, cache } from '@cornerstonejs/core';
4
4
  import CORNERSTONE_3D_TAG from './cornerstone3DTag.js';
5
5
  import { toArray } from '../helpers/toArray.js';
6
6
  import { codeMeaningEquals } from '../helpers/codeMeaningEquals.js';
7
+ import '../helpers/downloadDICOMData.js';
7
8
  import { copyStudyTags } from '../helpers/copyStudyTags.js';
8
9
  import { copySeriesTags } from '../helpers/copySeriesTags.js';
10
+ import '../helpers/toScoordType.js';
9
11
  import { scoordToWorld } from '../helpers/scoordToWorld.js';
10
12
  import { toPoint3 } from '../helpers/toPoint3.js';
11
13
  import CodingScheme from './CodingScheme.js';
12
- import { COMMENT_CODE, TEXT_ANNOTATION_POSITION, metaSRAnnotation, NO_IMAGE_ID } from './constants/index.js';
14
+ import { COMMENT_CODE, TEXT_ANNOTATION_POSITION, metaSRAnnotation, NO_IMAGE_ID, CONTROL_POINTS_CODE } from './constants/index.js';
13
15
  import LabelData from './LabelData.js';
14
16
 
15
17
  var _MeasurementReport;
16
18
  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; }
17
19
  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; }
18
- const {
19
- MetadataModules
20
- } = Enums;
21
- const {
22
- TID1500,
23
- addAccessors
24
- } = utilities$1;
25
- const {
26
- StructuredReport
27
- } = derivations;
28
- const {
29
- Normalizer
30
- } = normalizers;
31
- const {
32
- TID1500MeasurementReport,
33
- TID1501MeasurementGroup
34
- } = TID1500;
35
- const {
36
- DicomMetaDictionary
37
- } = data;
20
+ const MetadataModules = Enums.MetadataModules;
21
+ const TID1500 = utilities.TID1500,
22
+ addAccessors = utilities.addAccessors;
23
+ const StructuredReport = derivations.StructuredReport;
24
+ const Normalizer = normalizers.Normalizer;
25
+ const TID1500MeasurementReport = TID1500.TID1500MeasurementReport,
26
+ TID1501MeasurementGroup = TID1500.TID1501MeasurementGroup;
27
+ const DicomMetaDictionary = data.DicomMetaDictionary;
38
28
  const FINDING = {
39
29
  CodingSchemeDesignator: 'DCM',
40
30
  CodeValue: '121071'
@@ -47,6 +37,10 @@ const COMMENT_POSITION = {
47
37
  CodingSchemeDesignator: TEXT_ANNOTATION_POSITION.schemeDesignator,
48
38
  CodeValue: TEXT_ANNOTATION_POSITION.value
49
39
  };
40
+ const CONTROL_POINTS = {
41
+ CodingSchemeDesignator: CONTROL_POINTS_CODE.schemeDesignator,
42
+ CodeValue: CONTROL_POINTS_CODE.value
43
+ };
50
44
  const FINDING_SITE = {
51
45
  CodingSchemeDesignator: 'SCT',
52
46
  CodeValue: '363698007'
@@ -55,6 +49,14 @@ const FINDING_SITE_OLD = {
55
49
  CodingSchemeDesignator: 'SRT',
56
50
  CodeValue: 'G-C0E3'
57
51
  };
52
+ function isSecondaryScoordGroup(group) {
53
+ if (group.ValueType !== 'SCOORD' && group.ValueType !== 'SCOORD3D') {
54
+ return false;
55
+ }
56
+ const conceptNameCodeSequence = group.ConceptNameCodeSequence;
57
+ const conceptCode = Array.isArray(conceptNameCodeSequence) ? conceptNameCodeSequence[0] : conceptNameCodeSequence;
58
+ return !!conceptCode && conceptCode.CodingSchemeDesignator === CONTROL_POINTS.CodingSchemeDesignator && conceptCode.CodeValue === CONTROL_POINTS.CodeValue;
59
+ }
58
60
  class MeasurementReport {
59
61
  static getTID300ContentItem(tool, ReferencedSOPSequence, toolClass, is3DMeasurement) {
60
62
  const args = toolClass.getTID300RepresentationArguments(tool, is3DMeasurement);
@@ -78,11 +80,10 @@ class MeasurementReport {
78
80
  return new TID1501MeasurementGroup(Measurements);
79
81
  }
80
82
  static getCornerstoneLabelFromDefaultState(defaultState) {
81
- const {
82
- findingSites = [],
83
- finding,
84
- commentGroup
85
- } = defaultState;
83
+ const _defaultState$finding = defaultState.findingSites,
84
+ findingSites = _defaultState$finding === void 0 ? [] : _defaultState$finding,
85
+ finding = defaultState.finding,
86
+ commentGroup = defaultState.commentGroup;
86
87
  if (commentGroup !== null && commentGroup !== void 0 && commentGroup.TextValue) {
87
88
  return commentGroup.TextValue;
88
89
  }
@@ -99,19 +100,14 @@ class MeasurementReport {
99
100
  return metaSRAnnotation;
100
101
  }
101
102
  static processSCOORDGroup(_ref) {
102
- let {
103
- SCOORDGroup,
104
- toolType,
105
- sopInstanceUIDToImageIdMap,
106
- metadata
107
- } = _ref;
108
- const {
109
- ReferencedSOPSequence
110
- } = SCOORDGroup.ContentSequence;
111
- const {
112
- ReferencedSOPInstanceUID,
113
- ReferencedFrameNumber = 1
114
- } = ReferencedSOPSequence;
103
+ let SCOORDGroup = _ref.SCOORDGroup,
104
+ toolType = _ref.toolType,
105
+ sopInstanceUIDToImageIdMap = _ref.sopInstanceUIDToImageIdMap,
106
+ metadata = _ref.metadata;
107
+ const ReferencedSOPSequence = SCOORDGroup.ContentSequence.ReferencedSOPSequence;
108
+ const ReferencedSOPInstanceUID = ReferencedSOPSequence.ReferencedSOPInstanceUID,
109
+ _ReferencedSOPSequenc = ReferencedSOPSequence.ReferencedFrameNumber,
110
+ ReferencedFrameNumber = _ReferencedSOPSequenc === void 0 ? 1 : _ReferencedSOPSequenc;
115
111
  const referencedImageId = sopInstanceUIDToImageIdMap["".concat(ReferencedSOPInstanceUID, ":").concat(ReferencedFrameNumber)];
116
112
  const imagePlaneModule = metadata.get('imagePlaneModule', referencedImageId);
117
113
  const annotationUID = DicomMetaDictionary.uid();
@@ -146,10 +142,8 @@ class MeasurementReport {
146
142
  };
147
143
  }
148
144
  static processSCOORD3DGroup(_ref2) {
149
- let {
150
- SCOORD3DGroup,
151
- toolType
152
- } = _ref2;
145
+ let SCOORD3DGroup = _ref2.SCOORD3DGroup,
146
+ toolType = _ref2.toolType;
153
147
  const annotationUID = DicomMetaDictionary.uid();
154
148
  const toolData = {
155
149
  SCOORD3DGroup,
@@ -175,19 +169,18 @@ class MeasurementReport {
175
169
  }
176
170
  }
177
171
  };
178
- utilities.updatePlaneRestriction(toPoint3(SCOORD3DGroup.GraphicData), toolData.state.annotation.metadata);
172
+ utilities$1.updatePlaneRestriction(toPoint3(SCOORD3DGroup.GraphicData), toolData.state.annotation.metadata);
179
173
  return toolData;
180
174
  }
181
175
  static getSpatialCoordinatesState(_ref3) {
182
- let {
183
- NUMGroup,
184
- sopInstanceUIDToImageIdMap,
185
- metadata,
186
- toolType
187
- } = _ref3;
176
+ var _contentSequenceArr$f, _contentSequenceArr$f2;
177
+ let NUMGroup = _ref3.NUMGroup,
178
+ sopInstanceUIDToImageIdMap = _ref3.sopInstanceUIDToImageIdMap,
179
+ metadata = _ref3.metadata,
180
+ toolType = _ref3.toolType;
188
181
  const contentSequenceArr = toArray(NUMGroup.ContentSequence);
189
- const SCOORDGroup = contentSequenceArr.find(group => group.ValueType === 'SCOORD');
190
- const SCOORD3DGroup = contentSequenceArr.find(group => group.ValueType === 'SCOORD3D');
182
+ const SCOORDGroup = (_contentSequenceArr$f = contentSequenceArr.find(group => group.ValueType === 'SCOORD' && !isSecondaryScoordGroup(group))) !== null && _contentSequenceArr$f !== void 0 ? _contentSequenceArr$f : contentSequenceArr.find(group => group.ValueType === 'SCOORD');
183
+ const SCOORD3DGroup = (_contentSequenceArr$f2 = contentSequenceArr.find(group => group.ValueType === 'SCOORD3D' && !isSecondaryScoordGroup(group))) !== null && _contentSequenceArr$f2 !== void 0 ? _contentSequenceArr$f2 : contentSequenceArr.find(group => group.ValueType === 'SCOORD3D');
191
184
  const result = SCOORD3DGroup && this.processSCOORD3DGroup({
192
185
  SCOORD3DGroup,
193
186
  toolType
@@ -203,32 +196,30 @@ class MeasurementReport {
203
196
  return result;
204
197
  }
205
198
  static processSpatialCoordinatesGroup(_ref4) {
206
- let {
207
- NUMGroup,
208
- sopInstanceUIDToImageIdMap,
209
- metadata,
210
- findingGroup,
211
- findingSiteGroups,
212
- commentGroup,
213
- commentPositionGroup,
214
- toolType
215
- } = _ref4;
216
- const {
217
- state,
218
- SCOORDGroup,
219
- ReferencedSOPSequence,
220
- ReferencedSOPInstanceUID,
221
- ReferencedFrameNumber,
222
- SCOORD3DGroup,
223
- FrameOfReferenceUID,
224
- referencedImageId,
225
- textBoxPosition
226
- } = this.getSpatialCoordinatesState({
227
- NUMGroup,
228
- sopInstanceUIDToImageIdMap,
229
- metadata,
230
- toolType
231
- });
199
+ let NUMGroup = _ref4.NUMGroup,
200
+ sopInstanceUIDToImageIdMap = _ref4.sopInstanceUIDToImageIdMap,
201
+ metadata = _ref4.metadata,
202
+ findingGroup = _ref4.findingGroup,
203
+ findingSiteGroups = _ref4.findingSiteGroups,
204
+ commentGroup = _ref4.commentGroup,
205
+ commentPositionGroup = _ref4.commentPositionGroup,
206
+ controlPointsGroup = _ref4.controlPointsGroup,
207
+ toolType = _ref4.toolType;
208
+ const _this$getSpatialCoord = this.getSpatialCoordinatesState({
209
+ NUMGroup,
210
+ sopInstanceUIDToImageIdMap,
211
+ metadata,
212
+ toolType
213
+ }),
214
+ state = _this$getSpatialCoord.state,
215
+ SCOORDGroup = _this$getSpatialCoord.SCOORDGroup,
216
+ ReferencedSOPSequence = _this$getSpatialCoord.ReferencedSOPSequence,
217
+ ReferencedSOPInstanceUID = _this$getSpatialCoord.ReferencedSOPInstanceUID,
218
+ ReferencedFrameNumber = _this$getSpatialCoord.ReferencedFrameNumber,
219
+ SCOORD3DGroup = _this$getSpatialCoord.SCOORD3DGroup,
220
+ FrameOfReferenceUID = _this$getSpatialCoord.FrameOfReferenceUID,
221
+ referencedImageId = _this$getSpatialCoord.referencedImageId,
222
+ textBoxPosition = _this$getSpatialCoord.textBoxPosition;
232
223
  const finding = findingGroup ? addAccessors(findingGroup.ConceptCodeSequence) : undefined;
233
224
  const findingSites = findingSiteGroups.map(fsg => {
234
225
  return addAccessors(fsg.ConceptCodeSequence);
@@ -244,6 +235,13 @@ class MeasurementReport {
244
235
  worldPosition: textBoxCoords[0]
245
236
  };
246
237
  }
238
+ if (controlPointsGroup) {
239
+ const controlPoints = scoordToWorld({
240
+ is3DMeasurement: !referencedImageId,
241
+ referencedImageId
242
+ }, controlPointsGroup);
243
+ state.annotation.data.handles.points = controlPoints;
244
+ }
247
245
  state.finding = finding;
248
246
  state.findingSites = findingSites;
249
247
  state.commentGroup = commentGroup;
@@ -268,15 +266,18 @@ class MeasurementReport {
268
266
  };
269
267
  }
270
268
  static getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, toolType) {
271
- const {
272
- ContentSequence
273
- } = MeasurementGroup;
269
+ const ContentSequence = MeasurementGroup.ContentSequence;
274
270
  const contentSequenceArr = toArray(ContentSequence);
275
271
  const findingGroup = contentSequenceArr.find(group => this.codeValueMatch(group, FINDING));
276
272
  const commentGroup = contentSequenceArr.find(group => this.codeValueMatch(group, COMMENT));
277
273
  const commentPositionGroup = contentSequenceArr.find(group => this.codeValueMatch(group, COMMENT_POSITION));
274
+ let controlPointsGroup = contentSequenceArr.find(group => this.codeValueMatch(group, CONTROL_POINTS));
275
+ const NUMGroupForLookup = contentSequenceArr.find(group => group.ValueType === 'NUM');
276
+ if (!controlPointsGroup && NUMGroupForLookup !== null && NUMGroupForLookup !== void 0 && NUMGroupForLookup.ContentSequence) {
277
+ controlPointsGroup = toArray(NUMGroupForLookup.ContentSequence).find(item => this.codeValueMatch(item, CONTROL_POINTS));
278
+ }
278
279
  const findingSiteGroups = contentSequenceArr.filter(group => this.codeValueMatch(group, FINDING_SITE, FINDING_SITE_OLD)) || [];
279
- const NUMGroup = contentSequenceArr.find(group => group.ValueType === 'NUM') || {
280
+ const NUMGroup = NUMGroupForLookup || {
280
281
  ContentSequence: contentSequenceArr.filter(group => group.ValueType === 'SCOORD' || group.ValueType === 'SCOORD3D')
281
282
  };
282
283
  const spatialGroup = this.processSpatialCoordinatesGroup({
@@ -287,11 +288,10 @@ class MeasurementReport {
287
288
  findingSiteGroups,
288
289
  commentGroup,
289
290
  commentPositionGroup,
291
+ controlPointsGroup,
290
292
  toolType
291
293
  });
292
- const {
293
- referencedImageId
294
- } = spatialGroup.state.annotation.metadata;
294
+ const referencedImageId = spatialGroup.state.annotation.metadata.referencedImageId;
295
295
  const is3DMeasurement = !!spatialGroup.SCOORD3DGroup;
296
296
  const scoordArgs = {
297
297
  referencedImageId,
@@ -307,27 +307,21 @@ class MeasurementReport {
307
307
  });
308
308
  }
309
309
  static generateReferencedSOPSequence(_ref5) {
310
- let {
311
- toolData,
312
- toolTypes,
313
- metadataProvider,
314
- imageId,
315
- sopInstanceUIDsToSeriesInstanceUIDMap,
316
- derivationSourceDatasets
317
- } = _ref5;
310
+ let toolData = _ref5.toolData,
311
+ toolTypes = _ref5.toolTypes,
312
+ metadataProvider = _ref5.metadataProvider,
313
+ imageId = _ref5.imageId,
314
+ sopInstanceUIDsToSeriesInstanceUIDMap = _ref5.sopInstanceUIDsToSeriesInstanceUIDMap,
315
+ derivationSourceDatasets = _ref5.derivationSourceDatasets;
318
316
  const effectiveImageId = imageId === NO_IMAGE_ID ? this.getImageIdFromVolume({
319
317
  toolData,
320
318
  toolTypes
321
319
  }) : imageId;
322
320
  const sopCommonModule = metadataProvider.get('sopCommonModule', effectiveImageId);
323
321
  const instance = metadataProvider.get('instance', effectiveImageId);
324
- const {
325
- sopInstanceUID,
326
- sopClassUID
327
- } = sopCommonModule;
328
- const {
329
- SeriesInstanceUID: seriesInstanceUID
330
- } = instance;
322
+ const sopInstanceUID = sopCommonModule.sopInstanceUID,
323
+ sopClassUID = sopCommonModule.sopClassUID;
324
+ const seriesInstanceUID = instance.SeriesInstanceUID;
331
325
  sopInstanceUIDsToSeriesInstanceUIDMap[sopInstanceUID] = seriesInstanceUID;
332
326
  if (!derivationSourceDatasets.find(dsd => dsd.SeriesInstanceUID === seriesInstanceUID)) {
333
327
  const derivationSourceDataset = MeasurementReport.generateDerivationSourceDataset(instance);
@@ -346,10 +340,8 @@ class MeasurementReport {
346
340
  }
347
341
  static getImageIdFromVolume(_ref6) {
348
342
  var _toolData$toolTypes$, _referenceToolData$me;
349
- let {
350
- toolData,
351
- toolTypes
352
- } = _ref6;
343
+ let toolData = _ref6.toolData,
344
+ toolTypes = _ref6.toolTypes;
353
345
  const referenceToolData = toolData === null || toolData === void 0 || (_toolData$toolTypes$ = toolData[toolTypes === null || toolTypes === void 0 ? void 0 : toolTypes[0]]) === null || _toolData$toolTypes$ === void 0 || (_toolData$toolTypes$ = _toolData$toolTypes$.data) === null || _toolData$toolTypes$ === void 0 ? void 0 : _toolData$toolTypes$[0];
354
346
  const volumeId = referenceToolData === null || referenceToolData === void 0 || (_referenceToolData$me = referenceToolData.metadata) === null || _referenceToolData$me === void 0 ? void 0 : _referenceToolData$me.volumeId;
355
347
  const volume = cache.getVolume(volumeId);
@@ -420,9 +412,7 @@ class MeasurementReport {
420
412
  const GROUP = 'Measurement Group';
421
413
  const TRACKING_IDENTIFIER = 'Tracking Identifier';
422
414
  const TRACKING_UNIQUE_IDENTIFIER = 'Tracking Unique Identifier';
423
- const {
424
- imageId: predecessorImageId
425
- } = dataset;
415
+ const predecessorImageId = dataset.imageId;
426
416
  const imagingMeasurementContent = toArray(dataset.ContentSequence).find(codeMeaningEquals(REPORT));
427
417
  const measurementGroups = toArray(imagingMeasurementContent.ContentSequence).filter(codeMeaningEquals(GROUP));
428
418
  const measurementData = {};
@@ -431,9 +421,7 @@ class MeasurementReport {
431
421
  var _hooks$getToolClass;
432
422
  const measurementGroupContentSequence = toArray(measurementGroup.ContentSequence);
433
423
  const trackingIdentifierGroup = measurementGroupContentSequence.find(contentItem => contentItem.ConceptNameCodeSequence.CodeMeaning === TRACKING_IDENTIFIER);
434
- const {
435
- TextValue: trackingIdentifierValue
436
- } = trackingIdentifierGroup;
424
+ const trackingIdentifierValue = trackingIdentifierGroup.TextValue;
437
425
  const trackingUniqueIdentifierGroup = measurementGroupContentSequence.find(contentItem => contentItem.ConceptNameCodeSequence.CodeMeaning === TRACKING_UNIQUE_IDENTIFIER);
438
426
  const trackingUniqueIdentifierValue = trackingUniqueIdentifierGroup === null || trackingUniqueIdentifierGroup === void 0 ? void 0 : trackingUniqueIdentifierGroup.UID;
439
427
  const toolAdapter = (hooks === null || hooks === void 0 || (_hooks$getToolClass = hooks.getToolClass) === null || _hooks$getToolClass === void 0 ? void 0 : _hooks$getToolClass.call(hooks, measurementGroup, dataset, this.measurementAdapterByToolType)) || this.getAdapterForTrackingIdentifier(trackingIdentifierValue) || this.getAdapterForCodeType(measurementGroup);
@@ -523,16 +511,16 @@ _MeasurementReport.measurementAdapterByToolType = new Map();
523
511
  _MeasurementReport.measurementAdaptersByType = new Map();
524
512
  _MeasurementReport.measurementAdapterByTrackingIdentifier = new Map();
525
513
  _MeasurementReport.codeValueMatch = (group, code, oldCode) => {
526
- const {
527
- ConceptNameCodeSequence
528
- } = group;
514
+ const ConceptNameCodeSequence = group.ConceptNameCodeSequence;
529
515
  if (!ConceptNameCodeSequence) {
530
516
  return;
531
517
  }
532
- const {
533
- CodingSchemeDesignator,
534
- CodeValue
535
- } = ConceptNameCodeSequence;
518
+ const seq = Array.isArray(ConceptNameCodeSequence) ? ConceptNameCodeSequence[0] : ConceptNameCodeSequence;
519
+ if (!seq) {
520
+ return;
521
+ }
522
+ const CodingSchemeDesignator = seq.CodingSchemeDesignator,
523
+ CodeValue = seq.CodeValue;
536
524
  return CodingSchemeDesignator == code.CodingSchemeDesignator && CodeValue == code.CodeValue || oldCode && CodingSchemeDesignator == oldCode.CodingSchemeDesignator && CodeValue == oldCode.CodeValue;
537
525
  };
538
526
  _MeasurementReport.generateDerivationSourceDataset = instance => {
@@ -1,11 +1,7 @@
1
1
  import { CornerstonePMAP } from '../../Cornerstone/index.js';
2
2
 
3
- const {
4
- ParametricMap
5
- } = CornerstonePMAP;
6
- const {
7
- generateToolState: generateToolStateCornerstone
8
- } = ParametricMap;
3
+ const ParametricMap = CornerstonePMAP.ParametricMap;
4
+ const generateToolStateCornerstone = ParametricMap.generateToolState;
9
5
  function generateToolState(imageIds, arrayBuffer, metadataProvider) {
10
6
  let skipOverlapping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
11
7
  let tolerance = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1e-3;
@@ -1,4 +1,4 @@
1
- import BaseAdapter3D from "./BaseAdapter3D";
1
+ import BaseAdapter3D from './BaseAdapter3D';
2
2
  declare class PlanarFreehandROI extends BaseAdapter3D {
3
3
  static closedContourThreshold: number;
4
4
  static getMeasurementData(MeasurementGroup: any, sopInstanceUIDToImageIdMap: any, metadata: any): {
@@ -20,6 +20,15 @@ declare class PlanarFreehandROI extends BaseAdapter3D {
20
20
  y: number;
21
21
  z?: undefined;
22
22
  })[];
23
+ controlPoints: ({
24
+ x: any;
25
+ y: any;
26
+ z: any;
27
+ } | {
28
+ x: number;
29
+ y: number;
30
+ z?: undefined;
31
+ })[];
23
32
  area: any;
24
33
  areaUnit: any;
25
34
  perimeter: any;
@@ -27,6 +36,7 @@ declare class PlanarFreehandROI extends BaseAdapter3D {
27
36
  mean: any;
28
37
  max: any;
29
38
  stdDev: any;
39
+ splineType: any;
30
40
  trackingIdentifierTextValue: string;
31
41
  finding: any;
32
42
  findingSites: any;