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
package/dist/index.d.ts CHANGED
@@ -17,10 +17,13 @@ import { Copper3dTrackballControls } from "./Controls/Copper3dTrackballControls"
17
17
  import { MeshNodeTool } from "./Utils/MeshNodeTool";
18
18
  import { removeGuiFolderChilden } from "./Utils/segmentation/coreTools/gui";
19
19
  import { nrrdMeshesType, nrrdSliceType, SensorDecodedValue_kiwrious, SensorReadResult_kiwrious, HeartRateResult_kiwrious, loadingBarType, exportPaintImageType, IOptVTKLoader } from "./types/types";
20
- import { IPaintImage, ICommXYZ, IGUIStates, IGuiParameterSettings, INrrdStates } from "./Utils/segmentation/coreTools/coreType";
20
+ import { IPaintImage, ICommXYZ, IGUIStates, IGuiParameterSettings, INrrdStates, IGuiMeta } from "./Utils/segmentation/coreTools/coreType";
21
+ import { NrrdState } from "./Utils/segmentation/coreTools/NrrdState";
22
+ import { GuiState } from "./Utils/segmentation/coreTools/GuiState";
23
+ import type { ToolMode, IAnnotationCallbacks } from "./Utils/segmentation/coreTools/coreType";
21
24
  import { CHANNEL_COLORS, CHANNEL_HEX_COLORS, rgbaToHex, rgbaToCss } from "./Utils/segmentation/core/index";
22
25
  import type { LayerId, ChannelValue } from "./Utils/segmentation/core/index";
23
26
  import "./css/style.css";
24
- export declare const REVISION = "v3.0.1-beta";
27
+ export declare const REVISION = "v3.0.2-beta";
25
28
  export { copperRenderer, copperRendererOnDemond, copperMSceneRenderer, setHDRFilePath, addLabelToScene, convert3DPostoScreenPos, convertScreenPosto3DPos, addBoxHelper, fullScreenListenner, configKiwriousHeart, copperScene, copperSceneOnDemond, copperMScene, CameraViewPoint, kiwrious, NrrdTools, loading, Copper3dTrackballControls, createTexture2D_NRRD, MeshNodeTool, throttle, removeGuiFolderChilden, CHANNEL_COLORS, CHANNEL_HEX_COLORS, rgbaToHex, rgbaToCss, };
26
- export type { positionType, screenPosType, optsType, nrrdMeshesType, nrrdSliceType, SensorDecodedValue_kiwrious, SensorReadResult_kiwrious, HeartRateResult_kiwrious, loadingBarType, IPaintImage, exportPaintImageType, IOptVTKLoader, ICommXYZ, IGUIStates, IGuiParameterSettings, INrrdStates, LayerId, ChannelValue, };
29
+ export type { positionType, screenPosType, optsType, nrrdMeshesType, nrrdSliceType, SensorDecodedValue_kiwrious, SensorReadResult_kiwrious, HeartRateResult_kiwrious, loadingBarType, IPaintImage, exportPaintImageType, IOptVTKLoader, ICommXYZ, IGUIStates, IGuiParameterSettings, INrrdStates, NrrdState, GuiState, IGuiMeta, ToolMode, IAnnotationCallbacks, LayerId, ChannelValue, };
package/dist/index.js CHANGED
@@ -20,7 +20,7 @@ import { MeshNodeTool } from "./Utils/MeshNodeTool";
20
20
  import { removeGuiFolderChilden } from "./Utils/segmentation/coreTools/gui";
21
21
  import { CHANNEL_COLORS, CHANNEL_HEX_COLORS, rgbaToHex, rgbaToCss } from "./Utils/segmentation/core/index";
22
22
  import "./css/style.css";
23
- export const REVISION = "v3.0.1-beta";
23
+ export const REVISION = "v3.0.2-beta";
24
24
  console.log(`%cCopper3D Visualisation %cBeta:${REVISION}`, "padding: 3px;color:white; background:#023047", "padding: 3px;color:white; background:#f50a25");
