copper3d 3.0.2 → 3.1.1

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 (106) hide show
  1. package/README.md +183 -1028
  2. package/dist/Utils/segmentation/CanvasState.d.ts +31 -0
  3. package/dist/Utils/segmentation/CanvasState.js +168 -0
  4. package/dist/Utils/segmentation/CanvasState.js.map +1 -0
  5. package/dist/Utils/segmentation/DragOperator.d.ts +1 -1
  6. package/dist/Utils/segmentation/DragOperator.js +2 -4
  7. package/dist/Utils/segmentation/DragOperator.js.map +1 -1
  8. package/dist/Utils/segmentation/DrawToolCore.d.ts +49 -27
  9. package/dist/Utils/segmentation/DrawToolCore.js +275 -344
  10. package/dist/Utils/segmentation/DrawToolCore.js.map +1 -1
  11. package/dist/Utils/segmentation/NrrdTools.d.ts +92 -467
  12. package/dist/Utils/segmentation/NrrdTools.js +499 -1341
  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 +186 -0
  16. package/dist/Utils/segmentation/RenderingUtils.js.map +1 -0
  17. package/dist/Utils/segmentation/core/MaskVolume.d.ts +1 -1
  18. package/dist/Utils/segmentation/core/MaskVolume.js +1 -1
  19. package/dist/Utils/segmentation/core/index.d.ts +1 -1
  20. package/dist/Utils/segmentation/core/index.js.map +1 -1
  21. package/dist/Utils/segmentation/core/types.d.ts +386 -0
  22. package/dist/Utils/segmentation/core/types.js +1 -0
  23. package/dist/Utils/segmentation/core/types.js.map +1 -1
  24. package/dist/Utils/segmentation/coreTools/GuiState.d.ts +1 -1
  25. package/dist/Utils/segmentation/coreTools/GuiState.js +1 -0
  26. package/dist/Utils/segmentation/coreTools/GuiState.js.map +1 -1
  27. package/dist/Utils/segmentation/coreTools/NrrdState.d.ts +1 -1
  28. package/dist/Utils/segmentation/coreTools/divControlTools.d.ts +1 -1
  29. package/dist/Utils/segmentation/coreTools/gui.d.ts +1 -1
  30. package/dist/Utils/segmentation/tools/BaseTool.d.ts +1 -1
  31. package/dist/Utils/segmentation/tools/ContrastTool.d.ts +3 -6
  32. package/dist/Utils/segmentation/tools/ContrastTool.js.map +1 -1
  33. package/dist/Utils/segmentation/tools/CrosshairTool.d.ts +11 -1
  34. package/dist/Utils/segmentation/tools/CrosshairTool.js +25 -0
  35. package/dist/Utils/segmentation/tools/CrosshairTool.js.map +1 -1
  36. package/dist/Utils/segmentation/tools/DataLoader.d.ts +33 -0
  37. package/dist/Utils/segmentation/tools/DataLoader.js +159 -0
  38. package/dist/Utils/segmentation/tools/DataLoader.js.map +1 -0
  39. package/dist/Utils/segmentation/tools/DragSliceTool.d.ts +3 -12
  40. package/dist/Utils/segmentation/tools/DragSliceTool.js.map +1 -1
  41. package/dist/Utils/segmentation/tools/DrawingTool.d.ts +18 -26
  42. package/dist/Utils/segmentation/tools/DrawingTool.js +48 -0
  43. package/dist/Utils/segmentation/tools/DrawingTool.js.map +1 -1
  44. package/dist/Utils/segmentation/tools/ImageStoreHelper.d.ts +2 -5
  45. package/dist/Utils/segmentation/tools/ImageStoreHelper.js.map +1 -1
  46. package/dist/Utils/segmentation/tools/LayerChannelManager.d.ts +56 -0
  47. package/dist/Utils/segmentation/tools/LayerChannelManager.js +188 -0
  48. package/dist/Utils/segmentation/tools/LayerChannelManager.js.map +1 -0
  49. package/dist/Utils/segmentation/tools/PanTool.d.ts +2 -8
  50. package/dist/Utils/segmentation/tools/PanTool.js.map +1 -1
  51. package/dist/Utils/segmentation/tools/SliceRenderPipeline.d.ts +80 -0
  52. package/dist/Utils/segmentation/tools/SliceRenderPipeline.js +355 -0
  53. package/dist/Utils/segmentation/tools/SliceRenderPipeline.js.map +1 -0
  54. package/dist/Utils/segmentation/tools/SphereTool.d.ts +25 -19
  55. package/dist/Utils/segmentation/tools/SphereTool.js +61 -7
  56. package/dist/Utils/segmentation/tools/SphereTool.js.map +1 -1
  57. package/dist/Utils/segmentation/tools/ToolHost.d.ts +74 -0
  58. package/dist/Utils/segmentation/tools/ToolHost.js +10 -0
  59. package/dist/Utils/segmentation/tools/ToolHost.js.map +1 -0
  60. package/dist/Utils/segmentation/tools/ZoomTool.d.ts +2 -6
  61. package/dist/Utils/segmentation/tools/ZoomTool.js.map +1 -1
  62. package/dist/Utils/segmentation/tools/index.d.ts +5 -7
  63. package/dist/Utils/segmentation/tools/index.js +6 -0
  64. package/dist/Utils/segmentation/tools/index.js.map +1 -1
  65. package/dist/Utils/workers/reformatSaveDataWorker.d.ts +1 -1
  66. package/dist/bundle.esm.js +2146 -2359
  67. package/dist/bundle.umd.js +2146 -2359
  68. package/dist/index.d.ts +3 -3
  69. package/dist/index.js +1 -1
  70. package/dist/types/Utils/segmentation/CanvasState.d.ts +31 -0
  71. package/dist/types/Utils/segmentation/DragOperator.d.ts +1 -1
  72. package/dist/types/Utils/segmentation/DrawToolCore.d.ts +49 -27
  73. package/dist/types/Utils/segmentation/NrrdTools.d.ts +92 -467
  74. package/dist/types/Utils/segmentation/RenderingUtils.d.ts +73 -0
  75. package/dist/types/Utils/segmentation/core/MaskVolume.d.ts +1 -1
  76. package/dist/types/Utils/segmentation/core/index.d.ts +1 -1
  77. package/dist/types/Utils/segmentation/core/types.d.ts +386 -0
  78. package/dist/types/Utils/segmentation/coreTools/GuiState.d.ts +1 -1
  79. package/dist/types/Utils/segmentation/coreTools/NrrdState.d.ts +1 -1
  80. package/dist/types/Utils/segmentation/coreTools/divControlTools.d.ts +1 -1
  81. package/dist/types/Utils/segmentation/coreTools/gui.d.ts +1 -1
  82. package/dist/types/Utils/segmentation/tools/BaseTool.d.ts +1 -1
  83. package/dist/types/Utils/segmentation/tools/ContrastTool.d.ts +3 -6
  84. package/dist/types/Utils/segmentation/tools/CrosshairTool.d.ts +11 -1
  85. package/dist/types/Utils/segmentation/tools/DataLoader.d.ts +33 -0
  86. package/dist/types/Utils/segmentation/tools/DragSliceTool.d.ts +3 -12
  87. package/dist/types/Utils/segmentation/tools/DrawingTool.d.ts +18 -26
  88. package/dist/types/Utils/segmentation/tools/ImageStoreHelper.d.ts +2 -5
  89. package/dist/types/Utils/segmentation/tools/LayerChannelManager.d.ts +56 -0
  90. package/dist/types/Utils/segmentation/tools/PanTool.d.ts +2 -8
  91. package/dist/types/Utils/segmentation/tools/SliceRenderPipeline.d.ts +80 -0
  92. package/dist/types/Utils/segmentation/tools/SphereTool.d.ts +25 -19
  93. package/dist/types/Utils/segmentation/tools/ToolHost.d.ts +74 -0
  94. package/dist/types/Utils/segmentation/tools/ZoomTool.d.ts +2 -6
  95. package/dist/types/Utils/segmentation/tools/index.d.ts +5 -7
  96. package/dist/types/Utils/workers/reformatSaveDataWorker.d.ts +1 -1
  97. package/dist/types/index.d.ts +3 -3
  98. package/package.json +1 -1
  99. package/dist/Utils/segmentation/CommToolsData.d.ts +0 -192
  100. package/dist/Utils/segmentation/CommToolsData.js +0 -474
  101. package/dist/Utils/segmentation/CommToolsData.js.map +0 -1
  102. package/dist/Utils/segmentation/coreTools/coreType.d.ts +0 -389
  103. package/dist/Utils/segmentation/coreTools/coreType.js +0 -3
  104. package/dist/Utils/segmentation/coreTools/coreType.js.map +0 -1
  105. package/dist/types/Utils/segmentation/CommToolsData.d.ts +0 -192
  106. package/dist/types/Utils/segmentation/coreTools/coreType.d.ts +0 -389
