copper3d 3.0.1 → 3.1.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 (134) hide show
  1. package/README.md +197 -875
  2. package/dist/Utils/segmentation/CanvasState.d.ts +31 -0
  3. package/dist/Utils/segmentation/CanvasState.js +167 -0
  4. package/dist/Utils/segmentation/CanvasState.js.map +1 -0
  5. package/dist/Utils/segmentation/DragOperator.d.ts +10 -2
  6. package/dist/Utils/segmentation/DragOperator.js +16 -8
  7. package/dist/Utils/segmentation/DragOperator.js.map +1 -1
  8. package/dist/Utils/segmentation/DrawToolCore.d.ts +64 -35
  9. package/dist/Utils/segmentation/DrawToolCore.js +332 -584
  10. package/dist/Utils/segmentation/DrawToolCore.js.map +1 -1
  11. package/dist/Utils/segmentation/NrrdTools.d.ts +117 -353
  12. package/dist/Utils/segmentation/NrrdTools.js +622 -1081
  13. package/dist/Utils/segmentation/NrrdTools.js.map +1 -1
  14. package/dist/Utils/segmentation/RenderingUtils.d.ts +73 -0
  15. package/dist/Utils/segmentation/RenderingUtils.js +180 -0
  16. package/dist/Utils/segmentation/RenderingUtils.js.map +1 -0
  17. package/dist/Utils/segmentation/core/MaskVolume.js +23 -2
  18. package/dist/Utils/segmentation/core/MaskVolume.js.map +1 -1
  19. package/dist/Utils/segmentation/core/UndoManager.d.ts +1 -1
  20. package/dist/Utils/segmentation/core/UndoManager.js +1 -1
  21. package/dist/Utils/segmentation/core/index.d.ts +1 -3
  22. package/dist/Utils/segmentation/core/index.js +0 -1
  23. package/dist/Utils/segmentation/core/index.js.map +1 -1
  24. package/dist/Utils/segmentation/core/types.d.ts +384 -0
  25. package/dist/Utils/segmentation/core/types.js +25 -24
  26. package/dist/Utils/segmentation/core/types.js.map +1 -1
  27. package/dist/Utils/segmentation/coreTools/GuiState.d.ts +22 -0
  28. package/dist/Utils/segmentation/coreTools/GuiState.js +48 -0
  29. package/dist/Utils/segmentation/coreTools/GuiState.js.map +1 -0
  30. package/dist/Utils/segmentation/coreTools/NrrdState.d.ts +25 -0
  31. package/dist/Utils/segmentation/coreTools/NrrdState.js +85 -0
  32. package/dist/Utils/segmentation/coreTools/NrrdState.js.map +1 -0
  33. package/dist/Utils/segmentation/coreTools/divControlTools.d.ts +1 -1
  34. package/dist/Utils/segmentation/coreTools/divControlTools.js +1 -1
  35. package/dist/Utils/segmentation/coreTools/divControlTools.js.map +1 -1
  36. package/dist/Utils/segmentation/coreTools/gui.d.ts +12 -12
  37. package/dist/Utils/segmentation/coreTools/gui.js +81 -107
  38. package/dist/Utils/segmentation/coreTools/gui.js.map +1 -1
  39. package/dist/Utils/segmentation/eventRouter/EventRouter.d.ts +2 -1
  40. package/dist/Utils/segmentation/eventRouter/EventRouter.js +15 -10
  41. package/dist/Utils/segmentation/eventRouter/EventRouter.js.map +1 -1
  42. package/dist/Utils/segmentation/eventRouter/types.d.ts +3 -3
  43. package/dist/Utils/segmentation/tools/BaseTool.d.ts +8 -5
  44. package/dist/Utils/segmentation/tools/BaseTool.js +1 -2
  45. package/dist/Utils/segmentation/tools/BaseTool.js.map +1 -1
  46. package/dist/Utils/segmentation/tools/ContrastTool.d.ts +3 -6
  47. package/dist/Utils/segmentation/tools/ContrastTool.js.map +1 -1
  48. package/dist/Utils/segmentation/tools/CrosshairTool.d.ts +11 -1
  49. package/dist/Utils/segmentation/tools/CrosshairTool.js +50 -25
  50. package/dist/Utils/segmentation/tools/CrosshairTool.js.map +1 -1
  51. package/dist/Utils/segmentation/tools/DataLoader.d.ts +33 -0
  52. package/dist/Utils/segmentation/tools/DataLoader.js +159 -0
  53. package/dist/Utils/segmentation/tools/DataLoader.js.map +1 -0
  54. package/dist/Utils/segmentation/tools/DragSliceTool.d.ts +3 -10
  55. package/dist/Utils/segmentation/tools/DragSliceTool.js +63 -53
  56. package/dist/Utils/segmentation/tools/DragSliceTool.js.map +1 -1
  57. package/dist/Utils/segmentation/tools/DrawingTool.d.ts +85 -0
  58. package/dist/Utils/segmentation/tools/DrawingTool.js +270 -0
  59. package/dist/Utils/segmentation/tools/DrawingTool.js.map +1 -0
  60. package/dist/Utils/segmentation/tools/EraserTool.js +8 -8
  61. package/dist/Utils/segmentation/tools/EraserTool.js.map +1 -1
  62. package/dist/Utils/segmentation/tools/ImageStoreHelper.d.ts +13 -33
  63. package/dist/Utils/segmentation/tools/ImageStoreHelper.js +39 -82
  64. package/dist/Utils/segmentation/tools/ImageStoreHelper.js.map +1 -1
  65. package/dist/Utils/segmentation/tools/LayerChannelManager.d.ts +52 -0
  66. package/dist/Utils/segmentation/tools/LayerChannelManager.js +175 -0
  67. package/dist/Utils/segmentation/tools/LayerChannelManager.js.map +1 -0
  68. package/dist/Utils/segmentation/tools/PanTool.d.ts +47 -0
  69. package/dist/Utils/segmentation/tools/PanTool.js +90 -0
  70. package/dist/Utils/segmentation/tools/PanTool.js.map +1 -0
  71. package/dist/Utils/segmentation/tools/SliceRenderPipeline.d.ts +80 -0
  72. package/dist/Utils/segmentation/tools/SliceRenderPipeline.js +355 -0
  73. package/dist/Utils/segmentation/tools/SliceRenderPipeline.js.map +1 -0
  74. package/dist/Utils/segmentation/tools/SphereTool.d.ts +223 -10
  75. package/dist/Utils/segmentation/tools/SphereTool.js +512 -47
  76. package/dist/Utils/segmentation/tools/SphereTool.js.map +1 -1
  77. package/dist/Utils/segmentation/tools/ToolHost.d.ts +74 -0
  78. package/dist/Utils/segmentation/tools/ToolHost.js +10 -0
  79. package/dist/Utils/segmentation/tools/ToolHost.js.map +1 -0
  80. package/dist/Utils/segmentation/tools/ZoomTool.d.ts +2 -6
  81. package/dist/Utils/segmentation/tools/ZoomTool.js +3 -3
  82. package/dist/Utils/segmentation/tools/ZoomTool.js.map +1 -1
  83. package/dist/Utils/segmentation/tools/index.d.ts +8 -6
  84. package/dist/Utils/segmentation/tools/index.js +10 -1
  85. package/dist/Utils/segmentation/tools/index.js.map +1 -1
  86. package/dist/Utils/workers/reformatSaveDataWorker.d.ts +1 -1
  87. package/dist/bundle.esm.js +3729 -3017
  88. package/dist/bundle.umd.js +3729 -3017
  89. package/dist/index.d.ts +6 -3
  90. package/dist/index.js +1 -1
  91. package/dist/index.js.map +1 -1
  92. package/dist/types/Utils/segmentation/CanvasState.d.ts +31 -0
  93. package/dist/types/Utils/segmentation/DragOperator.d.ts +10 -2
  94. package/dist/types/Utils/segmentation/DrawToolCore.d.ts +64 -35
  95. package/dist/types/Utils/segmentation/NrrdTools.d.ts +117 -353
  96. package/dist/types/Utils/segmentation/RenderingUtils.d.ts +73 -0
  97. package/dist/types/Utils/segmentation/core/UndoManager.d.ts +1 -1
  98. package/dist/types/Utils/segmentation/core/index.d.ts +1 -3
  99. package/dist/types/Utils/segmentation/core/types.d.ts +384 -0
  100. package/dist/types/Utils/segmentation/coreTools/GuiState.d.ts +22 -0
  101. package/dist/types/Utils/segmentation/coreTools/NrrdState.d.ts +25 -0
  102. package/dist/types/Utils/segmentation/coreTools/divControlTools.d.ts +1 -1
  103. package/dist/types/Utils/segmentation/coreTools/gui.d.ts +12 -12
  104. package/dist/types/Utils/segmentation/eventRouter/EventRouter.d.ts +2 -1
  105. package/dist/types/Utils/segmentation/eventRouter/types.d.ts +3 -3
  106. package/dist/types/Utils/segmentation/tools/BaseTool.d.ts +8 -5
  107. package/dist/types/Utils/segmentation/tools/ContrastTool.d.ts +3 -6
  108. package/dist/types/Utils/segmentation/tools/CrosshairTool.d.ts +11 -1
  109. package/dist/types/Utils/segmentation/tools/DataLoader.d.ts +33 -0
  110. package/dist/types/Utils/segmentation/tools/DragSliceTool.d.ts +3 -10
  111. package/dist/types/Utils/segmentation/tools/DrawingTool.d.ts +85 -0
  112. package/dist/types/Utils/segmentation/tools/ImageStoreHelper.d.ts +13 -33
  113. package/dist/types/Utils/segmentation/tools/LayerChannelManager.d.ts +52 -0
  114. package/dist/types/Utils/segmentation/tools/PanTool.d.ts +47 -0
  115. package/dist/types/Utils/segmentation/tools/SliceRenderPipeline.d.ts +80 -0
  116. package/dist/types/Utils/segmentation/tools/SphereTool.d.ts +223 -10
  117. package/dist/types/Utils/segmentation/tools/ToolHost.d.ts +74 -0
  118. package/dist/types/Utils/segmentation/tools/ZoomTool.d.ts +2 -6
  119. package/dist/types/Utils/segmentation/tools/index.d.ts +8 -6
  120. package/dist/types/Utils/workers/reformatSaveDataWorker.d.ts +1 -1
  121. package/dist/types/index.d.ts +6 -3
  122. package/package.json +1 -1
  123. package/dist/Utils/segmentation/CommToolsData.d.ts +0 -177
  124. package/dist/Utils/segmentation/CommToolsData.js +0 -548
  125. package/dist/Utils/segmentation/CommToolsData.js.map +0 -1
  126. package/dist/Utils/segmentation/core/MigrationUtils.d.ts +0 -97
  127. package/dist/Utils/segmentation/core/MigrationUtils.js +0 -163
  128. package/dist/Utils/segmentation/core/MigrationUtils.js.map +0 -1
  129. package/dist/Utils/segmentation/coreTools/coreType.d.ts +0 -363
  130. package/dist/Utils/segmentation/coreTools/coreType.js +0 -3
  131. package/dist/Utils/segmentation/coreTools/coreType.js.map +0 -1
  132. package/dist/types/Utils/segmentation/CommToolsData.d.ts +0 -177
  133. package/dist/types/Utils/segmentation/core/MigrationUtils.d.ts +0 -97
  134. package/dist/types/Utils/segmentation/coreTools/coreType.d.ts +0 -363
