@cornerstonejs/adapters 0.1.2 → 0.1.3

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 (39) hide show
  1. package/package.json +13 -5
  2. package/src/adapters/Cornerstone/Angle.js +92 -0
  3. package/src/adapters/Cornerstone/ArrowAnnotate.js +106 -0
  4. package/src/adapters/Cornerstone/Bidirectional.js +187 -0
  5. package/src/adapters/Cornerstone/CircleRoi.js +109 -0
  6. package/src/adapters/Cornerstone/CobbAngle.js +96 -0
  7. package/src/adapters/Cornerstone/EllipticalRoi.js +149 -0
  8. package/src/adapters/Cornerstone/FreehandRoi.js +82 -0
  9. package/src/adapters/Cornerstone/Length.js +80 -0
  10. package/src/adapters/Cornerstone/MeasurementReport.js +352 -0
  11. package/src/adapters/Cornerstone/RectangleRoi.js +92 -0
  12. package/src/adapters/Cornerstone/Segmentation.js +118 -0
  13. package/src/adapters/Cornerstone/Segmentation_3X.js +632 -0
  14. package/src/adapters/Cornerstone/Segmentation_4X.js +1543 -0
  15. package/src/adapters/Cornerstone/cornerstone4Tag.js +1 -0
  16. package/src/adapters/Cornerstone/index.js +27 -0
  17. package/src/adapters/Cornerstone3D/ArrowAnnotate.js +155 -0
  18. package/src/adapters/Cornerstone3D/Bidirectional.js +196 -0
  19. package/src/adapters/Cornerstone3D/CodingScheme.js +16 -0
  20. package/src/adapters/Cornerstone3D/EllipticalROI.js +204 -0
  21. package/src/adapters/Cornerstone3D/Length.js +113 -0
  22. package/src/adapters/Cornerstone3D/MeasurementReport.js +445 -0
  23. package/src/adapters/Cornerstone3D/PlanarFreehandROI.js +137 -0
  24. package/src/adapters/Cornerstone3D/Probe.js +106 -0
  25. package/src/adapters/Cornerstone3D/cornerstone3DTag.js +1 -0
  26. package/src/adapters/Cornerstone3D/index.js +24 -0
  27. package/src/adapters/VTKjs/Segmentation.js +223 -0
  28. package/src/adapters/VTKjs/index.js +7 -0
  29. package/src/adapters/helpers.js +19 -0
  30. package/src/adapters/index.js +11 -0
  31. package/src/index.js +4 -0
  32. package/.babelrc +0 -9
  33. package/.eslintrc.json +0 -18
  34. package/.prettierrc +0 -5
  35. package/CHANGELOG.md +0 -106
  36. package/generate-dictionary.js +0 -145
  37. package/netlify.toml +0 -20
  38. package/rollup.config.js +0 -37
  39. package/test/adapters.test.js +0 -1