@@ -1,389 +0,0 @@
1
- /** Tool mode types for segmentation tools */
2
- type ToolMode = "pencil" | "brush" | "eraser" | "sphere" | "calculator";
3
- /** Metadata for a GUI slider/control — used by Vue components to configure slider UI */
4
- interface IGuiMeta {
5
- min: number;
6
- max: number;
7
- step: number;
8
- value: number;
9
- }
10
- /** Callbacks for external notification of annotation data changes */
11
- interface IAnnotationCallbacks {
12
- onMaskChanged(sliceData: Uint8Array, layerId: string, channelId: number, sliceIndex: number, axis: "x" | "y" | "z", width: number, height: number, clearFlag: boolean): void;
13
- onSphereChanged(sphereOrigin: number[], sphereRadius: number): void;
14
- onCalculatorPositionsChanged(tumour: ICommXYZ | null, skin: ICommXYZ | null, rib: ICommXYZ | null, nipple: ICommXYZ | null, axis: "x" | "y" | "z"): void;
15
- onLayerVolumeCleared(layerId: string): void;
16
- onChannelColorChanged(layerId: string, channel: number, color: {
17
- r: number;
18
- g: number;
19
- b: number;
20
- a: number;
21
- }): void;
22
- }
23
- interface ICommXYZ {
24
- x: any;
25
- y: any;
26
- z: any;
27
- }
28
- interface ICommXY {
29
- x: any;
30
- y: any;
31
- }
32
- interface ISkipSlicesDictType {
33
- [key: string]: any;
34
- }
35
- interface IDownloadImageConfig {
36
- axis: "x" | "y" | "z";
37
- currentSliceIndex: number;
38
- drawingCanvas: HTMLCanvasElement;
39
- originWidth: number;
40
- originHeight: number;
41
- }
42
- interface IConvertObjType {
43
- currentNewSliceIndex: number;
44
- preSliceIndex: number;
45
- convertCursorNumX: number;
46
- convertCursorNumY: number;
47
- }
48
- interface IDragPrameters {
49
- move: number;
50
- y: number;
51
- h: number;
52
- sensivity: number;
53
- handleOnDragMouseUp: (ev: MouseEvent) => void;
54
- handleOnDragMouseDown: (ev: MouseEvent) => void;
55
- handleOnDragMouseMove: (ev: MouseEvent) => void;
56
- }
57
- interface IDrawingEvents {
58
- handleOnDrawingMouseDown: (ev: MouseEvent) => void;
59
- handleOnDrawingMouseMove: (ev: MouseEvent) => void;
60
- handleOnPanMouseMove: (ev: MouseEvent) => void;
61
- handleOnDrawingMouseUp: (ev: MouseEvent) => void;
62
- handleOnDrawingMouseLeave: (ev: MouseEvent) => void;
63
- handleOnDrawingBrushCricleMove: (ev: MouseEvent) => void;
64
- handleMouseZoomSliceWheel: (e: WheelEvent) => void;
65
- handleSphereWheel: (e: WheelEvent) => void;
66
- }
67
- interface IContrastEvents {
68
- move_x: number;
69
- move_y: number;
70
- x: number;
71
- y: number;
72
- w: number;
73
- h: number;
74
- handleOnContrastMouseDown: (ev: MouseEvent) => void;
75
- handleOnContrastMouseMove: (ev: MouseEvent) => void;
76
- handleOnContrastMouseUp: (ev: MouseEvent) => void;
77
- handleOnContrastMouseLeave: (ev: MouseEvent) => void;
78
- }
79
- interface IPaintImages {
80
- x: Array<IPaintImage>;
81
- y: Array<IPaintImage>;
82
- z: Array<IPaintImage>;
83
- }
84
- interface IPaintImage {
85
- index: number;
86
- image: ImageData;
87
- }
88
- /**
89
- * Import MaskVolume from core module
90
- * (imported where needed, not here to avoid circular deps)
91
- */
92
- type MaskVolume = any;
93
- /**
94
- * New mask data structure using MaskVolume for true 3D storage.
95
- * Dynamic N-layer support: keyed by layer id (e.g. 'layer1', 'layer2', ...).
96
- */
97
- type INewMaskData = Record<string, MaskVolume>;
98
- /**
99
- * A paired canvas + 2D context for a single annotation layer.
100
- * Stored atomically in IProtected.layerTargets to prevent canvas/ctx desync.
101
- */
102
- interface ILayerRenderTarget {
103
- canvas: HTMLCanvasElement;
104
- ctx: CanvasRenderingContext2D;
105
- }
106
- /**
107
- * Mask data storage using volumetric MaskVolume (Phase 3)
108
- *
109
- * Phase 2 legacy ImageData storage has been removed.
110
- * All mask data now stored in 3D volumes for memory efficiency.
111
- */
112
- type IMaskData = {
113
- volumes: INewMaskData;
114
- };
115
- interface IProtected {
116
- container: HTMLElement;
117
- mainAreaContainer: HTMLElement;
118
- allSlicesArray: Array<ICommXYZ>;
119
- displaySlices: Array<any>;
120
- backUpDisplaySlices: Array<any>;
121
- skipSlicesDic: ISkipSlicesDictType;
122
- currentShowingSlice: any;
123
- mainPreSlices: any;
124
- isDrawing: boolean;
125
- axis: "x" | "y" | "z";
126
- maskData: IMaskData;
127
- /** Dynamic per-layer canvas+ctx pairs. Replaces hardcoded LayerOne/Two/Three fields. */
128
- layerTargets: Map<string, ILayerRenderTarget>;
129
- canvases: {
130
- originCanvas: HTMLCanvasElement | any;
131
- drawingCanvas: HTMLCanvasElement;
132
- displayCanvas: HTMLCanvasElement;
133
- drawingCanvasLayerMaster: HTMLCanvasElement;
134
- drawingSphereCanvas: HTMLCanvasElement;
135
- emptyCanvas: HTMLCanvasElement;
136
- };
137
- ctxes: {
138
- displayCtx: CanvasRenderingContext2D;
139
- drawingCtx: CanvasRenderingContext2D;
140
- emptyCtx: CanvasRenderingContext2D;
141
- drawingSphereCtx: CanvasRenderingContext2D;
142
- drawingLayerMasterCtx: CanvasRenderingContext2D;
143
- };
144
- }
145
- /** Tool mode flags — which tool is currently active */
146
- interface IToolModeState {
147
- pencil: boolean;
148
- eraser: boolean;
149
- sphere: boolean;
150
- activeSphereType: "tumour" | "skin" | "nipple" | "ribcage";
151
- }
152
- /** Drawing configuration — brush/pencil appearance and behavior */
153
- interface IDrawingConfig {
154
- globalAlpha: number;
155
- lineWidth: number;
156
- color: string;
157
- fillColor: string;
158
- brushColor: string;
159
- brushAndEraserSize: number;
160
- }
161
- /** View configuration — UI layout and interaction parameters */
162
- interface IViewConfig {
163
- mainAreaSize: number;
164
- dragSensitivity: number;
165
- cursor: string;
166
- defaultPaintCursor: string;
167
- max_sensitive: number;
168
- readyToUpdate: boolean;
169
- }
170
- /** Layer/channel state — active layer, channel, and visibility */
171
- interface ILayerChannelState {
172
- layer: string;
173
- /** Currently active channel (1-8). Channel 0 is transparent/erased. */
174
- activeChannel: number;
175
- /** Layer visibility state: { layer1: true, layer2: true, layer3: true } */
176
- layerVisibility: Record<string, boolean>;
177
- /** Per-layer channel visibility: { layer1: { 1: true, ..., 8: true }, ... } */
178
- channelVisibility: Record<string, Record<number, boolean>>;
179
- }
180
- interface IGUIStates extends IToolModeState, IDrawingConfig, IViewConfig, ILayerChannelState {
181
- }
182
- interface IKeyBoardSettings {
183
- draw: string;
184
- undo: string;
185
- redo: string;
186
- contrast: string[];
187
- crosshair: string;
188
- sphere: string;
189
- mouseWheel: "Scroll:Zoom" | "Scroll:Slice";
190
- }
191
- /** Image metadata — set once during NRRD loading, read-only at runtime */
192
- interface IImageMetadata {
193
- originWidth: number;
194
- originHeight: number;
195
- nrrd_x_mm: number;
196
- nrrd_y_mm: number;
197
- nrrd_z_mm: number;
198
- nrrd_x_pixel: number;
199
- nrrd_y_pixel: number;
200
- nrrd_z_pixel: number;
201
- dimensions: number[];
202
- voxelSpacing: number[];
203
- spaceOrigin: number[];
204
- RSARatio: number;
205
- ratios: ICommXYZ;
206
- layers: string[];
207
- }
208
- /** View state — runtime display/navigation state */
209
- interface IViewState {
210
- changedWidth: number;
211
- changedHeight: number;
212
- currentSliceIndex: number;
213
- preSliceIndex: number;
214
- maxIndex: number;
215
- minIndex: number;
216
- contrastNum: number;
217
- sizeFactor: number;
218
- showContrast: boolean;
219
- switchSliceFlag: boolean;
220
- previousPanelL: number;
221
- previousPanelT: number;
222
- }
223
- /** Interaction state — mouse/cursor tracking */
224
- interface IInteractionState {
225
- mouseOverX: number;
226
- mouseOverY: number;
227
- mouseOver: boolean;
228
- cursorPageX: number;
229
- cursorPageY: number;
230
- isCursorSelect: boolean;
231
- drawStartPos: ICommXY;
232
- }
233
- /** Sphere state — SphereTool-specific data */
234
- interface ISphereState {
235
- sphereOrigin: ICommXYZ;
236
- tumourSphereOrigin: ICommXYZ | null;
237
- skinSphereOrigin: ICommXYZ | null;
238
- ribSphereOrigin: ICommXYZ | null;
239
- nippleSphereOrigin: ICommXYZ | null;
240
- /** Dedicated MaskVolume for SphereTool 3D sphere data. Type is `any` to avoid circular deps. */
241
- sphereMaskVolume: any;
242
- sphereRadius: number;
243
- }
244
- /** Internal flags — transient operational flags */
245
- interface IInternalFlags {
246
- stepClear: number;
247
- clearAllFlag: boolean;
248
- loadingMaskData: boolean;
249
- }
250
- /** Legacy flat interface — kept for backward compatibility during migration */
251
- interface INrrdStates extends IImageMetadata, IViewState, IInteractionState, ISphereState, IInternalFlags {
252
- }
253
- interface IDragOpts {
254
- showNumber?: boolean;
255
- getSliceNum?: (index: number, contrastNum: number) => void;
256
- }
257
- interface IDrawOpts {
258
- getMaskData?: (sliceData: Uint8Array, layerId: string, channelId: number, sliceIndex: number, axis: "x" | "y" | "z", width: number, height: number, clearFlag?: boolean) => void;
259
- onClearLayerVolume?: (layerId: string) => void;
260
- getSphereData?: (sphereOrigin: number[], sphereRadius: number) => void;
261
- getCalculateSpherePositionsData?: (tumourSphereOrigin: ICommXYZ | null, skinSphereOrigin: ICommXYZ | null, ribSphereOrigin: ICommXYZ | null, nippleSphereOrigin: ICommXYZ | null, aixs: "x" | "y" | "z") => void;
262
- }
263
- interface ICursorPage {
264
- x: {
265
- cursorPageX: number;
266
- cursorPageY: number;
267
- index: number;
268
- updated: boolean;
269
- };
270
- y: {
271
- cursorPageX: number;
272
- cursorPageY: number;
273
- index: number;
274
- updated: boolean;
275
- };
276
- z: {
277
- cursorPageX: number;
278
- cursorPageY: number;
279
- index: number;
280
- updated: boolean;
281
- };
282
- }
283
- interface IGuiParameterSettings {
284
- globalAlpha: {
285
- name: "Opacity";
286
- min: number;
287
- max: number;
288
- step: number;
289
- };
290
- pencil: {
291
- name: "Pencil";
292
- onChange: () => void;
293
- };
294
- sphere: {
295
- name: "Sphere";
296
- onChange: () => void;
297
- };
298
- brushAndEraserSize: {
299
- name: "BrushAndEraserSize";
300
- min: number;
301
- max: number;
302
- step: number;
303
- onChange: () => void;
304
- };
305
- eraser: {
306
- name: "Eraser";
307
- onChange: () => void;
308
- };
309
- activeSphereType: {
310
- name: "CalculatorDistance";
311
- onChange: (val: "tumour" | "skin" | "ribcage" | "nipple") => void;
312
- };
313
- clear: {
314
- name: "Clear";
315
- };
316
- clearAll: {
317
- name: "ClearAll";
318
- };
319
- undo: {
320
- name: "Undo";
321
- };
322
- redo: {
323
- name: "Redo";
324
- };
325
- resetZoom: {
326
- name: "ResetZoom";
327
- };
328
- windowHigh: {
329
- name: "ImageContrast";
330
- value: null;
331
- min: number;
332
- max: number;
333
- step: number;
334
- onChange: (value: number) => void;
335
- onFinished: () => void;
336
- };
337
- windowLow: {
338
- name: "WindowLow";
339
- value: null;
340
- min: number;
341
- max: number;
342
- step: number;
343
- onChange: (value: number) => void;
344
- onFinished: () => void;
345
- };
346
- advance: {
347
- layer: {
348
- name: "Layer";
349
- value: string[];
350
- };
351
- cursor: {
352
- name: "CursorIcon";
353
- value: ["crosshair", "pencil", "dot"];
354
- };
355
- mainAreaSize: {
356
- name: "Zoom";
357
- min: number;
358
- max: number;
359
- step: number;
360
- onFinished: null;
361
- };
362
- dragSensitivity: {
363
- name: "DragSensitivity";
364
- min: number;
365
- max: number;
366
- step: number;
367
- };
368
- pencilSettings: {
369
- lineWidth: {
370
- name: "OuterLineWidth";
371
- min: number;
372
- max: number;
373
- step: number;
374
- };
375
- color: {
376
- name: "Color";
377
- };
378
- fillColor: {
379
- name: "FillColor";
380
- };
381
- };
382
- BrushSettings: {
383
- brushColor: {
384
- name: "BrushColor";
385
- };
386
- };
387
- };
388
- }
389
- export { ToolMode, IGuiMeta, IAnnotationCallbacks, ICommXYZ, ICommXY, IDownloadImageConfig, IConvertObjType, IDragPrameters, IDrawingEvents, IContrastEvents, IProtected, IGUIStates, IToolModeState, IDrawingConfig, IViewConfig, ILayerChannelState, IDragOpts, IDrawOpts, INrrdStates, IImageMetadata, IViewState, IInteractionState, ISphereState, IInternalFlags, 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":"AA2aC,CAAC"}
@@ -1,192 +0,0 @@
1
- import { IProtected, ICursorPage, IConvertObjType, INewMaskData, IKeyBoardSettings, IAnnotationCallbacks } from "./coreTools/coreType";
2
- import { NrrdState } from "./coreTools/NrrdState";
3
- import { GuiState } from "./coreTools/GuiState";
4
- import { MaskVolume } from "./core/index";
5
- export declare class CommToolsData {
6
- baseCanvasesSize: number;
7
- private _reusableSliceBuffer;
8
- private _reusableBufferWidth;
9
- private _reusableBufferHeight;
10
- /** External annotation callbacks — set via draw() options */
11
- protected annotationCallbacks: IAnnotationCallbacks;
12
- /** Whether the keyboard-config dialog is open (suppresses all shortcuts). */
13
- protected _configKeyBoard: boolean;
14
- /** Active keyboard shortcut bindings. */
15
- protected _keyboardSettings: IKeyBoardSettings;
16
- protected nrrd_states: NrrdState;
17
- protected cursorPage: ICursorPage;
18
- protected gui_states: GuiState;
19
- protected protectedData: IProtected;
20
- constructor(container: HTMLElement, mainAreaContainer: HTMLElement, options?: {
21
- layers?: string[];
22
- });
23
- /**
24
- * Get MaskVolume for a specific layer
25
- *
26
- * @param layer - Layer name: "layer1", "layer2", or "layer3"
27
- * @returns MaskVolume instance for the specified layer
28
- *
29
- * @example
30
- * ```ts
31
- * const volume = this.getVolumeForLayer("layer1");
32
- * volume.setVoxel(x, y, z, 255);
33
- * ```
34
- */
35
- getVolumeForLayer(layer: string): MaskVolume;
36
- /**
37
- * Get MaskVolume for the currently active layer
38
- *
39
- * @returns MaskVolume instance for the current layer
40
- *
41
- * @example
42
- * ```ts
43
- * const volume = this.getCurrentVolume();
44
- * const slice = volume.getSliceImageData(50, 'z');
45
- * ```
46
- */
47
- getCurrentVolume(): MaskVolume;
48
- /**
49
- * Get all three MaskVolume instances
50
- *
51
- * @returns Object containing all three layer volumes
52
- *
53
- * @example
54
- * ```ts
55
- * const { layer1, layer2, layer3 } = this.getAllVolumes();
56
- * layer1.clear();
57
- * ```
58
- */
59
- getAllVolumes(): INewMaskData;
60
- private generateSystemCanvases;
61
- private generateLayerTargets;
62
- /**
63
- * Rewrite this {clearActiveSlice} function under DrawToolCore
64
- */
65
- clearActiveSlice(): void;
66
- /**
67
- * Rewrite this {undoLastPainting} function under DrawToolCore
68
- */
69
- undoLastPainting(): void;
70
- /**
71
- * Rewrite this {redoLastPainting} function under DrawToolCore
72
- */
73
- redoLastPainting(): void;
74
- /**
75
- * Rewrite this {clearActiveLayer} function under NrrdTools
76
- */
77
- clearActiveLayer(): void;
78
- /**
79
- * Rewrite this {resizePaintArea} function under NrrdTools
80
- */
81
- resizePaintArea(factor: number): void;
82
- /**
83
- * Rewrite this {setIsDrawFalse} function under NrrdTools
84
- */
85
- setIsDrawFalse(target: number): void;
86
- /**
87
- * Rewrite this {updateOriginAndChangedWH} function under NrrdTools
88
- */
89
- updateOriginAndChangedWH(): void;
90
- /**
91
- * Rewrite this {flipDisplayImageByAxis} function under NrrdTools
92
- */
93
- flipDisplayImageByAxis(): void;
94
- /**
95
- * Rewrite this {resetPaintAreaUIPosition} function under NrrdTools
96
- */
97
- resetPaintAreaUIPosition(l?: number, t?: number): void;
98
- /**
99
- * Rewrite this {resetPaintAreaUIPosition} function under NrrdTools
100
- */
101
- setEmptyCanvasSize(axis?: "x" | "y" | "z"): void;
102
- /**
103
- * Rewrite this {convertCursorPoint} function under NrrdTools
104
- */
105
- convertCursorPoint(from: "x" | "y" | "z", to: "x" | "y" | "z", cursorNumX: number, cursorNumY: number, currentSliceIndex: number): IConvertObjType | undefined;
106
- /**
107
- * Rewrite this {resetLayerCanvas} function under NrrdTools
108
- */
109
- resetLayerCanvas(): void;
110
- /**
111
- * Enter sphere mode: clear all layer canvases (not MaskVolume),
112
- * hide all mask data so sphere overlay is the only visible annotation.
113
- * Rewrite this under NrrdTools.
114
- */
115
- enterSphereMode(): void;
116
- /**
117
- * Exit sphere mode: clear sphere canvas overlay, reload all layer
118
- * MaskVolume data back onto canvases. Rewrite this under NrrdTools.
119
- */
120
- exitSphereMode(): void;
121
- /**
122
- * Rewrite this {setSyncsliceNum} function under NrrdTools
123
- */
124
- setSyncsliceNum(): void;
125
- /**
126
- * Rewrite this {redrawDisplayCanvas} function under NrrdTools
127
- */
128
- redrawDisplayCanvas(): void;
129
- /**
130
- * Get a painted mask image based on current axis and input slice index.
131
- *
132
- * Phase 3: Reads directly from MaskVolume.
133
- *
134
- * @param axis "x" | "y" | "z"
135
- * @param sliceIndex number
136
- * @returns Object with index and image, or undefined
137
- */
138
- filterDrawedImage(axis: "x" | "y" | "z", sliceIndex: number): {
139
- index: number;
140
- image: ImageData;
141
- } | undefined;
142
- /**
143
- * Get or create a reusable ImageData buffer for the given axis.
144
- *
145
- * Reuses the same buffer across multiple slice renders to avoid
146
- * allocating a new ImageData per layer per slice switch.
147
- * The buffer is only reallocated when slice dimensions change (axis switch).
148
- *
149
- * @param axis - Axis: "x", "y", or "z"
150
- * @returns Reusable ImageData buffer with correct dimensions
151
- */
152
- getOrCreateSliceBuffer(axis: "x" | "y" | "z"): ImageData | null;
153
- /**
154
- * Render a layer's slice into a reusable buffer and draw to the target canvas.
155
- *
156
- * Uses MaskVolume.renderLabelSliceInto() for zero-allocation rendering.
157
- * The caller should obtain the buffer via getOrCreateSliceBuffer() and reuse
158
- * it across multiple layer renders.
159
- *
160
- * @param layer - Layer name: "layer1", "layer2", or "layer3"
161
- * @param axis - Axis: "x", "y", or "z"
162
- * @param sliceIndex - Slice index
163
- * @param buffer - Reusable ImageData buffer (from getOrCreateSliceBuffer)
164
- * @param targetCtx - Canvas context to draw the result onto
165
- * @param scaledWidth - Target display width
166
- * @param scaledHeight - Target display height
167
- */
168
- renderSliceToCanvas(layer: string, axis: "x" | "y" | "z", sliceIndex: number, buffer: ImageData, targetCtx: CanvasRenderingContext2D, scaledWidth: number, scaledHeight: number): void;
169
- /**
170
- * Invalidate the reusable buffer (e.g. when switching datasets).
171
- * The buffer will be lazily recreated on next use.
172
- */
173
- invalidateSliceBuffer(): void;
174
- /**
175
- * Apply the same flip transform used by flipDisplayImageByAxis() to any
176
- * canvas context. This ensures mask overlays align with the flipped CT image.
177
- *
178
- * The flip is its own inverse (applying twice = identity), so it works for
179
- * both directions: volume→display (rendering) and display→volume (storing).
180
- *
181
- * @param ctx Target 2D context (must be wrapped in save/restore by caller).
182
- * @param width Canvas width in pixels.
183
- * @param height Canvas height in pixels.
184
- * @param axis Current viewing axis.
185
- */
186
- applyMaskFlipForAxis(ctx: CanvasRenderingContext2D, width: number, height: number, axis: "x" | "y" | "z"): void;
187
- /**
188
- * Composite all layer canvases to the master display canvas.
189
- * Only draws layers whose visibility is enabled.
190
- */
191
- compositeAllLayers(): void;
192
- }