copper3d 2.2.3 → 3.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 (111) hide show
  1. package/README.md +1056 -5
  2. package/dist/Scene/copperScene.d.ts +3 -0
  3. package/dist/Scene/copperScene.js +13 -0
  4. package/dist/Scene/copperScene.js.map +1 -1
  5. package/dist/Utils/segmentation/CommToolsData.d.ts +109 -6
  6. package/dist/Utils/segmentation/CommToolsData.js +314 -50
  7. package/dist/Utils/segmentation/CommToolsData.js.map +1 -1
  8. package/dist/Utils/segmentation/DragOperator.d.ts +13 -7
  9. package/dist/Utils/segmentation/DragOperator.js +51 -165
  10. package/dist/Utils/segmentation/DragOperator.js.map +1 -1
  11. package/dist/Utils/segmentation/DrawToolCore.d.ts +57 -76
  12. package/dist/Utils/segmentation/DrawToolCore.js +368 -878
  13. package/dist/Utils/segmentation/DrawToolCore.js.map +1 -1
  14. package/dist/Utils/segmentation/NrrdTools.d.ts +277 -15
  15. package/dist/Utils/segmentation/NrrdTools.js +594 -232
  16. package/dist/Utils/segmentation/NrrdTools.js.map +1 -1
  17. package/dist/Utils/segmentation/core/MaskVolume.d.ts +477 -0
  18. package/dist/Utils/segmentation/core/MaskVolume.js +1238 -0
  19. package/dist/Utils/segmentation/core/MaskVolume.js.map +1 -0
  20. package/dist/Utils/segmentation/core/MigrationUtils.d.ts +97 -0
  21. package/dist/Utils/segmentation/core/MigrationUtils.js +163 -0
  22. package/dist/Utils/segmentation/core/MigrationUtils.js.map +1 -0
  23. package/dist/Utils/segmentation/core/UndoManager.d.ts +47 -0
  24. package/dist/Utils/segmentation/core/UndoManager.js +86 -0
  25. package/dist/Utils/segmentation/core/UndoManager.js.map +1 -0
  26. package/dist/Utils/segmentation/core/index.d.ts +76 -0
  27. package/dist/Utils/segmentation/core/index.js +75 -0
  28. package/dist/Utils/segmentation/core/index.js.map +1 -0
  29. package/dist/Utils/segmentation/core/types.d.ts +106 -0
  30. package/dist/Utils/segmentation/core/types.js +98 -0
  31. package/dist/Utils/segmentation/core/types.js.map +1 -0
  32. package/dist/Utils/segmentation/coreTools/coreType.d.ts +55 -36
  33. package/dist/Utils/segmentation/coreTools/coreType.js.map +1 -1
  34. package/dist/Utils/segmentation/coreTools/gui.d.ts +6 -16
  35. package/dist/Utils/segmentation/coreTools/gui.js +23 -27
  36. package/dist/Utils/segmentation/coreTools/gui.js.map +1 -1
  37. package/dist/Utils/segmentation/eventRouter/EventRouter.d.ts +144 -0
  38. package/dist/Utils/segmentation/eventRouter/EventRouter.js +369 -0
  39. package/dist/Utils/segmentation/eventRouter/EventRouter.js.map +1 -0
  40. package/dist/Utils/segmentation/eventRouter/index.d.ts +7 -0
  41. package/dist/Utils/segmentation/eventRouter/index.js +7 -0
  42. package/dist/Utils/segmentation/eventRouter/index.js.map +1 -0
  43. package/dist/Utils/segmentation/eventRouter/types.d.ts +70 -0
  44. package/dist/Utils/segmentation/eventRouter/types.js +7 -0
  45. package/dist/Utils/segmentation/eventRouter/types.js.map +1 -0
  46. package/dist/Utils/segmentation/tools/BaseTool.d.ts +25 -0
  47. package/dist/Utils/segmentation/tools/BaseTool.js +18 -0
  48. package/dist/Utils/segmentation/tools/BaseTool.js.map +1 -0
  49. package/dist/Utils/segmentation/tools/ContrastTool.d.ts +26 -0
  50. package/dist/Utils/segmentation/tools/ContrastTool.js +118 -0
  51. package/dist/Utils/segmentation/tools/ContrastTool.js.map +1 -0
  52. package/dist/Utils/segmentation/tools/CrosshairTool.d.ts +30 -0
  53. package/dist/Utils/segmentation/tools/CrosshairTool.js +157 -0
  54. package/dist/Utils/segmentation/tools/CrosshairTool.js.map +1 -0
  55. package/dist/Utils/segmentation/tools/DragSliceTool.d.ts +44 -0
  56. package/dist/Utils/segmentation/tools/DragSliceTool.js +170 -0
  57. package/dist/Utils/segmentation/tools/DragSliceTool.js.map +1 -0
  58. package/dist/Utils/segmentation/tools/EraserTool.d.ts +16 -0
  59. package/dist/Utils/segmentation/tools/EraserTool.js +92 -0
  60. package/dist/Utils/segmentation/tools/EraserTool.js.map +1 -0
  61. package/dist/Utils/segmentation/tools/ImageStoreHelper.d.ts +65 -0
  62. package/dist/Utils/segmentation/tools/ImageStoreHelper.js +174 -0
  63. package/dist/Utils/segmentation/tools/ImageStoreHelper.js.map +1 -0
  64. package/dist/Utils/segmentation/tools/SphereTool.d.ts +38 -0
  65. package/dist/Utils/segmentation/tools/SphereTool.js +193 -0
  66. package/dist/Utils/segmentation/tools/SphereTool.js.map +1 -0
  67. package/dist/Utils/segmentation/tools/ZoomTool.d.ts +20 -0
  68. package/dist/Utils/segmentation/tools/ZoomTool.js +59 -0
  69. package/dist/Utils/segmentation/tools/ZoomTool.js.map +1 -0
  70. package/dist/Utils/segmentation/tools/index.d.ts +22 -0
  71. package/dist/Utils/segmentation/tools/index.js +23 -0
  72. package/dist/Utils/segmentation/tools/index.js.map +1 -0
  73. package/dist/bundle.esm.js +4740 -1979
  74. package/dist/bundle.umd.js +4743 -1978
  75. package/dist/index.d.ts +5 -3
  76. package/dist/index.js +4 -2
  77. package/dist/index.js.map +1 -1
  78. package/dist/types/Renderer/copperRenderer.d.ts +1 -1
  79. package/dist/types/Renderer/copperRendererOnDemond.d.ts +1 -1
  80. package/dist/types/Scene/copperScene.d.ts +3 -0
  81. package/dist/types/Utils/segmentation/CommToolsData.d.ts +109 -6
  82. package/dist/types/Utils/segmentation/DragOperator.d.ts +13 -7
  83. package/dist/types/Utils/segmentation/DrawToolCore.d.ts +57 -76
  84. package/dist/types/Utils/segmentation/NrrdTools.d.ts +277 -15
  85. package/dist/types/Utils/segmentation/core/MaskVolume.d.ts +477 -0
  86. package/dist/types/Utils/segmentation/core/MigrationUtils.d.ts +97 -0
  87. package/dist/types/Utils/segmentation/core/UndoManager.d.ts +47 -0
  88. package/dist/types/Utils/segmentation/core/index.d.ts +76 -0
  89. package/dist/types/Utils/segmentation/core/types.d.ts +106 -0
  90. package/dist/types/Utils/segmentation/coreTools/coreType.d.ts +55 -36
  91. package/dist/types/Utils/segmentation/coreTools/gui.d.ts +6 -16
  92. package/dist/types/Utils/segmentation/eventRouter/EventRouter.d.ts +144 -0
  93. package/dist/types/Utils/segmentation/eventRouter/index.d.ts +7 -0
  94. package/dist/types/Utils/segmentation/eventRouter/types.d.ts +70 -0
  95. package/dist/types/Utils/segmentation/tools/BaseTool.d.ts +25 -0
  96. package/dist/types/Utils/segmentation/tools/ContrastTool.d.ts +26 -0
  97. package/dist/types/Utils/segmentation/tools/CrosshairTool.d.ts +30 -0
  98. package/dist/types/Utils/segmentation/tools/DragSliceTool.d.ts +44 -0
  99. package/dist/types/Utils/segmentation/tools/EraserTool.d.ts +16 -0
  100. package/dist/types/Utils/segmentation/tools/ImageStoreHelper.d.ts +65 -0
  101. package/dist/types/Utils/segmentation/tools/SphereTool.d.ts +38 -0
  102. package/dist/types/Utils/segmentation/tools/ZoomTool.d.ts +20 -0
  103. package/dist/types/Utils/segmentation/tools/index.d.ts +22 -0
  104. package/dist/types/index.d.ts +5 -3
  105. package/dist/types/types/types.d.ts +3 -3
  106. package/dist/types/types.d.ts +3 -3
  107. package/package.json +1 -1
  108. package/dist/Utils/segmentation/coreTools/archive.d.ts +0 -1
  109. package/dist/Utils/segmentation/coreTools/archive.js +0 -23
  110. package/dist/Utils/segmentation/coreTools/archive.js.map +0 -1
  111. package/dist/types/Utils/segmentation/coreTools/archive.d.ts +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MaskVolume.js","sourceRoot":"","sources":["../../../../src/Utils/segmentation/core/MaskVolume.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
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;
@@ -0,0 +1,163 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MigrationUtils.js","sourceRoot":"","sources":["../../../../src/Utils/segmentation/core/MigrationUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * UndoManager — Per-Layer Slice-Snapshot Undo/Redo
3
+ *
4
+ * Phase 6: Replaces the old HTMLImageElement-based undo system.
5
+ *
6
+ * Design:
7
+ * - Each layer has an independent undo and redo stack.
8
+ * - Each entry (MaskDelta) stores a full 2D slice snapshot before and after
9
+ * the operation (cheaper than full volume, sufficient for single-stroke ops).
10
+ * - maxStackSize: 50 entries per layer.
11
+ * - Undo/redo operations also trigger backend sync via getMask callback.
12
+ */
13
+ export interface MaskDelta {
14
+ layerId: string;
15
+ axis: "x" | "y" | "z";
16
+ sliceIndex: number;
17
+ /** Full slice data captured before the drawing operation. */
18
+ oldSlice: Uint8Array;
19
+ /** Full slice data captured after the drawing operation. */
20
+ newSlice: Uint8Array;
21
+ }
22
+ export declare class UndoManager {
23
+ private undoStacks;
24
+ private redoStacks;
25
+ private activeLayer;
26
+ constructor();
27
+ /** Set the currently active layer (determines which stack undo/redo operates on). */
28
+ setActiveLayer(layer: string): void;
29
+ /** Push a delta onto the active layer's undo stack and clear the redo stack. */
30
+ push(delta: MaskDelta): void;
31
+ /**
32
+ * Undo the last operation on the active layer.
33
+ * @returns The delta that was undone, or undefined if nothing to undo.
34
+ */
35
+ undo(): MaskDelta | undefined;
36
+ /**
37
+ * Redo the last undone operation on the active layer.
38
+ * @returns The delta that was redone, or undefined if nothing to redo.
39
+ */
40
+ redo(): MaskDelta | undefined;
41
+ canUndo(): boolean;
42
+ canRedo(): boolean;
43
+ /** Clear undo and redo stacks for a specific layer (called on clearStoreImages). */
44
+ clearLayer(layer: string): void;
45
+ /** Clear all stacks for all layers (called on full dataset reload). */
46
+ clearAll(): void;
47
+ }
@@ -0,0 +1,86 @@
1
+ /**
2
+ * UndoManager — Per-Layer Slice-Snapshot Undo/Redo
3
+ *
4
+ * Phase 6: Replaces the old HTMLImageElement-based undo system.
5
+ *
6
+ * Design:
7
+ * - Each layer has an independent undo and redo stack.
8
+ * - Each entry (MaskDelta) stores a full 2D slice snapshot before and after
9
+ * the operation (cheaper than full volume, sufficient for single-stroke ops).
10
+ * - maxStackSize: 50 entries per layer.
11
+ * - Undo/redo operations also trigger backend sync via getMask callback.
12
+ */
13
+ const MAX_STACK_SIZE = 50;
14
+ const LAYER_IDS = ["layer1", "layer2", "layer3"];
15
+ export class UndoManager {
16
+ constructor() {
17
+ this.activeLayer = "layer1";
18
+ this.undoStacks = new Map(LAYER_IDS.map((id) => [id, []]));
19
+ this.redoStacks = new Map(LAYER_IDS.map((id) => [id, []]));
20
+ }
21
+ /** Set the currently active layer (determines which stack undo/redo operates on). */
22
+ setActiveLayer(layer) {
23
+ this.activeLayer = layer;
24
+ }
25
+ /** Push a delta onto the active layer's undo stack and clear the redo stack. */
26
+ push(delta) {
27
+ var _a, _b;
28
+ const stack = (_a = this.undoStacks.get(delta.layerId)) !== null && _a !== void 0 ? _a : this.undoStacks.get("layer1");
29
+ stack.push(delta);
30
+ if (stack.length > MAX_STACK_SIZE) {
31
+ stack.shift();
32
+ }
33
+ // Any new operation invalidates the redo history for that layer
34
+ const redoStack = (_b = this.redoStacks.get(delta.layerId)) !== null && _b !== void 0 ? _b : this.redoStacks.get("layer1");
35
+ redoStack.length = 0;
36
+ }
37
+ /**
38
+ * Undo the last operation on the active layer.
39
+ * @returns The delta that was undone, or undefined if nothing to undo.
40
+ */
41
+ undo() {
42
+ const stack = this.undoStacks.get(this.activeLayer);
43
+ const delta = stack.pop();
44
+ if (delta) {
45
+ this.redoStacks.get(this.activeLayer).push(delta);
46
+ }
47
+ return delta;
48
+ }
49
+ /**
50
+ * Redo the last undone operation on the active layer.
51
+ * @returns The delta that was redone, or undefined if nothing to redo.
52
+ */
53
+ redo() {
54
+ const stack = this.redoStacks.get(this.activeLayer);
55
+ const delta = stack.pop();
56
+ if (delta) {
57
+ this.undoStacks.get(this.activeLayer).push(delta);
58
+ }
59
+ return delta;
60
+ }
61
+ canUndo() {
62
+ var _a, _b;
63
+ return ((_b = (_a = this.undoStacks.get(this.activeLayer)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0;
64
+ }
65
+ canRedo() {
66
+ var _a, _b;
67
+ return ((_b = (_a = this.redoStacks.get(this.activeLayer)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0;
68
+ }
69
+ /** Clear undo and redo stacks for a specific layer (called on clearStoreImages). */
70
+ clearLayer(layer) {
71
+ const undo = this.undoStacks.get(layer);
72
+ const redo = this.redoStacks.get(layer);
73
+ if (undo)
74
+ undo.length = 0;
75
+ if (redo)
76
+ redo.length = 0;
77
+ }
78
+ /** Clear all stacks for all layers (called on full dataset reload). */
79
+ clearAll() {
80
+ for (const id of LAYER_IDS) {
81
+ this.undoStacks.get(id).length = 0;
82
+ this.redoStacks.get(id).length = 0;
83
+ }
84
+ }
85
+ }
86
+ //# sourceMappingURL=UndoManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UndoManager.js","sourceRoot":"","sources":["../../../../src/Utils/segmentation/core/UndoManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @module segmentation/core
3
+ *
4
+ * Core 3D Volumetric Mask Storage System
5
+ *
6
+ * This module provides a memory-efficient 3D mask storage solution for medical
7
+ * image annotation, replacing the legacy per-slice ImageData approach with a
8
+ * single contiguous {@link MaskVolume} backed by a `Uint8Array`.
9
+ *
10
+ * ## Architecture
11
+ *
12
+ * ```
13
+ * core/
14
+ * ├── types.ts — Shared type definitions (Dimensions, RenderMode, colors)
15
+ * ├── MaskVolume.ts — Core volume class (storage, access, rendering)
16
+ * ├── MigrationUtils.ts — Legacy ↔ Volume bidirectional conversion
17
+ * └── index.ts — Public API barrel export (this file)
18
+ * ```
19
+ *
20
+ * ## Memory Layout
21
+ *
22
+ * The backing buffer uses **slice-major** order: `[z][y][x][channel]`.
23
+ *
24
+ * ```
25
+ * index = z * (width × height × channels)
26
+ * + y * (width × channels)
27
+ * + x * channels
28
+ * + channel
29
+ * ```
30
+ *
31
+ * For a 512×512×100 single-channel volume this allocates ~25 MB,
32
+ * compared to ~100 MB for ImageData-per-slice (Z only) or ~524 MB
33
+ * for all three axes.
34
+ *
35
+ * ## Quick Start
36
+ *
37
+ * ```ts
38
+ * import { MaskVolume, RenderMode } from './core';
39
+ *
40
+ * // Create a volume matching the NRRD dimensions
41
+ * const vol = new MaskVolume(512, 512, 100);
42
+ *
43
+ * // Paint a voxel
44
+ * vol.setVoxel(256, 256, 50, 255);
45
+ *
46
+ * // Extract a slice for Canvas rendering
47
+ * const slice = vol.getSliceImageData(50, 'z');
48
+ * ctx.putImageData(slice, 0, 0);
49
+ *
50
+ * // Colored rendering
51
+ * const colored = vol.getSliceImageData(50, 'z', {
52
+ * mode: RenderMode.COLORED_SINGLE,
53
+ * channel: 0,
54
+ * opacity: 0.6,
55
+ * });
56
+ * ```
57
+ *
58
+ * ## Migration from Legacy Storage
59
+ *
60
+ * ```ts
61
+ * import { convertIPaintImagesToVolume, convertVolumeToIPaintImages } from './core';
62
+ *
63
+ * // Forward: legacy IPaintImages → MaskVolume
64
+ * const volume = convertIPaintImagesToVolume(paintImages, { width: 512, height: 512, depth: 100 });
65
+ *
66
+ * // Backward: MaskVolume → legacy IPaintImages (for rollback)
67
+ * const legacy = convertVolumeToIPaintImages(volume);
68
+ * ```
69
+ */
70
+ export type { Dimensions, RGBAColor, ChannelColorMap, SliceRenderOptions, LayerId, ChannelValue, } from './types';
71
+ export { RenderMode, MASK_CHANNEL_COLORS, MASK_CHANNEL_CSS_COLORS, CHANNEL_COLORS, CHANNEL_HEX_COLORS, rgbaToHex, rgbaToCss, } from './types';
72
+ export { MaskVolume } from './MaskVolume';
73
+ export type { IPaintImage, IPaintImages } from './MigrationUtils';
74
+ export { convertIPaintImagesToVolume, convertVolumeToIPaintImages, } from './MigrationUtils';
75
+ export type { MaskDelta } from './UndoManager';
76
+ export { UndoManager } from './UndoManager';
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @module segmentation/core
3
+ *
4
+ * Core 3D Volumetric Mask Storage System
5
+ *
6
+ * This module provides a memory-efficient 3D mask storage solution for medical
7
+ * image annotation, replacing the legacy per-slice ImageData approach with a
8
+ * single contiguous {@link MaskVolume} backed by a `Uint8Array`.
9
+ *
10
+ * ## Architecture
11
+ *
12
+ * ```
13
+ * core/
14
+ * ├── types.ts — Shared type definitions (Dimensions, RenderMode, colors)
15
+ * ├── MaskVolume.ts — Core volume class (storage, access, rendering)
16
+ * ├── MigrationUtils.ts — Legacy ↔ Volume bidirectional conversion
17
+ * └── index.ts — Public API barrel export (this file)
18
+ * ```
19
+ *
20
+ * ## Memory Layout
21
+ *
22
+ * The backing buffer uses **slice-major** order: `[z][y][x][channel]`.
23
+ *
24
+ * ```
25
+ * index = z * (width × height × channels)
26
+ * + y * (width × channels)
27
+ * + x * channels
28
+ * + channel
29
+ * ```
30
+ *
31
+ * For a 512×512×100 single-channel volume this allocates ~25 MB,
32
+ * compared to ~100 MB for ImageData-per-slice (Z only) or ~524 MB
33
+ * for all three axes.
34
+ *
35
+ * ## Quick Start
36
+ *
37
+ * ```ts
38
+ * import { MaskVolume, RenderMode } from './core';
39
+ *
40
+ * // Create a volume matching the NRRD dimensions
41
+ * const vol = new MaskVolume(512, 512, 100);
42
+ *
43
+ * // Paint a voxel
44
+ * vol.setVoxel(256, 256, 50, 255);
45
+ *
46
+ * // Extract a slice for Canvas rendering
47
+ * const slice = vol.getSliceImageData(50, 'z');
48
+ * ctx.putImageData(slice, 0, 0);
49
+ *
50
+ * // Colored rendering
51
+ * const colored = vol.getSliceImageData(50, 'z', {
52
+ * mode: RenderMode.COLORED_SINGLE,
53
+ * channel: 0,
54
+ * opacity: 0.6,
55
+ * });
56
+ * ```
57
+ *
58
+ * ## Migration from Legacy Storage
59
+ *
60
+ * ```ts
61
+ * import { convertIPaintImagesToVolume, convertVolumeToIPaintImages } from './core';
62
+ *
63
+ * // Forward: legacy IPaintImages → MaskVolume
64
+ * const volume = convertIPaintImagesToVolume(paintImages, { width: 512, height: 512, depth: 100 });
65
+ *
66
+ * // Backward: MaskVolume → legacy IPaintImages (for rollback)
67
+ * const legacy = convertVolumeToIPaintImages(volume);
68
+ * ```
69
+ */
70
+ export { RenderMode, MASK_CHANNEL_COLORS, MASK_CHANNEL_CSS_COLORS, CHANNEL_COLORS, CHANNEL_HEX_COLORS, rgbaToHex, rgbaToCss, } from './types';
71
+ // ── Core volume ────────────────────────────────────────────────────────────
72
+ export { MaskVolume } from './MaskVolume';
73
+ export { convertIPaintImagesToVolume, convertVolumeToIPaintImages, } from './MigrationUtils';
74
+ export { UndoManager } from './UndoManager';
75
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Utils/segmentation/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAYH,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,SAAS,GACV,MAAM,SAAS,CAAC;AAEjB,8EAA8E;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK1C,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}