copper3d 3.0.2 → 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 (104) 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 +167 -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 +89 -467
  12. package/dist/Utils/segmentation/NrrdTools.js +479 -1335
  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.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 +384 -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/NrrdState.d.ts +1 -1
  26. package/dist/Utils/segmentation/coreTools/divControlTools.d.ts +1 -1
  27. package/dist/Utils/segmentation/coreTools/gui.d.ts +1 -1
  28. package/dist/Utils/segmentation/tools/BaseTool.d.ts +1 -1
  29. package/dist/Utils/segmentation/tools/ContrastTool.d.ts +3 -6
  30. package/dist/Utils/segmentation/tools/ContrastTool.js.map +1 -1
  31. package/dist/Utils/segmentation/tools/CrosshairTool.d.ts +11 -1
  32. package/dist/Utils/segmentation/tools/CrosshairTool.js +25 -0
  33. package/dist/Utils/segmentation/tools/CrosshairTool.js.map +1 -1
  34. package/dist/Utils/segmentation/tools/DataLoader.d.ts +33 -0
  35. package/dist/Utils/segmentation/tools/DataLoader.js +159 -0
  36. package/dist/Utils/segmentation/tools/DataLoader.js.map +1 -0
  37. package/dist/Utils/segmentation/tools/DragSliceTool.d.ts +3 -12
  38. package/dist/Utils/segmentation/tools/DragSliceTool.js.map +1 -1
  39. package/dist/Utils/segmentation/tools/DrawingTool.d.ts +18 -26
  40. package/dist/Utils/segmentation/tools/DrawingTool.js +48 -0
  41. package/dist/Utils/segmentation/tools/DrawingTool.js.map +1 -1
  42. package/dist/Utils/segmentation/tools/ImageStoreHelper.d.ts +2 -5
  43. package/dist/Utils/segmentation/tools/ImageStoreHelper.js.map +1 -1
  44. package/dist/Utils/segmentation/tools/LayerChannelManager.d.ts +52 -0
  45. package/dist/Utils/segmentation/tools/LayerChannelManager.js +175 -0
  46. package/dist/Utils/segmentation/tools/LayerChannelManager.js.map +1 -0
  47. package/dist/Utils/segmentation/tools/PanTool.d.ts +2 -8
  48. package/dist/Utils/segmentation/tools/PanTool.js.map +1 -1
  49. package/dist/Utils/segmentation/tools/SliceRenderPipeline.d.ts +80 -0
  50. package/dist/Utils/segmentation/tools/SliceRenderPipeline.js +355 -0
  51. package/dist/Utils/segmentation/tools/SliceRenderPipeline.js.map +1 -0
  52. package/dist/Utils/segmentation/tools/SphereTool.d.ts +25 -19
  53. package/dist/Utils/segmentation/tools/SphereTool.js +61 -7
  54. package/dist/Utils/segmentation/tools/SphereTool.js.map +1 -1
  55. package/dist/Utils/segmentation/tools/ToolHost.d.ts +74 -0
  56. package/dist/Utils/segmentation/tools/ToolHost.js +10 -0
  57. package/dist/Utils/segmentation/tools/ToolHost.js.map +1 -0
  58. package/dist/Utils/segmentation/tools/ZoomTool.d.ts +2 -6
  59. package/dist/Utils/segmentation/tools/ZoomTool.js.map +1 -1
  60. package/dist/Utils/segmentation/tools/index.d.ts +5 -7
  61. package/dist/Utils/segmentation/tools/index.js +6 -0
  62. package/dist/Utils/segmentation/tools/index.js.map +1 -1
  63. package/dist/Utils/workers/reformatSaveDataWorker.d.ts +1 -1
  64. package/dist/bundle.esm.js +2109 -2357
  65. package/dist/bundle.umd.js +2109 -2357
  66. package/dist/index.d.ts +3 -3
  67. package/dist/index.js +1 -1
  68. package/dist/types/Utils/segmentation/CanvasState.d.ts +31 -0
  69. package/dist/types/Utils/segmentation/DragOperator.d.ts +1 -1
  70. package/dist/types/Utils/segmentation/DrawToolCore.d.ts +49 -27
  71. package/dist/types/Utils/segmentation/NrrdTools.d.ts +89 -467
  72. package/dist/types/Utils/segmentation/RenderingUtils.d.ts +73 -0
  73. package/dist/types/Utils/segmentation/core/MaskVolume.d.ts +1 -1
  74. package/dist/types/Utils/segmentation/core/index.d.ts +1 -1
  75. package/dist/types/Utils/segmentation/core/types.d.ts +384 -0
  76. package/dist/types/Utils/segmentation/coreTools/GuiState.d.ts +1 -1
  77. package/dist/types/Utils/segmentation/coreTools/NrrdState.d.ts +1 -1
  78. package/dist/types/Utils/segmentation/coreTools/divControlTools.d.ts +1 -1
  79. package/dist/types/Utils/segmentation/coreTools/gui.d.ts +1 -1
  80. package/dist/types/Utils/segmentation/tools/BaseTool.d.ts +1 -1
  81. package/dist/types/Utils/segmentation/tools/ContrastTool.d.ts +3 -6
  82. package/dist/types/Utils/segmentation/tools/CrosshairTool.d.ts +11 -1
  83. package/dist/types/Utils/segmentation/tools/DataLoader.d.ts +33 -0
  84. package/dist/types/Utils/segmentation/tools/DragSliceTool.d.ts +3 -12
  85. package/dist/types/Utils/segmentation/tools/DrawingTool.d.ts +18 -26
  86. package/dist/types/Utils/segmentation/tools/ImageStoreHelper.d.ts +2 -5
  87. package/dist/types/Utils/segmentation/tools/LayerChannelManager.d.ts +52 -0
  88. package/dist/types/Utils/segmentation/tools/PanTool.d.ts +2 -8
  89. package/dist/types/Utils/segmentation/tools/SliceRenderPipeline.d.ts +80 -0
  90. package/dist/types/Utils/segmentation/tools/SphereTool.d.ts +25 -19
  91. package/dist/types/Utils/segmentation/tools/ToolHost.d.ts +74 -0
  92. package/dist/types/Utils/segmentation/tools/ZoomTool.d.ts +2 -6
  93. package/dist/types/Utils/segmentation/tools/index.d.ts +5 -7
  94. package/dist/types/Utils/workers/reformatSaveDataWorker.d.ts +1 -1
  95. package/dist/types/index.d.ts +3 -3
  96. package/package.json +1 -1
  97. package/dist/Utils/segmentation/CommToolsData.d.ts +0 -192
  98. package/dist/Utils/segmentation/CommToolsData.js +0 -474
  99. package/dist/Utils/segmentation/CommToolsData.js.map +0 -1
  100. package/dist/Utils/segmentation/coreTools/coreType.d.ts +0 -389
  101. package/dist/Utils/segmentation/coreTools/coreType.js +0 -3
  102. package/dist/Utils/segmentation/coreTools/coreType.js.map +0 -1
  103. package/dist/types/Utils/segmentation/CommToolsData.d.ts +0 -192
  104. 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 };