25
25
  export { copperRenderer, copperRendererOnDemond, copperMSceneRenderer, setHDRFilePath, addLabelToScene, convert3DPostoScreenPos, convertScreenPosto3DPos, addBoxHelper, fullScreenListenner, configKiwriousHeart, copperScene, copperSceneOnDemond, copperMScene, CameraViewPoint, kiwrious, NrrdTools, loading, Copper3dTrackballControls, createTexture2D_NRRD, MeshNodeTool, throttle, removeGuiFolderChilden, CHANNEL_COLORS, CHANNEL_HEX_COLORS, rgbaToHex, rgbaToCss, };
26
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACL,eAAe,EAGf,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAY,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,QAAQ,MAAM,iCAAiC,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,iDAAiD;AAEjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAc5E,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAG3G,OAAO,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,QAAQ,GAAG,aAAa,CAAC;AAEtC,OAAO,CAAC,GAAG,CACT,mCAAmC,QAAQ,EAAE,EAC7C,8CAA8C,EAC9C,8CAA8C,CAC/C,CAAC;AAEF,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,SAAS,EACT,OAAO,EACP,yBAAyB,EACzB,oBAAoB,EACpB,YAAY,EACZ,QAAQ,EACR,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,SAAS,GACV,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACL,eAAe,EAGf,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAY,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,QAAQ,MAAM,iCAAiC,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,iDAAiD;AAEjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAiB5E,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAG3G,OAAO,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,QAAQ,GAAG,aAAa,CAAC;AAEtC,OAAO,CAAC,GAAG,CACT,mCAAmC,QAAQ,EAAE,EAC7C,8CAA8C,EAC9C,8CAA8C,CAC/C,CAAC;AAEF,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,SAAS,EACT,OAAO,EACP,yBAAyB,EACzB,oBAAoB,EACpB,YAAY,EACZ,QAAQ,EACR,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,SAAS,GACV,CAAC"}
@@ -1,18 +1,22 @@
1
- import { IProtected, IGUIStates, INrrdStates, ICursorPage, IConvertObjType, INewMaskData, IKeyBoardSettings } from "./coreTools/coreType";
1
+ import { IProtected, ICursorPage, IConvertObjType, INewMaskData, IKeyBoardSettings, IAnnotationCallbacks } from "./coreTools/coreType";
2
+ import { NrrdState } from "./coreTools/NrrdState";
3
+ import { GuiState } from "./coreTools/GuiState";
2
4
  import { MaskVolume } from "./core/index";
