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,177 +0,0 @@
1
- import { IProtected, IGUIStates, INrrdStates, ICursorPage, IConvertObjType, INewMaskData, IKeyBoardSettings } from "./coreTools/coreType";
2
- import { MaskVolume } from "./core/index";
3
- export declare class CommToolsData {
4
- baseCanvasesSize: number;
5
- private _reusableSliceBuffer;
6
- private _reusableBufferWidth;
7
- private _reusableBufferHeight;
8
- /** Whether the keyboard-config dialog is open (suppresses all shortcuts). */
9
- protected _configKeyBoard: boolean;
10
- /** Active keyboard shortcut bindings. */
11
- protected _keyboardSettings: IKeyBoardSettings;
12
- nrrd_states: INrrdStates;
13
- cursorPage: ICursorPage;
14
- gui_states: IGUIStates;
15
- protectedData: IProtected;
16
- constructor(container: HTMLElement, mainAreaContainer: HTMLElement, options?: {
17
- layers?: string[];
18
- });
19
- /**
20
- * Get MaskVolume for a specific layer
21
- *
22
- * @param layer - Layer name: "layer1", "layer2", or "layer3"
23
- * @returns MaskVolume instance for the specified layer
24
- *
25
- * @example
26
- * ```ts
27
- * const volume = this.getVolumeForLayer("layer1");
28
- * volume.setVoxel(x, y, z, 255);
29
- * ```
30
- */
31
- getVolumeForLayer(layer: string): MaskVolume;
32
- /**
33
- * Get MaskVolume for the currently active layer
34
- *
35
- * @returns MaskVolume instance for the current layer
36
- *
37
- * @example
38
- * ```ts
39
- * const volume = this.getCurrentVolume();
40
- * const slice = volume.getSliceImageData(50, 'z');
41
- * ```
42
- */
43
- getCurrentVolume(): MaskVolume;
44
- /**
45
- * Get all three MaskVolume instances
46
- *
47
- * @returns Object containing all three layer volumes
48
- *
49
- * @example
50
- * ```ts
51
- * const { layer1, layer2, layer3 } = this.getAllVolumes();
52
- * layer1.clear();
53
- * ```
54
- */
55
- getAllVolumes(): INewMaskData;
56
- private generateSystemCanvases;
57
- private generateLayerTargets;
58
- /**
59
- * Rewrite this {clearPaint} function under DrawToolCore
60
- */
61
- clearPaint(): void;
62
- /**
63
- * Rewrite this {undoLastPainting} function under DrawToolCore
64
- */
65
- undoLastPainting(): void;
66
- /**
67
- * Rewrite this {redoLastPainting} function under DrawToolCore
68
- */
69
- redoLastPainting(): void;
70
- /**
71
- * Rewrite this {clearStoreImages} function under NrrdTools
72
- */
73
- clearStoreImages(): void;
74
- /**
75
- * Rewrite this {resizePaintArea} function under NrrdTools
76
- */
77
- resizePaintArea(factor: number): void;
78
- /**
79
- * Rewrite this {setIsDrawFalse} function under NrrdTools
80
- */
81
- setIsDrawFalse(target: number): void;
82
- /**
83
- * Rewrite this {updateOriginAndChangedWH} function under NrrdTools
84
- */
85
- updateOriginAndChangedWH(): void;
86
- /**
87
- * Rewrite this {flipDisplayImageByAxis} function under NrrdTools
88
- */
89
- flipDisplayImageByAxis(): void;
90
- /**
91
- * Rewrite this {resetPaintAreaUIPosition} function under NrrdTools
92
- */
93
- resetPaintAreaUIPosition(l?: number, t?: number): void;
94
- /**
95
- * Rewrite this {resetPaintAreaUIPosition} function under NrrdTools
96
- */
97
- setEmptyCanvasSize(axis?: "x" | "y" | "z"): void;
98
- /**
99
- * Rewrite this {convertCursorPoint} function under NrrdTools
100
- */
101
- convertCursorPoint(from: "x" | "y" | "z", to: "x" | "y" | "z", cursorNumX: number, cursorNumY: number, currentSliceIndex: number): IConvertObjType | undefined;
102
- /**
103
- * Rewrite this {resetLayerCanvas} function under NrrdTools
104
- */
105
- resetLayerCanvas(): void;
106
- /**
107
- * Rewrite this {setSyncsliceNum} function under NrrdTools
108
- */
109
- setSyncsliceNum(): void;
110
- /**
111
- * Rewrite this {redrawDisplayCanvas} function under NrrdTools
112
- */
113
- redrawDisplayCanvas(): void;
114
- /**
115
- * Get a painted mask image based on current axis and input slice index.
116
- *
117
- * Phase 3: Reads directly from MaskVolume.
118
- *
119
- * @param axis "x" | "y" | "z"
120
- * @param sliceIndex number
121
- * @returns Object with index and image, or undefined
122
- */
123
- filterDrawedImage(axis: "x" | "y" | "z", sliceIndex: number): {
124
- index: number;
125
- image: ImageData;
126
- } | undefined;
127
- /**
128
- * Get or create a reusable ImageData buffer for the given axis.
129
- *
130
- * Reuses the same buffer across multiple slice renders to avoid
131
- * allocating a new ImageData per layer per slice switch.
132
- * The buffer is only reallocated when slice dimensions change (axis switch).
133
- *
134
- * @param axis - Axis: "x", "y", or "z"
135
- * @returns Reusable ImageData buffer with correct dimensions
136
- */
137
- getOrCreateSliceBuffer(axis: "x" | "y" | "z"): ImageData | null;
138
- /**
139
- * Render a layer's slice into a reusable buffer and draw to the target canvas.
140
- *
141
- * Uses MaskVolume.renderLabelSliceInto() for zero-allocation rendering.
142
- * The caller should obtain the buffer via getOrCreateSliceBuffer() and reuse
143
- * it across multiple layer renders.
144
- *
145
- * @param layer - Layer name: "layer1", "layer2", or "layer3"
146
- * @param axis - Axis: "x", "y", or "z"
147
- * @param sliceIndex - Slice index
148
- * @param buffer - Reusable ImageData buffer (from getOrCreateSliceBuffer)
149
- * @param targetCtx - Canvas context to draw the result onto
150
- * @param scaledWidth - Target display width
151
- * @param scaledHeight - Target display height
152
- */
153
- renderSliceToCanvas(layer: string, axis: "x" | "y" | "z", sliceIndex: number, buffer: ImageData, targetCtx: CanvasRenderingContext2D, scaledWidth: number, scaledHeight: number): void;
154
- /**
155
- * Invalidate the reusable buffer (e.g. when switching datasets).
156
- * The buffer will be lazily recreated on next use.
157
- */
158
- invalidateSliceBuffer(): void;
159
- /**
160
- * Apply the same flip transform used by flipDisplayImageByAxis() to any
161
- * canvas context. This ensures mask overlays align with the flipped CT image.
162
- *
163
- * The flip is its own inverse (applying twice = identity), so it works for
164
- * both directions: volume→display (rendering) and display→volume (storing).
165
- *
166
- * @param ctx Target 2D context (must be wrapped in save/restore by caller).
167
- * @param width Canvas width in pixels.
168
- * @param height Canvas height in pixels.
169
- * @param axis Current viewing axis.
170
- */
171
- applyMaskFlipForAxis(ctx: CanvasRenderingContext2D, width: number, height: number, axis: "x" | "y" | "z"): void;
172
- /**
173
- * Composite all layer canvases to the master display canvas.
174
- * Only draws layers whose visibility is enabled.
175
- */
176
- compositeAllLayers(): void;
177
- }
@@ -1,97 +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 type { Dimensions } from './types';
22
- import { MaskVolume } from './MaskVolume';
23
- /**
24
- * A single painted slice (legacy format).
25
- */
26
- export interface IPaintImage {
27
- index: number;
28
- image: ImageData;
29
- }
30
- /**
31
- * Per-axis collection of painted slices (legacy format).
32
- */
33
- export interface IPaintImages {
34
- x: IPaintImage[];
35
- y: IPaintImage[];
36
- z: IPaintImage[];
37
- }
38
- /**
39
- * Convert legacy per-slice ImageData storage into a MaskVolume.
40
- *
41
- * The function iterates over all three axes (`x`, `y`, `z`) and inserts
42
- * each slice into the volume using `setSliceFromImageData`.
43
- *
44
- * **Sparse data handling**: Slices that are absent from the arrays are
45
- * left as zero (the MaskVolume default). Duplicate indices are
46
- * overwritten in order (last wins).
47
- *
48
- * @param paintImages Legacy per-axis slice collection.
49
- * @param dimensions Volume dimensions (must match the ImageData sizes).
50
- * @param channel Target channel in the volume (default 0).
51
- *
52
- * @returns A new MaskVolume populated with the legacy data.
53
- *
54
- * @throws {Error} If a slice's ImageData dimensions don't match the
55
- * expected size for its axis.
56
- *
57
- * @example
58
- * ```ts
59
- * const volume = convertIPaintImagesToVolume(
60
- * maskData.paintImagesLayer1,
61
- * { width: 512, height: 512, depth: 100 },
62
- * );
63
- * ```
64
- */
65
- export declare function convertIPaintImagesToVolume(paintImages: IPaintImages, dimensions: Dimensions, channel?: number): MaskVolume;
66
- /**
67
- * Convert a MaskVolume back to legacy per-slice ImageData storage.
68
- *
69
- * Extracts **all** slices along the Z axis (axial) into an
70
- * `IPaintImages` structure. X and Y axes are left as empty arrays
71
- * since the legacy system can reconstruct them on demand.
72
- *
73
- * Only non-empty slices (those containing at least one non-zero pixel)
74
- * are included, matching the sparse behaviour of the original storage.
75
- *
76
- * @param volume The MaskVolume to export.
77
- * @param channel Channel to extract (default 0).
78
- * @param options Export options.
79
- * @param options.includeAllAxes If true, also export X and Y axis slices
80
- * (expensive — use only if needed for full
81
- * backward compatibility). Default: false.
82
- * @param options.includeEmpty If true, include slices that are entirely
83
- * zero. Default: false.
84
- *
85
- * @returns A legacy IPaintImages structure.
86
- *
87
- * @example
88
- * ```ts
89
- * const legacy = convertVolumeToIPaintImages(volume);
90
- * // legacy.z contains non-empty axial slices
91
- * // legacy.x and legacy.y are empty by default
92
- * ```
93
- */
94
- export declare function convertVolumeToIPaintImages(volume: MaskVolume, channel?: number, options?: {
95
- includeAllAxes?: boolean;
96
- includeEmpty?: boolean;
97
- }): IPaintImages;
@@ -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 };