@@ -1,163 +0,0 @@
1
- /**
2
- * Migration Utilities for MaskVolume
3
- *
4
- * Provides bidirectional conversion between the legacy per-slice
5
- * ImageData storage (`IPaintImages`) and the new contiguous 3D
6
- * volumetric storage (`MaskVolume`).
7
- *
8
- * These utilities enable:
9
- * - **Forward migration**: Import existing annotation data into MaskVolume.
10
- * - **Rollback compatibility**: Export MaskVolume back to IPaintImages.
11
- *
12
- * @example
13
- * ```ts
14
- * // Forward: legacy → volume
15
- * const volume = convertIPaintImagesToVolume(paintImages, { width: 512, height: 512, depth: 100 });
16
- *
17
- * // Backward: volume → legacy
18
- * const legacy = convertVolumeToIPaintImages(volume);
19
- * ```
20
- */
21
- import { MaskVolume } from './MaskVolume';
22
- // ── Forward migration: IPaintImages → MaskVolume ────────────────────────
23
- /**
24
- * Convert legacy per-slice ImageData storage into a MaskVolume.
25
- *
26
- * The function iterates over all three axes (`x`, `y`, `z`) and inserts
27
- * each slice into the volume using `setSliceFromImageData`.
28
- *
29
- * **Sparse data handling**: Slices that are absent from the arrays are
30
- * left as zero (the MaskVolume default). Duplicate indices are
31
- * overwritten in order (last wins).
32
- *
33
- * @param paintImages Legacy per-axis slice collection.
34
- * @param dimensions Volume dimensions (must match the ImageData sizes).
35
- * @param channel Target channel in the volume (default 0).
36
- *
37
- * @returns A new MaskVolume populated with the legacy data.
38
- *
39
- * @throws {Error} If a slice's ImageData dimensions don't match the
40
- * expected size for its axis.
41
- *
42
- * @example
43
- * ```ts
44
- * const volume = convertIPaintImagesToVolume(
45
- * maskData.paintImagesLayer1,
46
- * { width: 512, height: 512, depth: 100 },
47
- * );
48
- * ```
49
- */
50
- export function convertIPaintImagesToVolume(paintImages, dimensions, channel = 0) {
51
- if (!paintImages) {
52
- throw new Error('paintImages is null or undefined');
53
- }
54
- if (dimensions.width < 1 ||
55
- dimensions.height < 1 ||
56
- dimensions.depth < 1) {
57
- throw new RangeError(`Dimensions must be ≥ 1, got (${dimensions.width}, ${dimensions.height}, ${dimensions.depth})`);
58
- }
59
- const volume = new MaskVolume(dimensions.width, dimensions.height, dimensions.depth);
60
- // Process each axis
61
- const axes = [
62
- { key: 'z', axis: 'z' },
63
- { key: 'y', axis: 'y' },
64
- { key: 'x', axis: 'x' },
65
- ];
66
- for (const { key, axis } of axes) {
67
- const slices = paintImages[key];
68
- if (!slices || !Array.isArray(slices))
69
- continue;
70
- for (const paintImage of slices) {
71
- if (!paintImage || paintImage.image == null)
72
- continue;
73
- const { index, image } = paintImage;
74
- // Validate slice index bounds
75
- const maxIndex = axis === 'x' ? dimensions.width :
76
- axis === 'y' ? dimensions.height :
77
- dimensions.depth;
78
- if (index < 0 || index >= maxIndex) {
79
- continue; // Skip out-of-bounds slices silently
80
- }
81
- volume.setSliceFromImageData(index, image, axis, channel);
82
- }
83
- }
84
- return volume;
85
- }
86
- // ── Backward migration: MaskVolume → IPaintImages ───────────────────────
87
- /**
88
- * Convert a MaskVolume back to legacy per-slice ImageData storage.
89
- *
90
- * Extracts **all** slices along the Z axis (axial) into an
91
- * `IPaintImages` structure. X and Y axes are left as empty arrays
92
- * since the legacy system can reconstruct them on demand.
93
- *
94
- * Only non-empty slices (those containing at least one non-zero pixel)
95
- * are included, matching the sparse behaviour of the original storage.
96
- *
97
- * @param volume The MaskVolume to export.
98
- * @param channel Channel to extract (default 0).
99
- * @param options Export options.
100
- * @param options.includeAllAxes If true, also export X and Y axis slices
101
- * (expensive — use only if needed for full
102
- * backward compatibility). Default: false.
103
- * @param options.includeEmpty If true, include slices that are entirely
104
- * zero. Default: false.
105
- *
106
- * @returns A legacy IPaintImages structure.
107
- *
108
- * @example
109
- * ```ts
110
- * const legacy = convertVolumeToIPaintImages(volume);
111
- * // legacy.z contains non-empty axial slices
112
- * // legacy.x and legacy.y are empty by default
113
- * ```
114
- */
115
- export function convertVolumeToIPaintImages(volume, channel = 0, options = {}) {
116
- if (!volume) {
117
- throw new Error('volume is null or undefined');
118
- }
119
- const { includeAllAxes = false, includeEmpty = false } = options;
120
- const dims = volume.getDimensions();
121
- const result = { x: [], y: [], z: [] };
122
- const renderOpts = { channel };
123
- // Always export Z axis (axial slices — most commonly used)
124
- for (let z = 0; z < dims.depth; z++) {
125
- const imageData = volume.getSliceImageData(z, 'z', renderOpts);
126
- if (includeEmpty || hasNonZeroPixels(imageData)) {
127
- result.z.push({ index: z, image: imageData });
128
- }
129
- }
130
- // Optionally export X and Y axes
131
- if (includeAllAxes) {
132
- for (let y = 0; y < dims.height; y++) {
133
- const imageData = volume.getSliceImageData(y, 'y', renderOpts);
134
- if (includeEmpty || hasNonZeroPixels(imageData)) {
135
- result.y.push({ index: y, image: imageData });
136
- }
137
- }
138
- for (let x = 0; x < dims.width; x++) {
139
- const imageData = volume.getSliceImageData(x, 'x', renderOpts);
140
- if (includeEmpty || hasNonZeroPixels(imageData)) {
141
- result.x.push({ index: x, image: imageData });
142
- }
143
- }
144
- }
145
- return result;
146
- }
147
- // ── Helpers ──────────────────────────────────────────────────────────────
148
- /**
149
- * Check whether an ImageData has any non-zero pixel data.
150
- *
151
- * Only checks the R channel (index 0 of every 4-byte group) since
152
- * MaskVolume stores grayscale values in the R channel.
153
- */
154
- function hasNonZeroPixels(imageData) {
155
- const data = imageData.data;
156
- // Check R channel of each pixel (stride 4)
157
- for (let i = 0; i < data.length; i += 4) {
158
- if (data[i] !== 0)
159
- return true;
160
- }
161
- return false;
162
- }
163
- //# sourceMappingURL=MigrationUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MigrationUtils.js","sourceRoot":"","sources":["../../../../src/Utils/segmentation/core/MigrationUtils.ts"],"names":[],"mappings":"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"}
@@ -1,363 +0,0 @@
1
- interface ICommXYZ {
2
- x: any;
3
- y: any;
4
- z: any;
5
- }
6
- interface ICommXY {
7
- x: any;
8
- y: any;
9
- }
10
- interface ISkipSlicesDictType {
11
- [key: string]: any;
12
- }
13
- interface IDownloadImageConfig {
14
- axis: "x" | "y" | "z";
15
- currentIndex: number;
16
- drawingCanvas: HTMLCanvasElement;
17
- originWidth: number;
18
- originHeight: number;
19
- }
20
- interface IConvertObjType {
21
- currentIndex: number;
22
- oldIndex: number;
23
- convertCursorNumX: number;
24
- convertCursorNumY: number;
25
- }
26
- interface IDragPrameters {
27
- move: number;
28
- y: number;
29
- h: number;
30
- sensivity: number;
31
- handleOnDragMouseUp: (ev: MouseEvent) => void;
32
- handleOnDragMouseDown: (ev: MouseEvent) => void;
33
- handleOnDragMouseMove: (ev: MouseEvent) => void;
34
- }
35
- interface IDrawingEvents {
36
- handleOnDrawingMouseDown: (ev: MouseEvent) => void;
37
- handleOnDrawingMouseMove: (ev: MouseEvent) => void;
38
- handleOnPanMouseMove: (ev: MouseEvent) => void;
39
- handleOnDrawingMouseUp: (ev: MouseEvent) => void;
40
- handleOnDrawingMouseLeave: (ev: MouseEvent) => void;
41
- handleOnDrawingBrushCricleMove: (ev: MouseEvent) => void;
42
- handleMouseZoomSliceWheel: (e: WheelEvent) => void;
43
- handleSphereWheel: (e: WheelEvent) => void;
44
- }
45
- interface IContrastEvents {
46
- move_x: number;
47
- move_y: number;
48
- x: number;
49
- y: number;
50
- w: number;
51
- h: number;
52
- handleOnContrastMouseDown: (ev: MouseEvent) => void;
53
- handleOnContrastMouseMove: (ev: MouseEvent) => void;
54
- handleOnContrastMouseUp: (ev: MouseEvent) => void;
55
- handleOnContrastMouseLeave: (ev: MouseEvent) => void;
56
- }
57
- interface IPaintImages {
58
- x: Array<IPaintImage>;
59
- y: Array<IPaintImage>;
60
- z: Array<IPaintImage>;
61
- }
62
- interface IPaintImage {
63
- index: number;
64
- image: ImageData;
65
- }
66
- /**
67
- * Import MaskVolume from core module
68
- * (imported where needed, not here to avoid circular deps)
69
- */
70
- type MaskVolume = any;
71
- /**
72
- * New mask data structure using MaskVolume for true 3D storage.
73
- * Dynamic N-layer support: keyed by layer id (e.g. 'layer1', 'layer2', ...).
74
- */
75
- type INewMaskData = Record<string, MaskVolume>;
76
- /**
77
- * A paired canvas + 2D context for a single annotation layer.
78
- * Stored atomically in IProtected.layerTargets to prevent canvas/ctx desync.
79
- */
80
- interface ILayerRenderTarget {
81
- canvas: HTMLCanvasElement;
82
- ctx: CanvasRenderingContext2D;
83
- }
84
- /**
85
- * Mask data storage using volumetric MaskVolume (Phase 3)
86
- *
87
- * Phase 2 legacy ImageData storage has been removed.
88
- * All mask data now stored in 3D volumes for memory efficiency.
89
- */
90
- type IMaskData = {
91
- volumes: INewMaskData;
92
- };
93
- interface IProtected {
94
- container: HTMLElement;
95
- mainAreaContainer: HTMLElement;
96
- allSlicesArray: Array<ICommXYZ>;
97
- displaySlices: Array<any>;
98
- backUpDisplaySlices: Array<any>;
99
- skipSlicesDic: ISkipSlicesDictType;
100
- currentShowingSlice: any;
101
- mainPreSlices: any;
102
- Is_Draw: boolean;
103
- axis: "x" | "y" | "z";
104
- maskData: IMaskData;
105
- previousDrawingImage?: ImageData;
106
- /** Dynamic per-layer canvas+ctx pairs. Replaces hardcoded LayerOne/Two/Three fields. */
107
- layerTargets: Map<string, ILayerRenderTarget>;
108
- canvases: {
109
- originCanvas: HTMLCanvasElement | any;
110
- drawingCanvas: HTMLCanvasElement;
111
- displayCanvas: HTMLCanvasElement;
112
- drawingCanvasLayerMaster: HTMLCanvasElement;
113
- drawingSphereCanvas: HTMLCanvasElement;
114
- emptyCanvas: HTMLCanvasElement;
115
- };
116
- ctxes: {
117
- displayCtx: CanvasRenderingContext2D;
118
- drawingCtx: CanvasRenderingContext2D;
119
- emptyCtx: CanvasRenderingContext2D;
120
- drawingSphereCtx: CanvasRenderingContext2D;
121
- drawingLayerMasterCtx: CanvasRenderingContext2D;
122
- };
123
- }
124
- interface IGUIStates {
125
- mainAreaSize: number;
126
- dragSensitivity: number;
127
- Eraser: boolean;
128
- globalAlpha: number;
129
- lineWidth: number;
130
- color: string;
131
- pencil: boolean;
132
- fillColor: string;
133
- brushColor: string;
134
- brushAndEraserSize: number;
135
- cursor: string;
136
- layer: string;
137
- cal_distance: "tumour" | "skin" | "nipple" | "ribcage";
138
- sphere: boolean;
139
- calculator: boolean;
140
- readyToUpdate: boolean;
141
- defaultPaintCursor: string;
142
- max_sensitive: number;
143
- clear: () => void;
144
- clearAll: () => void;
145
- undo: () => void;
146
- redo: () => void;
147
- downloadCurrentMask: () => void;
148
- resetZoom: () => void;
149
- /** Currently active channel (1-8). Channel 0 is transparent/erased. */
150
- activeChannel: number;
151
- /** Layer visibility state: { layer1: true, layer2: true, layer3: true } */
152
- layerVisibility: Record<string, boolean>;
153
- /** Per-layer channel visibility: { layer1: { 1: true, ..., 8: true }, ... } */
154
- channelVisibility: Record<string, Record<number, boolean>>;
155
- }
156
- interface IKeyBoardSettings {
157
- draw: string;
158
- undo: string;
159
- redo: string;
160
- contrast: string[];
161
- crosshair: string;
162
- mouseWheel: "Scroll:Zoom" | "Scroll:Slice";
163
- }
164
- interface INrrdStates {
165
- originWidth: number;
166
- originHeight: number;
167
- nrrd_x_mm: number;
168
- nrrd_y_mm: number;
169
- nrrd_z_mm: number;
170
- nrrd_x_pixel: number;
171
- nrrd_y_pixel: number;
172
- nrrd_z_pixel: number;
173
- changedWidth: number;
174
- changedHeight: number;
175
- oldIndex: number;
176
- currentIndex: number;
177
- maxIndex: number;
178
- minIndex: number;
179
- RSARatio: number;
180
- voxelSpacing: number[];
181
- spaceOrigin: number[];
182
- dimensions: number[];
183
- loadMaskJson: boolean;
184
- ratios: ICommXYZ;
185
- contrastNum: number;
186
- showContrast: boolean;
187
- isCursorSelect: boolean;
188
- cursorPageX: number;
189
- cursorPageY: number;
190
- sphereOrigin: ICommXYZ;
191
- tumourSphereOrigin: ICommXYZ | null;
192
- skinSphereOrigin: ICommXYZ | null;
193
- ribSphereOrigin: ICommXYZ | null;
194
- nippleSphereOrigin: ICommXYZ | null;
195
- tumourColor: "#00ff00";
196
- skinColor: "#FFEB3B";
197
- ribcageColor: "#2196F3";
198
- nippleColor: "#E91E63";
199
- spherePlanB: boolean;
200
- sphereRadius: number;
201
- Mouse_Over_x: number;
202
- Mouse_Over_y: number;
203
- Mouse_Over: boolean;
204
- stepClear: number;
205
- sizeFoctor: number;
206
- clearAllFlag: boolean;
207
- previousPanelL: number;
208
- previousPanelT: number;
209
- switchSliceFlag: boolean;
210
- layers: string[];
211
- getMask: (sliceData: Uint8Array, layerId: string, channelId: number, sliceIndex: number, axis: "x" | "y" | "z", width: number, height: number, clearFlag: boolean) => void;
212
- onClearLayerVolume: (layerId: string) => void;
213
- onChannelColorChanged: (layerId: string, channel: number, color: {
214
- r: number;
215
- g: number;
216
- b: number;
217
- a: number;
218
- }) => void;
219
- getSphere: (sphereOrigin: number[], sphereRadius: number) => void;
220
- getCalculateSpherePositions: (tumourSphereOrigin: ICommXYZ | null, skinSphereOrigin: ICommXYZ | null, ribSphereOrigin: ICommXYZ | null, nippleSphereOrigin: ICommXYZ | null, aixs: "x" | "y" | "z") => void;
221
- drawStartPos: ICommXY;
222
- }
223
- interface IDragOpts {
224
- showNumber?: boolean;
225
- getSliceNum?: (index: number, contrastNum: number) => void;
226
- }
227
- interface IDrawOpts {
228
- getMaskData?: (sliceData: Uint8Array, layerId: string, channelId: number, sliceIndex: number, axis: "x" | "y" | "z", width: number, height: number, clearFlag?: boolean) => void;
229
- onClearLayerVolume?: (layerId: string) => void;
230
- getSphereData?: (sphereOrigin: number[], sphereRadius: number) => void;
231
- getCalculateSpherePositionsData?: (tumourSphereOrigin: ICommXYZ | null, skinSphereOrigin: ICommXYZ | null, ribSphereOrigin: ICommXYZ | null, nippleSphereOrigin: ICommXYZ | null, aixs: "x" | "y" | "z") => void;
232
- }
233
- interface ICursorPage {
234
- x: {
235
- cursorPageX: number;
236
- cursorPageY: number;
237
- index: number;
238
- updated: boolean;
239
- };
240
- y: {
241
- cursorPageX: number;
242
- cursorPageY: number;
243
- index: number;
244
- updated: boolean;
245
- };
246
- z: {
247
- cursorPageX: number;
248
- cursorPageY: number;
249
- index: number;
250
- updated: boolean;
251
- };
252
- }
253
- interface IGuiParameterSettings {
254
- globalAlpha: {
255
- name: "Opacity";
256
- min: number;
257
- max: number;
258
- step: number;
259
- };
260
- pencil: {
261
- name: "Pencil";
262
- onChange: () => void;
263
- };
264
- sphere: {
265
- name: "Sphere";
266
- onChange: () => void;
267
- };
268
- brushAndEraserSize: {
269
- name: "BrushAndEraserSize";
270
- min: number;
271
- max: number;
272
- step: number;
273
- onChange: () => void;
274
- };
275
- Eraser: {
276
- name: "Eraser";
277
- onChange: () => void;
278
- };
279
- calculator: {
280
- name: "Calculator";
281
- onChange: () => void;
282
- };
283
- cal_distance: {
284
- name: "CalculatorDistance";
285
- onChange: (val: "tumour" | "skin" | "ribcage" | "nipple") => void;
286
- };
287
- clear: {
288
- name: "Clear";
289
- };
290
- clearAll: {
291
- name: "ClearAll";
292
- };
293
- undo: {
294
- name: "Undo";
295
- };
296
- redo: {
297
- name: "Redo";
298
- };
299
- resetZoom: {
300
- name: "ResetZoom";
301
- };
302
- windowHigh: {
303
- name: "ImageContrast";
304
- value: null;
305
- min: number;
306
- max: number;
307
- step: number;
308
- onChange: (value: number) => void;
309
- onFinished: () => void;
310
- };
311
- windowLow: {
312
- name: "WindowLow";
313
- value: null;
314
- min: number;
315
- max: number;
316
- step: number;
317
- onChange: (value: number) => void;
318
- onFinished: () => void;
319
- };
320
- advance: {
321
- layer: {
322
- name: "Layer";
323
- value: string[];
324
- };
325
- cursor: {
326
- name: "CursorIcon";
327
- value: ["crosshair", "pencil", "dot"];
328
- };
329
- mainAreaSize: {
330
- name: "Zoom";
331
- min: number;
332
- max: number;
333
- step: number;
334
- onFinished: null;
335
- };
336
- dragSensitivity: {
337
- name: "DragSensitivity";
338
- min: number;
339
- max: number;
340
- step: number;
341
- };
342
- pencilSettings: {
343
- lineWidth: {
344
- name: "OuterLineWidth";
345
- min: number;
346
- max: number;
347
- step: number;
348
- };
349
- color: {
350
- name: "Color";
351
- };
352
- fillColor: {
353
- name: "FillColor";
354
- };
355
- };
356
- BrushSettings: {
357
- brushColor: {
358
- name: "BrushColor";
359
- };
360
- };
361
- };
362
- }
363
- export { ICommXYZ, ICommXY, IDownloadImageConfig, IConvertObjType, IDragPrameters, IDrawingEvents, IContrastEvents, IProtected, IGUIStates, IDragOpts, IDrawOpts, INrrdStates, IPaintImage, IPaintImages, ISkipSlicesDictType, IMaskData, INewMaskData, ILayerRenderTarget, ICursorPage, IGuiParameterSettings, IKeyBoardSettings };
@@ -1,3 +0,0 @@
1
- ;
2
- export {};
3
- //# sourceMappingURL=coreType.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coreType.js","sourceRoot":"","sources":["../../../../src/Utils/segmentation/coreTools/coreType.ts"],"names":[],"mappings":"AAkZC,CAAC"}