3
5
  export declare class CommToolsData {
4
6
  baseCanvasesSize: number;
5
7
  private _reusableSliceBuffer;
6
8
  private _reusableBufferWidth;
7
9
  private _reusableBufferHeight;
10
+ /** External annotation callbacks — set via draw() options */
11
+ protected annotationCallbacks: IAnnotationCallbacks;
8
12
  /** Whether the keyboard-config dialog is open (suppresses all shortcuts). */
9
13
  protected _configKeyBoard: boolean;
10
14
  /** Active keyboard shortcut bindings. */
11
15
  protected _keyboardSettings: IKeyBoardSettings;
12
- nrrd_states: INrrdStates;
13
- cursorPage: ICursorPage;
14
- gui_states: IGUIStates;
15
- protectedData: IProtected;
16
+ protected nrrd_states: NrrdState;
17
+ protected cursorPage: ICursorPage;
18
+ protected gui_states: GuiState;
19
+ protected protectedData: IProtected;
16
20
  constructor(container: HTMLElement, mainAreaContainer: HTMLElement, options?: {
17
21
  layers?: string[];
18
22
  });
@@ -56,9 +60,9 @@ export declare class CommToolsData {
56
60
  private generateSystemCanvases;
57
61
  private generateLayerTargets;
58
62
  /**
59
- * Rewrite this {clearPaint} function under DrawToolCore
63
+ * Rewrite this {clearActiveSlice} function under DrawToolCore
60
64
  */
61
- clearPaint(): void;
65
+ clearActiveSlice(): void;
62
66
  /**
63
67
  * Rewrite this {undoLastPainting} function under DrawToolCore
64
68
  */
@@ -68,9 +72,9 @@ export declare class CommToolsData {
68
72
  */
69
73
  redoLastPainting(): void;
70
74
  /**
71
- * Rewrite this {clearStoreImages} function under NrrdTools
75
+ * Rewrite this {clearActiveLayer} function under NrrdTools
72
76
  */
73
- clearStoreImages(): void;
77
+ clearActiveLayer(): void;
74
78
  /**
75
79
  * Rewrite this {resizePaintArea} function under NrrdTools
76
80
  */
@@ -103,6 +107,17 @@ export declare class CommToolsData {
103
107
  * Rewrite this {resetLayerCanvas} function under NrrdTools
104
108
  */
105
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;
106
121
  /**
107
122
  * Rewrite this {setSyncsliceNum} function under NrrdTools
108
123
  */
@@ -1,4 +1,6 @@
1
- import { IDragOpts, IDrawingEvents, IProtected, IGUIStates, INrrdStates } from "./coreTools/coreType";
1
+ import { IDragOpts, IDrawingEvents, IProtected } from "./coreTools/coreType";
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.
@@ -6,6 +6,8 @@ import { CrosshairTool } from "./tools/CrosshairTool";
6
6
  import { ContrastTool } from "./tools/ContrastTool";
7
7
  import { ZoomTool } from "./tools/ZoomTool";
8
8
  import { EraserTool } from "./tools/EraserTool";
9
+ import { PanTool } from "./tools/PanTool";
10
+ import { DrawingTool } from "./tools/DrawingTool";
9
11
  import { ImageStoreHelper } from "./tools/ImageStoreHelper";
10
12
  import { UndoManager } from "./core";
11
13
  export declare class DrawToolCore extends CommToolsData {
@@ -16,17 +18,17 @@ export declare class DrawToolCore extends CommToolsData {
16
18
  eraserUrls: string[];
17
19
  pencilUrls: string[];
18
20
  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
21
  protected eventRouter: EventRouter | null;
24
22
  protected sphereTool: SphereTool;
25
23
  protected crosshairTool: CrosshairTool;
26
24
  protected contrastTool: ContrastTool;
27
25
  protected zoomTool: ZoomTool;
28
26
  protected eraserTool: EraserTool;
27
+ protected panTool: PanTool;
28
+ protected drawingTool: DrawingTool;
29
29
  protected imageStoreHelper: ImageStoreHelper;
30
+ /** Slice index recorded when paintOnCanvas() starts, guards stale-click */
31
+ private paintSliceIndex;
30
32
  start: () => void;
31
33
  constructor(container: HTMLElement, options?: {
32
34
  layers?: string[];
@@ -37,15 +39,13 @@ export declare class DrawToolCore extends CommToolsData {
37
39
  setPencilIconUrls(urls: string[]): void;
38
40
  private setCurrentLayer;
39
41
  draw(opts?: IDrawOpts): void;
40
- drawCalSphereDown(x: number, y: number, sliceIndex: number, cal_position: "tumour" | "skin" | "nipple" | "ribcage"): void;
41
- drawCalSphereUp(): void;
42
42
  private zoomActionAfterDrawSphere;
43
43
  private clearSpherePrintStoreImages;
44
44
  private paintOnCanvas;
45
+ /** Extracted from paintOnCanvas() — handles sphere placement on left-click */
46
+ private handleSphereClick;
45
47
  /*************************************May consider to move outside *******************************************/
46
48
  private drawLine;
47
- private drawLinesOnLayer;
48
- private paintOnCanvasLayer;
49
49
  private initAllCanvas;
50
50
  private useEraser;
51
51
  configMouseZoomWheel(): (e: WheelEvent) => void;
@@ -58,6 +58,11 @@ export declare class DrawToolCore extends CommToolsData {
58
58
  private configMouseSphereWheel;
59
59
  drawCalculatorSphere(radius: number): void;
60
60
  drawSphere(mouseX: number, mouseY: number, radius: number): void;
61
+ /**
62
+ * Refresh sphere canvas from sphereMaskVolume for the current slice/axis.
63
+ * Called after view changes (slice switch, zoom, contrast, axis switch).
64
+ */
65
+ refreshSphereOverlay(): void;
61
66
  /**
62
67
  * Convert cursor point between axis views.
63
68
  * Delegated to CrosshairTool.
@@ -68,13 +73,17 @@ export declare class DrawToolCore extends CommToolsData {
68
73
  getRestLayer(): string[];
69
74
  /**************************** Undo/Redo functions (Phase 6 — Delta-based) ****************************/
70
75
  /**
71
- * Clear mask on current slice canvas.
76
+ * Clear the mask on the current slice canvas for the active layer ONLY.
77
+ *
78
+ * This method only clears the active layer's MaskVolume slice data for the
79
+ * currently viewed slice index. Other slices in the same layer remain intact.
80
+ * Other background layers are also left untouched.
81
+ * After clearing, all layer canvases are re-rendered from the `MaskVolume`
82
+ * to keep the visuals in sync.
72
83
  *
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.
84
+ * The operation is recorded to the UndoManager to allow for user rollback.
76
85
  */
77
- clearPaint(): void;
86
+ clearActiveSlice(): void;
78
87
  /**
79
88
  * Undo the last drawing operation on the active layer.
80
89
  * Restores the MaskVolume slice to its pre-draw state, re-renders
@@ -93,9 +102,7 @@ export declare class DrawToolCore extends CommToolsData {
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;
@@ -1,9 +1,10 @@
1
1
  import { nrrdSliceType, storeExportPaintImageType, loadingBarType } from "../../types/types";
2
2
  import { GUI } from "dat.gui";
3
- import { IMaskData, IDragOpts, IGuiParameterSettings, IKeyBoardSettings } from "./coreTools/coreType";
3
+ import { IMaskData, IDragOpts, IKeyBoardSettings, ToolMode, IGuiMeta } from "./coreTools/coreType";
4
4
  import { DragOperator } from "./DragOperator";
5
5
  import { DrawToolCore } from "./DrawToolCore";
6
6
  import type { ChannelValue, RGBAColor, ChannelColorMap } from "./core";
7
+ import type { SphereType } from "./tools/SphereTool";
7
8
  /**
8
9
  * Core NRRD annotation tool for medical image segmentation.
9
10
  *
@@ -25,6 +26,10 @@ export declare class NrrdTools extends DrawToolCore {
25
26
  private guiParameterSettings;
26
27
  private _sliceRAFId;
27
28
  private _pendingSliceStep;
29
+ /** Whether calculator mode is active (not part of gui_states interface) */
30
+ private _calculatorActive;
31
+ /** Stored closure callbacks from gui.ts setupGui() */
32
+ private guiCallbacks;
28
33
  constructor(container: HTMLDivElement, options?: {
29
34
  layers?: string[];
30
35
  });
@@ -49,10 +54,11 @@ export declare class NrrdTools extends DrawToolCore {
49
54
  * @param gui GUI
50
55
  */
51
56
  setupGUI(gui: GUI): void;
52
- getGuiSettings(): {
53
- guiState: import("./coreTools/coreType").IGUIStates;
54
- guiSetting: IGuiParameterSettings | undefined;
55
- };
57
+ /**
58
+ * Sync guiParameterSettings with current volume metadata.
59
+ * Called internally when slices are loaded or switched.
60
+ */
61
+ private syncGuiParameterSettings;
56
62
  /**
57
63
  * Set the active layer and update fillColor/brushColor to match the active channel.
58
64
  */
@@ -61,6 +67,97 @@ export declare class NrrdTools extends DrawToolCore {
61
67
  * Set the active channel (1-8) and update fillColor/brushColor.
62
68
  */
63
69
  setActiveChannel(channel: ChannelValue): void;
70
+ /**
71
+ * Set the active sphere type for the SphereTool.
72
+ * Replaces direct mutation of `gui_states.activeSphereType`.
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * nrrdTools.setActiveSphereType('nipple');
77
+ * ```
78
+ */
79
+ setActiveSphereType(type: SphereType): void;
80
+ /**
81
+ * Get the currently active sphere type.
82
+ */
83
+ getActiveSphereType(): SphereType;
84
+ /**
85
+ * Set the current tool mode. Handles deactivation of the previous mode
86
+ * and activation of the new mode, including all gui.ts side-effects.
87
+ *
88
+ * Replaces direct mutation of `guiSettings.value.guiState["pencil"]` etc.
89
+ * from Vue components.
90
+ */
91
+ setMode(mode: ToolMode): void;
92
+ /**
93
+ * Get the current tool mode based on gui_states flags.
94
+ */
95
+ getMode(): ToolMode;
96
+ /**
97
+ * Check if calculator mode is active.
98
+ */
99
+ isCalculatorActive(): boolean;
100
+ /**
101
+ * Set mask overlay opacity.
102
+ * @param value Opacity value [0.1, 1]
103
+ */
104
+ setOpacity(value: number): void;
105
+ /**
106
+ * Get the current mask overlay opacity.
107
+ */
108
+ getOpacity(): number;
109
+ /**
110
+ * Set brush and eraser size, and trigger cursor update.
111
+ * @param size Brush size [5, 50]
112
+ */
113
+ setBrushSize(size: number): void;
114
+ /**
115
+ * Get the current brush/eraser size.
116
+ */
117
+ getBrushSize(): number;
118
+ /**
119
+ * Set window high (image contrast) value.
120
+ * Call finishWindowAdjustment() when the user finishes dragging.
121
+ */
122
+ setWindowHigh(value: number): void;
123
+ /**
124
+ * Set window low (image center) value.
125
+ * Call finishWindowAdjustment() when the user finishes dragging.
126
+ */
127
+ setWindowLow(value: number): void;
128
+ /**
129
+ * Finish a window/contrast adjustment (repaint all contrast slices).
130
+ */
131
+ finishWindowAdjustment(): void;
132
+ /**
133
+ * Adjust contrast by delta, used for drag-based contrast adjustment.
134
+ * @param type "windowHigh" or "windowLow"
135
+ * @param delta Delta amount to adjust
136
+ */
137
+ adjustContrast(type: "windowHigh" | "windowLow", delta: number): void;
138
+ /**
139
+ * Get slider metadata for UI configuration.
140
+ * @param key Slider key: "globalAlpha", "brushAndEraserSize", "windowHigh", "windowLow"
141
+ * @returns IGuiMeta with min, max, step, and current value
142
+ */
143
+ getSliderMeta(key: string): IGuiMeta | null;
144
+ /**
145
+ * Set the pencil stroke color.
146
+ */
147
+ setPencilColor(hex: string): void;
148
+ /**
149
+ * Get the current pencil stroke color.
150
+ */
151
+ getPencilColor(): string;
152
+ /**
153
+ * Execute a named UI action.
154
+ * @param action Action name
155
+ *
156
+ * Renamed from original gui_states methods:
157
+ * - "clearActiveSliceMask" (was "clear") — clear annotations on current slice
158
+ * - "clearActiveLayerMask" (was "clearAll") — clear annotations on all slices for active layer
159
+ */
160
+ executeAction(action: "undo" | "redo" | "clearActiveSliceMask" | "clearActiveLayerMask" | "resetZoom" | "downloadCurrentMask"): void;
64
161
  /**
65
162
  * Sync brush/fill color from the active layer's volume color map.
66
163
  * Falls back to global CHANNEL_HEX_COLORS if volume not available.
@@ -331,6 +428,17 @@ export declare class NrrdTools extends DrawToolCore {
331
428
  getVoxelSpacing(): number[];
332
429
  getSpaceOrigin(): number[];
333
430
  getMaskData(): IMaskData;
431
+ /**
432
+ * Programmatically place a calculator sphere at the given position.
433
+ *
434
+ * Replicates the full mouse-down → mouse-up flow (handleSphereClick + pointerup)
435
+ * so that backend-supplied sphere data is stored identically to a manual click.
436
+ *
437
+ * @param x - X coordinate in unscaled (original) image space
438
+ * @param y - Y coordinate in unscaled (original) image space
439
+ * @param sliceIndex - Target slice index (z-axis)
440
+ * @param cal_position - Sphere type to place
441
+ */
334
442
  setCalculateDistanceSphere(x: number, y: number, sliceIndex: number, cal_position: "tumour" | "skin" | "nipple" | "ribcage"): void;
335
443
  /**
336
444
  * Switch all contrast slices' orientation
@@ -339,15 +447,22 @@ export declare class NrrdTools extends DrawToolCore {
339
447
  setSliceOrientation(axisTo: "x" | "y" | "z"): void;
340
448
  addSkip(index: number): void;
341
449
  removeSkip(index: number): void;
342
- clear(): void;
450
+ /**
451
+ * Reset the entire NrrdTools instance comprehensively.
452
+ * This clears ALL data across ALL layers globally, resets the Canvas visuals,
453
+ * undo/redo history, volume models, index parameters, and sphere overlays.
454
+ * Primarily used when switching cases/datasets or when a completely fresh state is needed.
455
+ * It is heavier than `clearActiveLayer` or `clearActiveSlice`.
456
+ */
457
+ reset(): void;
343
458
  setSliceMoving(step: number): void;
344
459
  setMainAreaSize(factor: number): void;
345
460
  getContainer(): HTMLElement;
346
461
  getDrawingCanvas(): HTMLCanvasElement;
347
- getNrrdToolsSettings(): import("./coreTools/coreType").INrrdStates;
462
+ getNrrdToolsSettings(): import("./coreTools/NrrdState").NrrdState;
348
463
  getMaxSliceNum(): number[];
349
464
  getCurrentSlicesNumAndContrastNum(): {
350
- currentIndex: number;
465
+ currentSliceIndex: number;
351
466
  contrastIndex: number;
352
467
  };
353
468
  getCurrentSliceIndex(): number;
@@ -370,7 +485,7 @@ export declare class NrrdTools extends DrawToolCore {
370
485
  private updateMaxIndex;
371
486
  /**
372
487
  * Update the original canvas size, allow set to threejs load one (pixel distance not the mm).
373
- * Then update the changedWidth and changedHeight based on the sizeFoctor.
488
+ * Then update the changedWidth and changedHeight based on the sizeFactor.
374
489
  */
375
490
  updateOriginAndChangedWH(): void;
376
491
  /**
@@ -379,7 +494,14 @@ export declare class NrrdTools extends DrawToolCore {
379
494
  */
380
495
  setSyncsliceNum(): void;
381
496
  appendLoadingbar(loadingbar: HTMLDivElement): void;
382
- clearStoreImages(): void;
497
+ /**
498
+ * Clear all annotations on the currently active layer across its entire 3D volume.
499
+ * This resets all voxels globally for the active layer's `MaskVolume` (depth, width, height)
500
+ * and triggers the `onClearLayerVolume` event to sync the wiped volume to the backend.
501
+ * It also clears the undo/redo stack for the active layer ONLY.
502
+ * Other background layers are not impacted by this operation.
503
+ */
504
+ clearActiveLayer(): void;
383
505
  /**
384
506
  * Reset the draw and display canvases layout after mouse pan.
385
507
  * If no params in, then center the draw and display canvases.
@@ -391,6 +513,26 @@ export declare class NrrdTools extends DrawToolCore {
391
513
  * Clear masks on drawingCanvas layers.
392
514
  */
393
515
  resetLayerCanvas(): void;
516
+ /**
517
+ * Enter sphere mode.
518
+ *
519
+ * Clears all layer canvases and the master composite canvas so that
520
+ * only the sphere overlay is visible. Does NOT touch MaskVolume data.
521
+ * Also disables drag mode to prevent slice dragging conflicts.
522
+ *
523
+ * Called when sphere mode is toggled on (keyboard shortcut or GUI).
524
+ */
525
+ enterSphereMode(): void;
526
+ /**
527
+ * Exit sphere mode.
528
+ *
529
+ * Clears sphere overlay, restores all layer MaskVolume data onto
530
+ * their canvases by temporarily lifting the sphere guard in
531
+ * reloadMasksFromVolume and calling it.
532
+ *
533
+ * Called when sphere mode is toggled off (keyboard shortcut or GUI).
534
+ */
535
+ exitSphereMode(): void;
394
536
  redrawMianPreOnDisplayCanvas(): void;
395
537
  /**
396
538
  * Resize the draw and display canvas size based on the input size factor number.
@@ -317,7 +317,7 @@ export declare class MaskVolume {
317
317
  *
318
318
  * @example
319
319
  * ```ts
320
- * vol.clear();
320
+ * vol.reset();
321
321
  * vol.getVoxel(256, 256, 50); // 0
322
322
  * ```
323
323
  */
@@ -40,7 +40,7 @@ export declare class UndoManager {
40
40
  redo(): MaskDelta | undefined;
41
41
  canUndo(): boolean;
42
42
  canRedo(): boolean;
43
- /** Clear undo and redo stacks for a specific layer (called on clearStoreImages). */
43
+ /** Clear undo and redo stacks for a specific layer (called on clearActiveLayer). */
44
44
  clearLayer(layer: string): void;
45
45
  /** Clear all stacks for all layers (called on full dataset reload). */
46
46
  clearAll(): void;
@@ -70,7 +70,5 @@
70
70
  export type { Dimensions, RGBAColor, ChannelColorMap, SliceRenderOptions, LayerId, ChannelValue, } from './types';
71
71
  export { RenderMode, MASK_CHANNEL_COLORS, MASK_CHANNEL_CSS_COLORS, CHANNEL_COLORS, CHANNEL_HEX_COLORS, rgbaToHex, rgbaToCss, } from './types';
72
72
  export { MaskVolume } from './MaskVolume';
73
- export type { IPaintImage, IPaintImages } from './MigrationUtils';
74
- export { convertIPaintImagesToVolume, convertVolumeToIPaintImages, } from './MigrationUtils';
75
73
  export type { MaskDelta } from './UndoManager';
76
74
  export { UndoManager } from './UndoManager';
@@ -0,0 +1,22 @@
1
+ /**
2
+ * GuiState — Grouped state management for GUI configuration.
3
+ *
4
+ * Replaces the flat IGUIStates object with 4 semantic sub-groups:
5
+ * - mode: Tool mode flags (pencil/eraser/sphere)
6
+ * - drawing: Brush/pencil appearance and behavior
7
+ * - viewConfig: UI layout and interaction parameters
8
+ * - layerChannel: Active layer, channel, and visibility
9
+ */
10
+ import type { IToolModeState, IDrawingConfig, IViewConfig, ILayerChannelState } from "./coreType";
11
+ export declare class GuiState {
12
+ readonly mode: IToolModeState;
13
+ readonly drawing: IDrawingConfig;
14
+ readonly viewConfig: IViewConfig;
15
+ readonly layerChannel: ILayerChannelState;
16
+ constructor(options?: {
17
+ defaultPaintCursor?: string;
18
+ defaultFillColor?: string;
19
+ defaultBrushColor?: string;
20
+ layers?: string[];
21
+ });
22
+ }
@@ -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
+ }