copper3d 3.0.1 → 3.0.2

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 (98) hide show
  1. package/README.md +195 -28
  2. package/dist/Utils/segmentation/CommToolsData.d.ts +24 -9
  3. package/dist/Utils/segmentation/CommToolsData.js +65 -139
  4. package/dist/Utils/segmentation/CommToolsData.js.map +1 -1
  5. package/dist/Utils/segmentation/DragOperator.d.ts +10 -2
  6. package/dist/Utils/segmentation/DragOperator.js +14 -4
  7. package/dist/Utils/segmentation/DragOperator.js.map +1 -1
  8. package/dist/Utils/segmentation/DrawToolCore.d.ts +23 -16
  9. package/dist/Utils/segmentation/DrawToolCore.js +218 -401
  10. package/dist/Utils/segmentation/DrawToolCore.js.map +1 -1
  11. package/dist/Utils/segmentation/NrrdTools.d.ts +152 -10
  12. package/dist/Utils/segmentation/NrrdTools.js +599 -202
  13. package/dist/Utils/segmentation/NrrdTools.js.map +1 -1
  14. package/dist/Utils/segmentation/core/MaskVolume.d.ts +1 -1
  15. package/dist/Utils/segmentation/core/MaskVolume.js +24 -3
  16. package/dist/Utils/segmentation/core/MaskVolume.js.map +1 -1
  17. package/dist/Utils/segmentation/core/UndoManager.d.ts +1 -1
  18. package/dist/Utils/segmentation/core/UndoManager.js +1 -1
  19. package/dist/Utils/segmentation/core/index.d.ts +0 -2
  20. package/dist/Utils/segmentation/core/index.js +0 -1
  21. package/dist/Utils/segmentation/core/index.js.map +1 -1
  22. package/dist/Utils/segmentation/core/types.js +24 -24
  23. package/dist/Utils/segmentation/core/types.js.map +1 -1
  24. package/dist/Utils/segmentation/coreTools/GuiState.d.ts +22 -0
  25. package/dist/Utils/segmentation/coreTools/GuiState.js +48 -0
  26. package/dist/Utils/segmentation/coreTools/GuiState.js.map +1 -0
  27. package/dist/Utils/segmentation/coreTools/NrrdState.d.ts +25 -0
  28. package/dist/Utils/segmentation/coreTools/NrrdState.js +85 -0
  29. package/dist/Utils/segmentation/coreTools/NrrdState.js.map +1 -0
  30. package/dist/Utils/segmentation/coreTools/coreType.d.ts +88 -62
  31. package/dist/Utils/segmentation/coreTools/coreType.js.map +1 -1
  32. package/dist/Utils/segmentation/coreTools/divControlTools.js +1 -1
  33. package/dist/Utils/segmentation/coreTools/divControlTools.js.map +1 -1
  34. package/dist/Utils/segmentation/coreTools/gui.d.ts +12 -12
  35. package/dist/Utils/segmentation/coreTools/gui.js +81 -107
  36. package/dist/Utils/segmentation/coreTools/gui.js.map +1 -1
  37. package/dist/Utils/segmentation/eventRouter/EventRouter.d.ts +2 -1
  38. package/dist/Utils/segmentation/eventRouter/EventRouter.js +15 -10
  39. package/dist/Utils/segmentation/eventRouter/EventRouter.js.map +1 -1
  40. package/dist/Utils/segmentation/eventRouter/types.d.ts +3 -3
  41. package/dist/Utils/segmentation/tools/BaseTool.d.ts +8 -5
  42. package/dist/Utils/segmentation/tools/BaseTool.js +1 -2
  43. package/dist/Utils/segmentation/tools/BaseTool.js.map +1 -1
  44. package/dist/Utils/segmentation/tools/CrosshairTool.js +25 -25
  45. package/dist/Utils/segmentation/tools/CrosshairTool.js.map +1 -1
  46. package/dist/Utils/segmentation/tools/DragSliceTool.d.ts +2 -0
  47. package/dist/Utils/segmentation/tools/DragSliceTool.js +63 -53
  48. package/dist/Utils/segmentation/tools/DragSliceTool.js.map +1 -1
  49. package/dist/Utils/segmentation/tools/DrawingTool.d.ts +93 -0
  50. package/dist/Utils/segmentation/tools/DrawingTool.js +222 -0
  51. package/dist/Utils/segmentation/tools/DrawingTool.js.map +1 -0
  52. package/dist/Utils/segmentation/tools/EraserTool.js +8 -8
  53. package/dist/Utils/segmentation/tools/EraserTool.js.map +1 -1
  54. package/dist/Utils/segmentation/tools/ImageStoreHelper.d.ts +11 -28
  55. package/dist/Utils/segmentation/tools/ImageStoreHelper.js +39 -82
  56. package/dist/Utils/segmentation/tools/ImageStoreHelper.js.map +1 -1
  57. package/dist/Utils/segmentation/tools/PanTool.d.ts +53 -0
  58. package/dist/Utils/segmentation/tools/PanTool.js +90 -0
  59. package/dist/Utils/segmentation/tools/PanTool.js.map +1 -0
  60. package/dist/Utils/segmentation/tools/SphereTool.d.ts +208 -1
  61. package/dist/Utils/segmentation/tools/SphereTool.js +456 -45
  62. package/dist/Utils/segmentation/tools/SphereTool.js.map +1 -1
  63. package/dist/Utils/segmentation/tools/ZoomTool.js +3 -3
  64. package/dist/Utils/segmentation/tools/ZoomTool.js.map +1 -1
  65. package/dist/Utils/segmentation/tools/index.d.ts +6 -2
  66. package/dist/Utils/segmentation/tools/index.js +4 -1
  67. package/dist/Utils/segmentation/tools/index.js.map +1 -1
  68. package/dist/bundle.esm.js +2452 -1492
  69. package/dist/bundle.umd.js +2452 -1492
  70. package/dist/index.d.ts +6 -3
  71. package/dist/index.js +1 -1
  72. package/dist/index.js.map +1 -1
  73. package/dist/types/Utils/segmentation/CommToolsData.d.ts +24 -9
  74. package/dist/types/Utils/segmentation/DragOperator.d.ts +10 -2
  75. package/dist/types/Utils/segmentation/DrawToolCore.d.ts +23 -16
  76. package/dist/types/Utils/segmentation/NrrdTools.d.ts +152 -10
  77. package/dist/types/Utils/segmentation/core/MaskVolume.d.ts +1 -1
  78. package/dist/types/Utils/segmentation/core/UndoManager.d.ts +1 -1
  79. package/dist/types/Utils/segmentation/core/index.d.ts +0 -2
  80. package/dist/types/Utils/segmentation/coreTools/GuiState.d.ts +22 -0
  81. package/dist/types/Utils/segmentation/coreTools/NrrdState.d.ts +25 -0
  82. package/dist/types/Utils/segmentation/coreTools/coreType.d.ts +88 -62
  83. package/dist/types/Utils/segmentation/coreTools/gui.d.ts +12 -12
  84. package/dist/types/Utils/segmentation/eventRouter/EventRouter.d.ts +2 -1
  85. package/dist/types/Utils/segmentation/eventRouter/types.d.ts +3 -3
  86. package/dist/types/Utils/segmentation/tools/BaseTool.d.ts +8 -5
  87. package/dist/types/Utils/segmentation/tools/DragSliceTool.d.ts +2 -0
  88. package/dist/types/Utils/segmentation/tools/DrawingTool.d.ts +93 -0
  89. package/dist/types/Utils/segmentation/tools/ImageStoreHelper.d.ts +11 -28
  90. package/dist/types/Utils/segmentation/tools/PanTool.d.ts +53 -0
  91. package/dist/types/Utils/segmentation/tools/SphereTool.d.ts +208 -1
  92. package/dist/types/Utils/segmentation/tools/index.d.ts +6 -2
  93. package/dist/types/index.d.ts +6 -3
  94. package/package.json +1 -1
  95. package/dist/Utils/segmentation/core/MigrationUtils.d.ts +0 -97
  96. package/dist/Utils/segmentation/core/MigrationUtils.js +0 -163
  97. package/dist/Utils/segmentation/core/MigrationUtils.js.map +0 -1
  98. package/dist/types/Utils/segmentation/core/MigrationUtils.d.ts +0 -97
