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
@@ -0,0 +1,31 @@
1
+ import { IProtected, ICursorPage, IKeyBoardSettings, IAnnotationCallbacks } from "./core/types";
2
+ import { NrrdState } from "./coreTools/NrrdState";
3
+ import { GuiState } from "./coreTools/GuiState";
4
+ /**
5
+ * CanvasState — Pure state container.
6
+ *
7
+ * Holds all shared mutable state that was previously scattered across the
8
+ * CommToolsData base class. No rendering logic lives here; rendering is
9
+ * handled by {@link RenderingUtils}.
10
+ *
11
+ * Created once by NrrdTools and shared (by reference) with DrawToolCore,
12
+ * RenderingUtils, DragOperator, and all legacy Tool instances.
13
+ */
14
+ export declare class CanvasState {
15
+ baseCanvasesSize: number;
16
+ /** External annotation callbacks — set via draw() options */
17
+ annotationCallbacks: IAnnotationCallbacks;
18
+ /** Whether the keyboard-config dialog is open (suppresses all shortcuts). */
19
+ configKeyBoard: boolean;
20
+ /** Active keyboard shortcut bindings. */
21
+ keyboardSettings: IKeyBoardSettings;
22
+ nrrd_states: NrrdState;
23
+ gui_states: GuiState;
24
+ protectedData: IProtected;
25
+ cursorPage: ICursorPage;
26
+ constructor(container: HTMLElement, mainAreaContainer: HTMLElement, options?: {
27
+ layers?: string[];
28
+ });
29
+ private generateSystemCanvases;
30
+ private generateLayerTargets;
31
+ }
@@ -0,0 +1,167 @@
1
+ import { NrrdState } from "./coreTools/NrrdState";
2
+ import { GuiState } from "./coreTools/GuiState";
3
+ import { MaskVolume } from "./core/index";
4
+ import { switchPencilIcon } from "../utils";
5
+ import { CHANNEL_HEX_COLORS } from "./core/types";
6
+ /**
7
+ * CanvasState — Pure state container.
8
+ *
9
+ * Holds all shared mutable state that was previously scattered across the
10
+ * CommToolsData base class. No rendering logic lives here; rendering is
11
+ * handled by {@link RenderingUtils}.
12
+ *
13
+ * Created once by NrrdTools and shared (by reference) with DrawToolCore,
14
+ * RenderingUtils, DragOperator, and all legacy Tool instances.
15
+ */
16
+ export class CanvasState {
17
+ constructor(container, mainAreaContainer, options) {
18
+ var _a;
19
+ this.baseCanvasesSize = 1;
20
+ /** External annotation callbacks — set via draw() options */
21
+ this.annotationCallbacks = {
22
+ onMaskChanged: () => { },
23
+ onSphereChanged: () => { },
24
+ onCalculatorPositionsChanged: () => { },
25
+ onLayerVolumeCleared: () => { },
26
+ onChannelColorChanged: () => { },
27
+ };
28
+ /** Whether the keyboard-config dialog is open (suppresses all shortcuts). */
29
+ this.configKeyBoard = false;
30
+ /** Active keyboard shortcut bindings. */
31
+ this.keyboardSettings = {
32
+ draw: "Shift",
33
+ undo: "z",
34
+ redo: "y",
35
+ contrast: ["Control", "Meta"],
36
+ crosshair: "s",
37
+ sphere: "q",
38
+ mouseWheel: "Scroll:Zoom",
39
+ };
40
+ this.cursorPage = {
41
+ x: {
42
+ cursorPageX: 0,
43
+ cursorPageY: 0,
44
+ index: 0,
45
+ updated: false,
46
+ },
47
+ y: {
48
+ cursorPageX: 0,
49
+ cursorPageY: 0,
50
+ index: 0,
51
+ updated: false,
52
+ },
53
+ z: {
54
+ cursorPageX: 0,
55
+ cursorPageY: 0,
56
+ index: 0,
57
+ updated: false,
58
+ },
59
+ };
60
+ const layers = (_a = options === null || options === void 0 ? void 0 : options.layers) !== null && _a !== void 0 ? _a : ["layer1", "layer2", "layer3"];
61
+ if (layers.length > 10) {
62
+ console.warn(`CanvasState: ${layers.length} layers requested; recommended maximum is 10.`);
63
+ }
64
+ this.nrrd_states = new NrrdState(this.baseCanvasesSize);
65
+ this.gui_states = new GuiState({
66
+ defaultPaintCursor: switchPencilIcon("dot"),
67
+ defaultFillColor: CHANNEL_HEX_COLORS[1],
68
+ defaultBrushColor: CHANNEL_HEX_COLORS[1],
69
+ });
70
+ // Override the default states with the actual layer list
71
+ this.nrrd_states.image.layers = layers;
72
+ this.gui_states.layerChannel.layerVisibility = Object.fromEntries(layers.map((id) => [id, true]));
73
+ this.gui_states.layerChannel.channelVisibility = Object.fromEntries(layers.map((id) => [
74
+ id,
75
+ { 1: true, 2: true, 3: true, 4: true, 5: true, 6: true, 7: true, 8: true },
76
+ ]));
77
+ const systemCanvases = this.generateSystemCanvases();
78
+ const layerTargets = this.generateLayerTargets(layers);
79
+ // Get NRRD dimensions (will be set later when NRRD loads)
80
+ // Default to 1x1x1 for now, will be re-initialized in NrrdTools when dimensions are known
81
+ const dims = this.nrrd_states.image.dimensions;
82
+ const [width, height, depth] = dims.length === 3 ? dims : [1, 1, 1];
83
+ this.protectedData = {
84
+ container,
85
+ mainAreaContainer,
86
+ allSlicesArray: [],
87
+ displaySlices: [],
88
+ backUpDisplaySlices: [],
89
+ skipSlicesDic: {},
90
+ currentShowingSlice: undefined,
91
+ mainPreSlices: undefined,
92
+ isDrawing: false,
93
+ axis: "z",
94
+ maskData: {
95
+ // Volumetric storage (Phase 3 — only storage mechanism)
96
+ volumes: layers.reduce((acc, id) => {
97
+ acc[id] = new MaskVolume(width, height, depth, 1);
98
+ return acc;
99
+ }, {}),
100
+ },
101
+ layerTargets,
102
+ canvases: {
103
+ /**
104
+ * Caches raw image data from the current slice.
105
+ * Used as a source for zoom/pan operations to avoid repeated decoding.
106
+ * Initialized as null, set in NrrdTools.ts.
107
+ */
108
+ originCanvas: null,
109
+ /**
110
+ * Top-most interaction layer.
111
+ * Captures mouse/pen events and displays real-time drawing strokes
112
+ * before they are committed to a specific layer.
113
+ */
114
+ drawingCanvas: systemCanvases.drawingCanvas,
115
+ /**
116
+ * Background layer displaying the actual medical image slice (CT/MRI).
117
+ * This is the "base" image the user sees.
118
+ */
119
+ displayCanvas: systemCanvases.displayCanvas,
120
+ /**
121
+ * Composite display layer.
122
+ * Merges all segmentation layers for unified visualization
123
+ * on top of the medical image.
124
+ */
125
+ drawingCanvasLayerMaster: systemCanvases.drawingCanvasLayerMaster,
126
+ /**
127
+ * Dedicated layer for 3D Sphere tool visualization.
128
+ * Kept separate to allow independent rendering of sphere UI elements.
129
+ */
130
+ drawingSphereCanvas: systemCanvases.drawingSphereCanvas,
131
+ /**
132
+ * Off-screen scratchpad canvas.
133
+ * Used for internal image processing, scaling, and format conversion.
134
+ */
135
+ emptyCanvas: systemCanvases.emptyCanvas,
136
+ },
137
+ ctxes: {
138
+ drawingCtx: systemCanvases.drawingCanvas.getContext("2d"),
139
+ displayCtx: systemCanvases.displayCanvas.getContext("2d"),
140
+ drawingLayerMasterCtx: systemCanvases.drawingCanvasLayerMaster.getContext("2d"),
141
+ drawingSphereCtx: systemCanvases.drawingSphereCanvas.getContext("2d"),
142
+ emptyCtx: systemCanvases.emptyCanvas.getContext("2d", {
143
+ willReadFrequently: true,
144
+ }),
145
+ },
146
+ };
147
+ }
148
+ generateSystemCanvases() {
149
+ return {
150
+ drawingCanvas: document.createElement("canvas"),
151
+ displayCanvas: document.createElement("canvas"),
152
+ drawingCanvasLayerMaster: document.createElement("canvas"),
153
+ drawingSphereCanvas: document.createElement("canvas"),
154
+ emptyCanvas: document.createElement("canvas"),
155
+ };
156
+ }
157
+ generateLayerTargets(layerIds) {
158
+ const map = new Map();
159
+ for (const id of layerIds) {
160
+ const canvas = document.createElement("canvas");
161
+ const ctx = canvas.getContext("2d");
162
+ map.set(id, { canvas, ctx });
163
+ }
164
+ return map;
165
+ }
166
+ }
167
+ //# sourceMappingURL=CanvasState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanvasState.js","sourceRoot":"","sources":["../../../src/Utils/segmentation/CanvasState.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
- import { IDragOpts, IDrawingEvents, IProtected, IGUIStates, INrrdStates } from "./coreTools/coreType";
1
+ import { IDragOpts, IDrawingEvents, IProtected } from "./core/types";
2
+ import { NrrdState } from "./coreTools/NrrdState";
3
+ import { GuiState } from "./coreTools/GuiState";
2
4
  import type { EventRouter } from "./eventRouter";