@@ -0,0 +1,92 @@
1
+ import { utilities } from "dcmjs";
2
+ import MeasurementReport from "./MeasurementReport";
3
+ import CORNERSTONE_4_TAG from "./cornerstone4Tag";
4
+
5
+ const { Polyline: TID300Polyline } = utilities.TID300;
6
+
7
+ class RectangleRoi {
8
+ static getMeasurementData(MeasurementGroup) {
9
+ const { defaultState, SCOORDGroup, NUMGroup } =
10
+ MeasurementReport.getSetupMeasurementData(MeasurementGroup);
11
+
12
+ const state = {
13
+ ...defaultState,
14
+ toolType: RectangleRoi.toolType,
15
+ handles: {
16
+ start: {},
17
+ end: {},
18
+ textBox: {
19
+ active: false,
20
+ hasMoved: false,
21
+ movesIndependently: false,
22
+ drawnIndependently: true,
23
+ allowedOutsideImage: true,
24
+ hasBoundingBox: true
25
+ },
26
+ initialRotation: 0
27
+ },
28
+ cachedStats: {
29
+ area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0
30
+ },
31
+ color: undefined,
32
+ invalidated: true
33
+ };
34
+ const intermediate = {};
35
+
36
+ [
37
+ state.handles.start.x,
38
+ state.handles.start.y,
39
+ intermediate.x,
40
+ intermediate.y,
41
+ state.handles.end.x,
42
+ state.handles.end.y
43
+ ] = SCOORDGroup.GraphicData;
44
+
45
+ return state;
46
+ }
47
+
48
+ static getTID300RepresentationArguments(tool) {
49
+ const { finding, findingSites, cachedStats = {}, handles } = tool;
50
+ const { start, end } = handles;
51
+ const points = [
52
+ start,
53
+ { x: start.x, y: end.y },
54
+ end,
55
+ { x: end.x, y: start.y }
56
+ ];
57
+ const { area, perimeter } = cachedStats;
58
+
59
+ const trackingIdentifierTextValue =
60
+ "cornerstoneTools@^4.0.0:RectangleRoi";
61
+
62
+ return {
63
+ points,
64
+ area,
65
+ perimeter,
66
+ trackingIdentifierTextValue,
67
+ finding,
68
+ findingSites: findingSites || []
69
+ };
70
+ }
71
+ }
72
+
73
+ RectangleRoi.toolType = "RectangleRoi";
74
+ RectangleRoi.utilityToolType = "RectangleRoi";
75
+ RectangleRoi.TID300Representation = TID300Polyline;
76
+ RectangleRoi.isValidCornerstoneTrackingIdentifier = TrackingIdentifier => {
77
+ if (!TrackingIdentifier.includes(":")) {
78
+ return false;
79
+ }
80
+
81
+ const [cornerstone4Tag, toolType] = TrackingIdentifier.split(":");
82
+
83
+ if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
84
+ return false;
85
+ }
86
+
87
+ return toolType === RectangleRoi.toolType;
88
+ };
89
+
90
+ MeasurementReport.registerTool(RectangleRoi);
91
+
92
+ export default RectangleRoi;
@@ -0,0 +1,118 @@
1
+ import Segmentation_3X from "./Segmentation_3X";
2
+ import Segmentation_4X from "./Segmentation_4X";
3
+
4
+ const Segmentation = {
5
+ generateSegmentation,
6
+ generateToolState,
7
+ fillSegmentation
8
+ };
9
+
10
+ export default Segmentation;
11
+
12
+ /**
13
+ * generateSegmentation - Generates a DICOM Segmentation object given cornerstoneTools data.
14
+ *
15
+ * @param {object[]} images An array of the cornerstone image objects.
16
+ * @param {Object|Object[]} labelmaps3DorBrushData For 4.X: The cornerstone `Labelmap3D` object, or an array of objects.
17
+ * For 3.X: the BrushData.
18
+ * @param {number} cornerstoneToolsVersion The cornerstoneTools major version to map against.
19
+ * @returns {Object}
20
+ */
21
+ function generateSegmentation(
22
+ images,
23
+ labelmaps3DorBrushData,
24
+ options = { includeSliceSpacing: true },
25
+ cornerstoneToolsVersion = 4
26
+ ) {
27
+ if (cornerstoneToolsVersion === 4) {
28
+ return Segmentation_4X.generateSegmentation(
29
+ images,
30
+ labelmaps3DorBrushData,
31
+ options
32
+ );
33
+ }
34
+
35
+ if (cornerstoneToolsVersion === 3) {
36
+ return Segmentation_3X.generateSegmentation(
37
+ images,
38
+ labelmaps3DorBrushData,
39
+ options
40
+ );
41
+ }
42
+
43
+ console.warn(
44
+ `No generateSegmentation adapater for cornerstone version ${cornerstoneToolsVersion}, exiting.`
45
+ );
46
+ }
47
+
48
+ /**
49
+ * generateToolState - Given a set of cornrstoneTools imageIds and a Segmentation buffer,
50
+ * derive cornerstoneTools toolState and brush metadata.
51
+ *
52
+ * @param {string[]} imageIds An array of the imageIds.
53
+ * @param {ArrayBuffer} arrayBuffer The SEG arrayBuffer.
54
+ * @param {*} metadataProvider
55
+ * @param {bool} skipOverlapping - skip checks for overlapping segs, default value false.
56
+ * @param {number} tolerance - default value 1.e-3.
57
+ * @param {number} cornerstoneToolsVersion - default value 4.
58
+ *
59
+ * @returns {Object} The toolState and an object from which the
60
+ * segment metadata can be derived.
61
+ */
62
+ function generateToolState(
63
+ imageIds,
64
+ arrayBuffer,
65
+ metadataProvider,
66
+ skipOverlapping = false,
67
+ tolerance = 1e-3,
68
+ cornerstoneToolsVersion = 4
69
+ ) {
70
+ if (cornerstoneToolsVersion === 4) {
71
+ return Segmentation_4X.generateToolState(
72
+ imageIds,
73
+ arrayBuffer,
74
+ metadataProvider,
75
+ skipOverlapping,
76
+ tolerance
77
+ );
78
+ }
79
+
80
+ if (cornerstoneToolsVersion === 3) {
81
+ return Segmentation_3X.generateToolState(
82
+ imageIds,
83
+ arrayBuffer,
84
+ metadataProvider
85
+ );
86
+ }
87
+
88
+ console.warn(
89
+ `No generateToolState adapater for cornerstone version ${cornerstoneToolsVersion}, exiting.`
90
+ );
91
+ }
92
+
93
+ /**
94
+ * fillSegmentation - Fills a derived segmentation dataset with cornerstoneTools `LabelMap3D` data.
95
+ *
96
+ * @param {object[]} segmentation An empty segmentation derived dataset.
97
+ * @param {Object|Object[]} inputLabelmaps3D The cornerstone `Labelmap3D` object, or an array of objects.
98
+ * @param {Object} userOptions Options object to override default options.
99
+ * @returns {Blob} description
100
+ */
101
+ function fillSegmentation(
102
+ segmentation,
103
+ inputLabelmaps3D,
104
+ options = { includeSliceSpacing: true },
105
+ cornerstoneToolsVersion = 4
106
+ ) {
107
+ if (cornerstoneToolsVersion === 4) {
108
+ return Segmentation_4X.fillSegmentation(
109
+ segmentation,
110
+ inputLabelmaps3D,
111
+ options
112
+ );
113
+ }
114
+
115
+ console.warn(
116
+ `No generateSegmentation adapater for cornerstone version ${cornerstoneToolsVersion}, exiting.`
117
+ );
118
+ }