@@ -0,0 +1,25 @@
1
+ /**
2
+ * NrrdState — Grouped state management for NRRD annotation data.
3
+ *
4
+ * Replaces the flat INrrdStates object with 5 semantic sub-groups:
5
+ * - image: Read-mostly metadata set during NRRD loading
6
+ * - view: Runtime display/navigation state
7
+ * - interaction: Mouse/cursor tracking
8
+ * - sphere: SphereTool-specific data
9
+ * - flags: Internal operational flags
10
+ *
11
+ * Phase 4 of the State Management Refactor.
12
+ */
13
+ import type { IImageMetadata, IViewState, IInteractionState, ISphereState, IInternalFlags } from "./coreType";
14
+ export declare class NrrdState {
15
+ readonly image: IImageMetadata;
16
+ readonly view: IViewState;
17
+ readonly interaction: IInteractionState;
18
+ readonly sphere: ISphereState;
19
+ readonly flags: IInternalFlags;
20
+ constructor(baseCanvasesSize?: number, layers?: string[]);
21
+ /** Set zoom factor with clamping [1, 8] */
22
+ setZoomFactor(factor: number): void;
23
+ /** Reset all sphere state to defaults */
24
+ resetSphereState(): void;
25
+ }
@@ -0,0 +1,85 @@
1
+ /**
2
+ * NrrdState — Grouped state management for NRRD annotation data.
3
+ *
4
+ * Replaces the flat INrrdStates object with 5 semantic sub-groups:
5
+ * - image: Read-mostly metadata set during NRRD loading
6
+ * - view: Runtime display/navigation state
7
+ * - interaction: Mouse/cursor tracking
8
+ * - sphere: SphereTool-specific data
9
+ * - flags: Internal operational flags
10
+ *
11
+ * Phase 4 of the State Management Refactor.
12
+ */
13
+ export class NrrdState {
14
+ constructor(baseCanvasesSize = 1, layers = ["layer1", "layer2", "layer3"]) {
15
+ this.image = {
16
+ originWidth: 0,
17
+ originHeight: 0,
18
+ nrrd_x_mm: 0,
19
+ nrrd_y_mm: 0,
20
+ nrrd_z_mm: 0,
21
+ nrrd_x_pixel: 0,
22
+ nrrd_y_pixel: 0,
23
+ nrrd_z_pixel: 0,
24
+ dimensions: [],
25
+ voxelSpacing: [],
26
+ spaceOrigin: [],
27
+ RSARatio: 0,
28
+ ratios: { x: 1, y: 1, z: 1 },
29
+ layers,
30
+ };
31
+ this.view = {
32
+ changedWidth: 0,
33
+ changedHeight: 0,
34
+ currentSliceIndex: 0,
35
+ preSliceIndex: 0,
36
+ maxIndex: 0,
37
+ minIndex: 0,
38
+ contrastNum: 0,
39
+ sizeFactor: baseCanvasesSize,
40
+ showContrast: false,
41
+ switchSliceFlag: false,
42
+ previousPanelL: -99999,
43
+ previousPanelT: -99999,
44
+ };
45
+ this.interaction = {
46
+ mouseOverX: 0,
47
+ mouseOverY: 0,
48
+ mouseOver: false,
49
+ cursorPageX: 0,
50
+ cursorPageY: 0,
51
+ isCursorSelect: false,
52
+ drawStartPos: { x: 1, y: 1 },
53
+ };
54
+ this.sphere = {
55
+ sphereOrigin: { x: [0, 0, 0], y: [0, 0, 0], z: [0, 0, 0] },
56
+ tumourSphereOrigin: null,
57
+ skinSphereOrigin: null,
58
+ ribSphereOrigin: null,
59
+ nippleSphereOrigin: null,
60
+ sphereMaskVolume: null,
61
+ sphereRadius: 5,
62
+ };
63
+ this.flags = {
64
+ stepClear: 1,
65
+ clearAllFlag: false,
66
+ loadingMaskData: false,
67
+ };
68
+ }
69
+ // ── Validated Setters ────────────────────────────────────────────────────
70
+ /** Set zoom factor with clamping [1, 8] */
71
+ setZoomFactor(factor) {
72
+ this.view.sizeFactor = Math.max(1, Math.min(8, factor));
73
+ }
74
+ /** Reset all sphere state to defaults */
75
+ resetSphereState() {
76
+ this.sphere.sphereOrigin = { x: [0, 0, 0], y: [0, 0, 0], z: [0, 0, 0] };
77
+ this.sphere.tumourSphereOrigin = null;
78
+ this.sphere.skinSphereOrigin = null;
79
+ this.sphere.ribSphereOrigin = null;
80
+ this.sphere.nippleSphereOrigin = null;
81
+ this.sphere.sphereMaskVolume = null;
82
+ this.sphere.sphereRadius = 5;
83
+ }
84
+ }
85
+ //# sourceMappingURL=NrrdState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NrrdState.js","sourceRoot":"","sources":["../../../../src/Utils/segmentation/coreTools/NrrdState.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,25 @@
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
+ }
1
23
  interface ICommXYZ {
2
24
  x: any;
3
25
  y: any;
@@ -12,14 +34,14 @@ interface ISkipSlicesDictType {
12
34
  }
13
35
  interface IDownloadImageConfig {
14
36
  axis: "x" | "y" | "z";
15
- currentIndex: number;
37
+ currentSliceIndex: number;
16
38
  drawingCanvas: HTMLCanvasElement;
17
39
  originWidth: number;
18
40
  originHeight: number;
19
41
  }
20
42
  interface IConvertObjType {
21
- currentIndex: number;
22
- oldIndex: number;
43
+ currentNewSliceIndex: number;
44
+ preSliceIndex: number;
23
45
  convertCursorNumX: number;
24
46
  convertCursorNumY: number;
25
47
  }
@@ -99,10 +121,9 @@ interface IProtected {
99
121
  skipSlicesDic: ISkipSlicesDictType;
100
122
  currentShowingSlice: any;
101
123
  mainPreSlices: any;
102
- Is_Draw: boolean;
124
+ isDrawing: boolean;
103
125
  axis: "x" | "y" | "z";
104
126
  maskData: IMaskData;
105
- previousDrawingImage?: ImageData;
106
127
  /** Dynamic per-layer canvas+ctx pairs. Replaces hardcoded LayerOne/Two/Three fields. */
107
128
  layerTargets: Map<string, ILayerRenderTarget>;
108
129
  canvases: {
@@ -121,31 +142,34 @@ interface IProtected {
121
142
  drawingLayerMasterCtx: CanvasRenderingContext2D;
122
143
  };
123
144
  }
124
- interface IGUIStates {
125
- mainAreaSize: number;
126
- dragSensitivity: number;
127
- Eraser: boolean;
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 {
128
154
  globalAlpha: number;
129
155
  lineWidth: number;
130
156
  color: string;
131
- pencil: boolean;
132
157
  fillColor: string;
133
158
  brushColor: string;
134
159
  brushAndEraserSize: number;
160
+ }
161
+ /** View configuration — UI layout and interaction parameters */
162
+ interface IViewConfig {
163
+ mainAreaSize: number;
164
+ dragSensitivity: number;
135
165
  cursor: string;
136
- layer: string;
137
- cal_distance: "tumour" | "skin" | "nipple" | "ribcage";
138
- sphere: boolean;
139
- calculator: boolean;
140
- readyToUpdate: boolean;
141
166
  defaultPaintCursor: string;
142
167
  max_sensitive: number;
143
- clear: () => void;
144
- clearAll: () => void;
145
- undo: () => void;
146
- redo: () => void;
147
- downloadCurrentMask: () => void;
148
- resetZoom: () => void;
168
+ readyToUpdate: boolean;
169
+ }
170
+ /** Layer/channel state — active layer, channel, and visibility */
171
+ interface ILayerChannelState {
172
+ layer: string;
149
173
  /** Currently active channel (1-8). Channel 0 is transparent/erased. */
150
174
  activeChannel: number;
151
175
  /** Layer visibility state: { layer1: true, layer2: true, layer3: true } */
@@ -153,15 +177,19 @@ interface IGUIStates {
153
177
  /** Per-layer channel visibility: { layer1: { 1: true, ..., 8: true }, ... } */
154
178
  channelVisibility: Record<string, Record<number, boolean>>;
155
179
  }
180
+ interface IGUIStates extends IToolModeState, IDrawingConfig, IViewConfig, ILayerChannelState {
181
+ }
156
182
  interface IKeyBoardSettings {
157
183
  draw: string;
158
184
  undo: string;
159
185
  redo: string;
160
186
  contrast: string[];
161
187
  crosshair: string;
188
+ sphere: string;
162
189
  mouseWheel: "Scroll:Zoom" | "Scroll:Slice";
163
190
  }
164
- interface INrrdStates {
191
+ /** Image metadata — set once during NRRD loading, read-only at runtime */
192
+ interface IImageMetadata {
165
193
  originWidth: number;
166
194
  originHeight: number;
167
195
  nrrd_x_mm: number;
@@ -170,55 +198,57 @@ interface INrrdStates {
170
198
  nrrd_x_pixel: number;
171
199
  nrrd_y_pixel: number;
172
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 {
173
210
  changedWidth: number;
174
211
  changedHeight: number;
175
- oldIndex: number;
176
- currentIndex: number;
212
+ currentSliceIndex: number;
213
+ preSliceIndex: number;
177
214
  maxIndex: number;
178
215
  minIndex: number;
179
- RSARatio: number;
180
- voxelSpacing: number[];
181
- spaceOrigin: number[];
182
- dimensions: number[];
183
- loadMaskJson: boolean;
184
- ratios: ICommXYZ;
185
216
  contrastNum: number;
217
+ sizeFactor: number;
186
218
  showContrast: boolean;
187
- isCursorSelect: 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;
188
228
  cursorPageX: number;
189
229
  cursorPageY: number;
230
+ isCursorSelect: boolean;
231
+ drawStartPos: ICommXY;
232
+ }
233
+ /** Sphere state — SphereTool-specific data */
234
+ interface ISphereState {
190
235
  sphereOrigin: ICommXYZ;
191
236
  tumourSphereOrigin: ICommXYZ | null;
192
237
  skinSphereOrigin: ICommXYZ | null;
193
238
  ribSphereOrigin: ICommXYZ | null;
194
239
  nippleSphereOrigin: ICommXYZ | null;
195
- tumourColor: "#00ff00";
196
- skinColor: "#FFEB3B";
197
- ribcageColor: "#2196F3";
198
- nippleColor: "#E91E63";
199
- spherePlanB: boolean;
240
+ /** Dedicated MaskVolume for SphereTool 3D sphere data. Type is `any` to avoid circular deps. */
241
+ sphereMaskVolume: any;
200
242
  sphereRadius: number;
201
- Mouse_Over_x: number;
202
- Mouse_Over_y: number;
203
- Mouse_Over: boolean;
243
+ }
244
+ /** Internal flags — transient operational flags */
245
+ interface IInternalFlags {
204
246
  stepClear: number;
205
- sizeFoctor: number;
206
247
  clearAllFlag: boolean;
207
- previousPanelL: number;
208
- previousPanelT: number;
209
- switchSliceFlag: boolean;
210
- layers: string[];
211
- getMask: (sliceData: Uint8Array, layerId: string, channelId: number, sliceIndex: number, axis: "x" | "y" | "z", width: number, height: number, clearFlag: boolean) => void;
212
- onClearLayerVolume: (layerId: string) => void;
213
- onChannelColorChanged: (layerId: string, channel: number, color: {
214
- r: number;
215
- g: number;
216
- b: number;
217
- a: number;
218
- }) => void;
219
- getSphere: (sphereOrigin: number[], sphereRadius: number) => void;
220
- getCalculateSpherePositions: (tumourSphereOrigin: ICommXYZ | null, skinSphereOrigin: ICommXYZ | null, ribSphereOrigin: ICommXYZ | null, nippleSphereOrigin: ICommXYZ | null, aixs: "x" | "y" | "z") => void;
221
- drawStartPos: ICommXY;
248
+ loadingMaskData: boolean;
249
+ }
250
+ /** Legacy flat interface — kept for backward compatibility during migration */
251
+ interface INrrdStates extends IImageMetadata, IViewState, IInteractionState, ISphereState, IInternalFlags {
222
252
  }
223
253
  interface IDragOpts {
224
254
  showNumber?: boolean;
@@ -272,15 +302,11 @@ interface IGuiParameterSettings {
272
302
  step: number;
273
303
  onChange: () => void;
274
304
  };
275
- Eraser: {
305
+ eraser: {
276
306
  name: "Eraser";
277
307
  onChange: () => void;
278
308
  };
279
- calculator: {
280
- name: "Calculator";
281
- onChange: () => void;
282
- };
283
- cal_distance: {
309
+ activeSphereType: {
284
310
  name: "CalculatorDistance";
285
311
  onChange: (val: "tumour" | "skin" | "ribcage" | "nipple") => void;
286
312
  };
@@ -360,4 +386,4 @@ interface IGuiParameterSettings {
360
386
  };
361
387
  };
362
388
  }
363
- export { ICommXYZ, ICommXY, IDownloadImageConfig, IConvertObjType, IDragPrameters, IDrawingEvents, IContrastEvents, IProtected, IGUIStates, IDragOpts, IDrawOpts, INrrdStates, IPaintImage, IPaintImages, ISkipSlicesDictType, IMaskData, INewMaskData, ILayerRenderTarget, ICursorPage, IGuiParameterSettings, IKeyBoardSettings };
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 +1 @@
1
- {"version":3,"file":"coreType.js","sourceRoot":"","sources":["../../../../src/Utils/segmentation/coreTools/coreType.ts"],"names":[],"mappings":"AAkZC,CAAC"}
1
+ {"version":3,"file":"coreType.js","sourceRoot":"","sources":["../../../../src/Utils/segmentation/coreTools/coreType.ts"],"names":[],"mappings":"AA2aC,CAAC"}
@@ -33,7 +33,7 @@ function enableDownload(config) {
33
33
  let downloadImage = document.createElement("a");
34
34
  downloadImage.href = "";
35
35
  downloadImage.target = "_blank";
36
- downloadImage.download = `slice_${config.axis}_#${config.currentIndex}`;
36
+ downloadImage.download = `slice_${config.axis}_#${config.currentSliceIndex}`;
37
37
  const downloadCtx = downloadCanvas.getContext("2d");
38
38
  downloadCanvas.width = config.originWidth;
39
39
  downloadCanvas.height = config.originHeight;
@@ -1 +1 @@
1
- {"version":3,"file":"divControlTools.js","sourceRoot":"","sources":["../../../../src/Utils/segmentation/coreTools/divControlTools.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,SAAS,wBAAwB;IAC/B,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACrD,cAAc,CAAC,SAAS,GAAG,sBAAsB,CAAC;IAClD,cAAc,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IAC3C,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;IACpC,cAAc,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC;IAClC,cAAc,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;IAEpC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,SAAyB;IAC7C,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;IACxB,SAAS,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE;QAC3C,SAAS,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,MAA4B;IAClD,IAAI,cAAc,GAChB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,aAAa,GAA6B,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1E,aAAa,CAAC,IAAI,GAAG,EAAE,CAAC;IACxB,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC;IAChC,aAAa,CAAC,QAAQ,GAAG,SAAS,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,YAAY,EAAE,CAAC;IACxE,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAC3C,IAAI,CACuB,CAAC;IAC9B,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;IAC1C,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;IAE5C,WAAW,CAAC,SAAS,CACnB,MAAM,CAAC,aAAa,EACpB,CAAC,EACD,CAAC,EACD,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,YAAY,CACpB,CAAC;IACF,aAAa,CAAC,IAAI,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC;IAChD,aAAa,CAAC,KAAK,EAAE,CAAC;IAEtB,qCAAqC;IACrC,cAAc,GAAG,IAAI,CAAC;IACtB,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC;AAED,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"divControlTools.js","sourceRoot":"","sources":["../../../../src/Utils/segmentation/coreTools/divControlTools.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,SAAS,wBAAwB;IAC/B,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACrD,cAAc,CAAC,SAAS,GAAG,sBAAsB,CAAC;IAClD,cAAc,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IAC3C,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;IACpC,cAAc,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC;IAClC,cAAc,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;IAEpC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,SAAyB;IAC7C,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;IACxB,SAAS,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE;QAC3C,SAAS,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,MAA4B;IAClD,IAAI,cAAc,GAChB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,aAAa,GAA6B,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1E,aAAa,CAAC,IAAI,GAAG,EAAE,CAAC;IACxB,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC;IAChC,aAAa,CAAC,QAAQ,GAAG,SAAS,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,iBAAiB,EAAE,CAAC;IAC7E,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAC3C,IAAI,CACuB,CAAC;IAC9B,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;IAC1C,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;IAE5C,WAAW,CAAC,SAAS,CACnB,MAAM,CAAC,aAAa,EACpB,CAAC,EACD,CAAC,EACD,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,YAAY,CACpB,CAAC;IACF,aAAa,CAAC,IAAI,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC;IAChD,aAAa,CAAC,KAAK,EAAE,CAAC;IAEtB,qCAAqC;IACrC,cAAc,GAAG,IAAI,CAAC;IACtB,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC;AAED,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -1,11 +1,13 @@
1
1
  import { GUI } from "dat.gui";
2
- import { IDrawingEvents, IGUIStates, IProtected, INrrdStates, IGuiParameterSettings } from "./coreType";
2
+ import { IDrawingEvents, IProtected, IGuiParameterSettings } from "./coreType";
3
+ import type { GuiState } from "./GuiState";
4
+ import { NrrdState } from "./NrrdState";
3
5
  import { DragOperator } from "../DragOperator";
4
6
  interface IConfigGUI {
5
7
  modeFolder: GUI;
6
8
  dragOperator: DragOperator;
7
- nrrd_states: INrrdStates;
8
- gui_states: IGUIStates;
9
+ nrrd_states: NrrdState;
10
+ gui_states: GuiState;
9
11
  drawingCanvas: HTMLCanvasElement;
10
12
  drawingPrameters: IDrawingEvents;
11
13
  protectedData: IProtected;
@@ -15,8 +17,8 @@ interface IConfigGUI {
15
17
  mainPreSlices: any;
16
18
  removeDragMode: () => void;
17
19
  configDragMode: () => void;
18
- clearPaint: () => void;
19
- clearStoreImages: () => void;
20
+ clearActiveSlice: () => void;
21
+ clearActiveLayer: () => void;
20
22
  updateSlicesContrast: (value: number, flag: string) => void;
21
23
  setMainAreaSize: (factor: number) => void;
22
24
  resetPaintAreaUIPosition: () => void;
@@ -26,17 +28,15 @@ interface IConfigGUI {
26
28
  resetLayerCanvas: () => void;
27
29
  redrawDisplayCanvas: () => void;
28
30
  flipDisplayImageByAxis: () => void;
29
- filterDrawedImage: (axis: "x" | "y" | "z", sliceIndex: number) => {
30
- index: number;
31
- image: ImageData;
32
- } | undefined;
33
31
  setEmptyCanvasSize: (axis?: "x" | "y" | "z") => void;
34
- storeAllImages: (index: number, layer: string) => void;
32
+ syncLayerSliceData: (index: number, layer: string) => void;
35
33
  drawImageOnEmptyImage: (canvas: HTMLCanvasElement) => void;
36
- storeEachLayerImage: (index: number, layer: string) => void;
37
- storeImageToLayer: (index: number, canvas: HTMLCanvasElement) => ImageData;
38
34
  getRestLayer: () => string[];
39
35
  setIsDrawFalse: (target: number) => void;
36
+ undoLastPainting: () => void;
37
+ redoLastPainting: () => void;
38
+ resetZoom: () => void;
39
+ downloadCurrentMask: () => void;
40
40
  }
41
41
  declare function setupGui(configs: IConfigGUI): IGuiParameterSettings;
42
42
  declare function removeGuiFolderChilden(modeFolder: GUI): void;