3
5
  export declare class DragOperator {
4
6
  container: HTMLElement;
@@ -16,10 +18,16 @@ export declare class DragOperator {
16
18
  private setEmptyCanvasSize;
17
19
  private getOrCreateSliceBuffer;
18
20
  private renderSliceToCanvas;
21
+ private refreshSphereOverlayCb;
19
22
  private eventRouter;
20
- constructor(container: HTMLElement, nrrd_sates: INrrdStates, gui_states: IGUIStates, protectedData: IProtected, drawingPrameters: IDrawingEvents, setSyncsliceNum: () => void, setIsDrawFalse: (target: number) => void, flipDisplayImageByAxis: () => void, setEmptyCanvasSize: (axis?: "x" | "y" | "z") => void, getOrCreateSliceBuffer: (axis: "x" | "y" | "z") => ImageData | null, renderSliceToCanvas: (layer: string, axis: "x" | "y" | "z", sliceIndex: number, buffer: ImageData, targetCtx: CanvasRenderingContext2D, scaledWidth: number, scaledHeight: number) => void);
23
+ constructor(container: HTMLElement, nrrd_sates: NrrdState, gui_states: GuiState, protectedData: IProtected, drawingPrameters: IDrawingEvents, setSyncsliceNum: () => void, setIsDrawFalse: (target: number) => void, flipDisplayImageByAxis: () => void, setEmptyCanvasSize: (axis?: "x" | "y" | "z") => void, getOrCreateSliceBuffer: (axis: "x" | "y" | "z") => ImageData | null, renderSliceToCanvas: (layer: string, axis: "x" | "y" | "z", sliceIndex: number, buffer: ImageData, targetCtx: CanvasRenderingContext2D, scaledWidth: number, scaledHeight: number) => void);
21
24
  private init;
22
25
  setShowDragNumberDiv(sliceIndexContainer: HTMLDivElement): void;
26
+ /**
27
+ * Set the sphere overlay refresh callback.
28
+ * Called by NrrdTools after DrawToolCore is initialized.
29
+ */
30
+ setRefreshSphereOverlay(cb: () => void): void;
23
31
  /**
24
32
  * Set the EventRouter reference for centralized event handling.
25
33
  * Called by NrrdTools/DrawToolCore after EventRouter is initialized.
@@ -13,6 +13,7 @@ export class DragOperator {
13
13
  handleOnDragMouseMove: (ev) => { },
14
14
  };
15
15
  this.sensitiveArray = [];
16
+ this.refreshSphereOverlayCb = null;
16
17
  // EventRouter for centralized event handling
17
18
  this.eventRouter = null;
18
19
  this.configDragMode = () => {
@@ -41,7 +42,7 @@ export class DragOperator {
41
42
  this.init();
42
43
  }
43
44
  init() {
44
- for (let i = 0; i < this.gui_states.max_sensitive; i++) {
45
+ for (let i = 0; i < this.gui_states.viewConfig.max_sensitive; i++) {
45
46
  this.sensitiveArray.push((i + 1) / 20);
46
47
  }
47
48
  const dragEffectCanvases = {
@@ -62,12 +63,20 @@ export class DragOperator {
62
63
  setEmptyCanvasSize: (axis) => this.setEmptyCanvasSize(axis),
63
64
  getOrCreateSliceBuffer: (axis) => this.getOrCreateSliceBuffer(axis),
64
65
  renderSliceToCanvas: (layer, axis, sliceIndex, buffer, targetCtx, w, h) => this.renderSliceToCanvas(layer, axis, sliceIndex, buffer, targetCtx, w, h),
66
+ refreshSphereOverlay: () => { var _a; return (_a = this.refreshSphereOverlayCb) === null || _a === void 0 ? void 0 : _a.call(this); },
65
67
  }, this.showDragNumberDiv, dragEffectCanvases);
66
68
  }
67
69
  setShowDragNumberDiv(sliceIndexContainer) {
68
70
  this.showDragNumberDiv = sliceIndexContainer;
69
71
  this.dragSliceTool.setShowDragNumberDiv(sliceIndexContainer);
70
72
  }
73
+ /**
74
+ * Set the sphere overlay refresh callback.
75
+ * Called by NrrdTools after DrawToolCore is initialized.
76
+ */
77
+ setRefreshSphereOverlay(cb) {
78
+ this.refreshSphereOverlayCb = cb;
79
+ }
71
80
  /**
72
81
  * Set the EventRouter reference for centralized event handling.
73
82
  * Called by NrrdTools/DrawToolCore after EventRouter is initialized.
@@ -84,8 +93,9 @@ export class DragOperator {
84
93
  this.removeDragMode();
85
94
  }
86
95
  // When leaving draw, contrast, or crosshair mode (returning to idle), restore drag mode
96
+ // Do NOT restore if sphere mode is active
87
97
  if ((prev === 'draw' || prev === 'contrast' || prev === 'crosshair') && next === 'idle') {
88
- if (!this.gui_states.sphere) {
98
+ if (!this.gui_states.mode.sphere) {
89
99
  this.configDragMode();
90
100
  }
91
101
  }
@@ -98,13 +108,12 @@ export class DragOperator {
98
108
  this.container.appendChild(this.showDragNumberDiv);
99
109
  }
100
110
  this.dragPrameters.handleOnDragMouseDown = (ev) => {
101
- // before start drag event, remove wheel event.
102
- this.protectedData.canvases.drawingCanvas.removeEventListener("wheel", this.drawingPrameters.handleMouseZoomSliceWheel);
111
+ // Wheel is now managed by EventRouter's wheel dispatcher (no manual remove needed)
103
112
  if (ev.button === 0) {
104
113
  this.dragPrameters.y = ev.offsetY / this.dragPrameters.h;
105
114
  this.container.addEventListener("pointermove", this.dragPrameters.handleOnDragMouseMove, false);
106
115
  this.dragPrameters.sensivity =
107
- this.sensitiveArray[this.gui_states.dragSensitivity - 1];
116
+ this.sensitiveArray[this.gui_states.viewConfig.dragSensitivity - 1];
108
117
  }
109
118
  };
110
119
  this.dragPrameters.handleOnDragMouseMove = throttle((ev) => {
@@ -118,12 +127,11 @@ export class DragOperator {
118
127
  }
119
128
  this.updateIndex(this.dragPrameters.move);
120
129
  (opts === null || opts === void 0 ? void 0 : opts.getSliceNum) &&
121
- opts.getSliceNum(this.nrrd_states.currentIndex, this.nrrd_states.contrastNum);
130
+ opts.getSliceNum(this.nrrd_states.view.currentSliceIndex, this.nrrd_states.view.contrastNum);
122
131
  this.dragPrameters.y = ev.offsetY / this.dragPrameters.h;
123
132
  }, this.dragPrameters.sensivity * 200);
124
133
  this.dragPrameters.handleOnDragMouseUp = (ev) => {
125
- // after drag, add the wheel event
126
- this.protectedData.canvases.drawingCanvas.addEventListener("wheel", this.drawingPrameters.handleMouseZoomSliceWheel);
134
+ // Wheel is now managed by EventRouter's wheel dispatcher (no manual add needed)
127
135
  this.setSyncsliceNum();
128
136
  this.container.removeEventListener("pointermove", this.dragPrameters.handleOnDragMouseMove, false);
129
137
  };
@@ -1 +1 @@
1
- {"version":3,"file":"DragOperator.js","sourceRoot":"","sources":["../../../src/Utils/segmentation/DragOperator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DragOperator.js","sourceRoot":"","sources":["../../../src/Utils/segmentation/DragOperator.ts"],"names":[],"mappings":"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"}
@@ -1,51 +1,66 @@
1
- import { IConvertObjType, IDrawingEvents, IContrastEvents, IDrawOpts } from "./coreTools/coreType";
2
- import { CommToolsData } from "./CommToolsData";
1
+ import { IConvertObjType, IDrawingEvents, IContrastEvents, IDrawOpts } from "./core/types";
2
+ import { CanvasState } from "./CanvasState";
3
+ import { RenderingUtils } from "./RenderingUtils";
3
4
  import { EventRouter } from "./eventRouter";
4
5
  import { SphereTool } from "./tools/SphereTool";
5
6
  import { CrosshairTool } from "./tools/CrosshairTool";
6
7
  import { ContrastTool } from "./tools/ContrastTool";
7
8
  import { ZoomTool } from "./tools/ZoomTool";
8
9
  import { EraserTool } from "./tools/EraserTool";
10
+ import { PanTool } from "./tools/PanTool";
11
+ import { DrawingTool } from "./tools/DrawingTool";
9
12
  import { ImageStoreHelper } from "./tools/ImageStoreHelper";
10
13
  import { UndoManager } from "./core";
11
- export declare class DrawToolCore extends CommToolsData {
14
+ /**
15
+ * DrawToolCore — Tool orchestration and event routing.
16
+ *
17
+ * Previously extended CommToolsData; now uses composition:
18
+ * - `state: CanvasState` — pure state container
19
+ * - `renderer: RenderingUtils` — rendering / slice-buffer helpers
20
+ *
21
+ * Created by NrrdTools which passes in a shared CanvasState.
22
+ */
23
+ export declare class DrawToolCore {
12
24
  container: HTMLElement;
13
25
  mainAreaContainer: HTMLDivElement;
26
+ /** Shared state container (created by NrrdTools, passed in). */
27
+ readonly state: CanvasState;
28
+ /** Rendering utilities (created here, uses shared state). */
29
+ readonly renderer: RenderingUtils;
14
30
  drawingPrameters: IDrawingEvents;
15
31
  contrastEventPrameters: IContrastEvents;
16
32
  eraserUrls: string[];
17
33
  pencilUrls: string[];
18
34
  undoManager: UndoManager;
19
- /** Snapshot of the active layer's slice captured on mouse-down (before drawing). */
20
- private preDrawSlice;
21
- private preDrawAxis;
22
- private preDrawSliceIndex;
23
- protected eventRouter: EventRouter | null;
24
- protected sphereTool: SphereTool;
25
- protected crosshairTool: CrosshairTool;
35
+ eventRouter: EventRouter;
36
+ sphereTool: SphereTool;
37
+ crosshairTool: CrosshairTool;
26
38
  protected contrastTool: ContrastTool;
27
39
  protected zoomTool: ZoomTool;
28
40
  protected eraserTool: EraserTool;
41
+ protected panTool: PanTool;
42
+ protected drawingTool: DrawingTool;
29
43
  protected imageStoreHelper: ImageStoreHelper;
44
+ /** Slice index recorded when paintOnCanvas() starts, guards stale-click */
45
+ private paintSliceIndex;
46
+ /** Wheel event dispatch mode — replaces manual wheel add/remove (Phase 2) */
47
+ private activeWheelMode;
30
48
  start: () => void;
31
- constructor(container: HTMLElement, options?: {
32
- layers?: string[];
33
- });
49
+ constructor(container: HTMLElement, state: CanvasState);
34
50
  private initTools;
35
51
  private initDrawToolCore;
36
52
  setEraserUrls(urls: string[]): void;
37
53
  setPencilIconUrls(urls: string[]): void;
38
54
  private setCurrentLayer;
39
55
  draw(opts?: IDrawOpts): void;
40
- drawCalSphereDown(x: number, y: number, sliceIndex: number, cal_position: "tumour" | "skin" | "nipple" | "ribcage"): void;
41
- drawCalSphereUp(): void;
42
56
  private zoomActionAfterDrawSphere;
43
- private clearSpherePrintStoreImages;
44
57
  private paintOnCanvas;
45
- /*************************************May consider to move outside *******************************************/
46
- private drawLine;
47
- private drawLinesOnLayer;
48
- private paintOnCanvasLayer;
58
+ /**
59
+ * Extracted from paintOnCanvas() pointerleave handler.
60
+ */
61
+ private handlePointerLeave;
62
+ /** Extracted from paintOnCanvas() — handles sphere placement on left-click */
63
+ private handleSphereClick;
49
64
  private initAllCanvas;
50
65
  private useEraser;
51
66
  configMouseZoomWheel(): (e: WheelEvent) => void;
@@ -54,10 +69,13 @@ export declare class DrawToolCore extends CommToolsData {
54
69
  drawImageOnEmptyImage(canvas: HTMLCanvasElement): void;
55
70
  /****************************Sphere functions (delegated to SphereTool)****************************************************/
56
71
  drawCalculatorSphereOnEachViews(axis: "x" | "y" | "z"): void;
57
- private drawSphereOnEachViews;
58
72
  private configMouseSphereWheel;
59
73
  drawCalculatorSphere(radius: number): void;
60
74
  drawSphere(mouseX: number, mouseY: number, radius: number): void;
75
+ /**
76
+ * Refresh sphere canvas from sphereMaskVolume for the current slice/axis.
77
+ */
78
+ refreshSphereOverlay(): void;
61
79
  /**
62
80
  * Convert cursor point between axis views.
63
81
  * Delegated to CrosshairTool.
@@ -68,38 +86,49 @@ export declare class DrawToolCore extends CommToolsData {
68
86
  getRestLayer(): string[];
69
87
  /**************************** Undo/Redo functions (Phase 6 — Delta-based) ****************************/
70
88
  /**
71
- * Clear mask on current slice canvas.
72
- *
73
- * Only clears the active layer's MaskVolume slice data.
74
- * Other layers are left untouched. After clearing, all layer canvases
75
- * are re-rendered from MaskVolume to keep visuals in sync.
89
+ * Clear the mask on the current slice canvas for the active layer ONLY.
76
90
  */
77
- clearPaint(): void;
91
+ clearActiveSlice(): void;
78
92
  /**
79
93
  * Undo the last drawing operation on the active layer.
80
- * Restores the MaskVolume slice to its pre-draw state, re-renders
81
- * the canvas, and notifies the backend.
82
94
  */
83
95
  undoLastPainting(): void;
84
96
  /**
85
97
  * Redo the last undone operation on the active layer.
86
- * Reapplies the MaskVolume slice to its post-draw state, re-renders
87
- * the canvas, and notifies the backend.
88
98
  */
89
99
  redoLastPainting(): void;
90
100
  /**
91
101
  * Re-render a layer canvas from MaskVolume and composite to master.
92
- * Called after writing oldSlice/newSlice back to the volume during undo/redo.
93
102
  */
94
103
  private applyUndoRedoToCanvas;
95
104
  /****************************Store images (delegated to ImageStoreHelper)****************************************************/
96
- storeAllImages(index: number, layer: string): void;
97
- storeImageToLayer(index: number, canvas: HTMLCanvasElement): ImageData;
98
- storeEachLayerImage(index: number, layer: string): void;
105
+ syncLayerSliceData(index: number, layer: string): void;
99
106
  /******************************** Utils gui related functions (delegated to ContrastTool) ***************************************/
100
107
  setupConrastEvents(callback: (step: number, towards: "horizental" | "vertical") => void): void;
101
108
  configContrastDragMode: () => void;
102
109
  removeContrastDragMode: () => void;
103
110
  updateSlicesContrast: (value: number, flag: string) => void;
104
111
  repraintCurrentContrastSlice: () => void;
112
+ /** Override in NrrdTools */
113
+ setIsDrawFalse(target: number): void;
114
+ /** Override in NrrdTools */
115
+ setSyncsliceNum(): void;
116
+ /** Override in NrrdTools */
117
+ resetPaintAreaUIPosition(l?: number, t?: number): void;
118
+ /** Override in NrrdTools */
119
+ resizePaintArea(factor: number): void;
120
+ /** Override in NrrdTools */
121
+ setEmptyCanvasSize(axis?: "x" | "y" | "z"): void;
122
+ /** Override in NrrdTools */
123
+ flipDisplayImageByAxis(): void;
124
+ /** Override in NrrdTools */
125
+ updateOriginAndChangedWH(): void;
126
+ /** Override in NrrdTools */
127
+ resetLayerCanvas(): void;
128
+ /** Override in NrrdTools */
129
+ redrawDisplayCanvas(): void;
130
+ /** Override in NrrdTools */
131
+ enterSphereMode(): void;
132
+ /** Override in NrrdTools */
133
+ exitSphereMode(): void;
105
134
  }