copper3d 1.15.23 → 2.0.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 (94) hide show
  1. package/README.md +2 -2
  2. package/dist/Loader/copperNrrdLoader.d.ts +1 -1
  3. package/dist/Renderer/baseRenderer.d.ts +2 -2
  4. package/dist/Renderer/baseRenderer.js +2 -2
  5. package/dist/Renderer/baseRenderer.js.map +1 -1
  6. package/dist/Renderer/copperMSceneRenderer.d.ts +2 -2
  7. package/dist/Renderer/copperMSceneRenderer.js +2 -2
  8. package/dist/Renderer/copperMSceneRenderer.js.map +1 -1
  9. package/dist/Renderer/copperRenderer.d.ts +4 -4
  10. package/dist/Renderer/copperRenderer.js +3 -3
  11. package/dist/Renderer/copperRenderer.js.map +1 -1
  12. package/dist/Renderer/copperRendererOnDemond.d.ts +4 -5
  13. package/dist/Renderer/copperRendererOnDemond.js +3 -3
  14. package/dist/Renderer/copperRendererOnDemond.js.map +1 -1
  15. package/dist/Scene/baseScene.d.ts +2 -2
  16. package/dist/Scene/baseScene.js +2 -2
  17. package/dist/Scene/baseScene.js.map +1 -1
  18. package/dist/Scene/commonSceneMethod.d.ts +1 -1
  19. package/dist/Scene/commonSceneMethod.js +1 -1
  20. package/dist/Scene/commonSceneMethod.js.map +1 -1
  21. package/dist/Scene/copperMScene.d.ts +2 -2
  22. package/dist/Scene/copperMScene.js +2 -2
  23. package/dist/Scene/copperMScene.js.map +1 -1
  24. package/dist/Scene/copperScene.d.ts +2 -2
  25. package/dist/Scene/copperScene.js +2 -2
  26. package/dist/Scene/copperScene.js.map +1 -1
  27. package/dist/Scene/copperSceneOnDemond.d.ts +2 -2
  28. package/dist/Scene/copperSceneOnDemond.js +2 -2
  29. package/dist/Scene/copperSceneOnDemond.js.map +1 -1
  30. package/dist/Utils/add3DLabel.d.ts +2 -2
  31. package/dist/Utils/segmentation/CommToolsData.d.ts +71 -0
  32. package/dist/Utils/segmentation/CommToolsData.js +267 -0
  33. package/dist/Utils/segmentation/CommToolsData.js.map +1 -0
  34. package/dist/Utils/segmentation/DragOperator.d.ts +30 -0
  35. package/dist/Utils/segmentation/DragOperator.js +243 -0
  36. package/dist/Utils/segmentation/DragOperator.js.map +1 -0
  37. package/dist/Utils/segmentation/DrawToolCore.d.ts +78 -0
  38. package/dist/Utils/segmentation/DrawToolCore.js +1083 -0
  39. package/dist/Utils/segmentation/DrawToolCore.js.map +1 -0
  40. package/dist/Utils/segmentation/NrrdTools.d.ts +178 -0
  41. package/dist/Utils/segmentation/NrrdTools.js +965 -0
  42. package/dist/Utils/segmentation/NrrdTools.js.map +1 -0
  43. package/dist/Utils/segmentation/coreTools/archive.d.ts +1 -0
  44. package/dist/Utils/segmentation/coreTools/archive.js +23 -0
  45. package/dist/Utils/segmentation/coreTools/archive.js.map +1 -0
  46. package/dist/Utils/segmentation/coreTools/coreType.d.ts +206 -0
  47. package/dist/Utils/segmentation/coreTools/coreType.js +2 -0
  48. package/dist/Utils/segmentation/coreTools/coreType.js.map +1 -0
  49. package/dist/Utils/segmentation/coreTools/divControlTools.d.ts +19 -0
  50. package/dist/Utils/segmentation/coreTools/divControlTools.js +48 -0
  51. package/dist/Utils/segmentation/coreTools/divControlTools.js.map +1 -0
  52. package/dist/Utils/segmentation/coreTools/gui.d.ts +123 -0
  53. package/dist/Utils/segmentation/coreTools/gui.js +306 -0
  54. package/dist/Utils/segmentation/coreTools/gui.js.map +1 -0
  55. package/dist/Utils/utils.d.ts +1 -1
  56. package/dist/Utils/utils.js +25 -10
  57. package/dist/Utils/utils.js.map +1 -1
  58. package/dist/Utils/workers/reformatSaveDataWorker.d.ts +3 -3
  59. package/dist/Utils/workers/reformatSaveDataWorker.js.map +1 -1
  60. package/dist/bundle.esm.js +2576 -2228
  61. package/dist/bundle.umd.js +2577 -2228
  62. package/dist/css/style.css +2 -18
  63. package/dist/index.d.ts +13 -11
  64. package/dist/index.js +11 -10
  65. package/dist/index.js.map +1 -1
  66. package/dist/types/Loader/copperNrrdLoader.d.ts +1 -1
  67. package/dist/types/Renderer/baseRenderer.d.ts +2 -2
  68. package/dist/types/Renderer/copperMSceneRenderer.d.ts +2 -2
  69. package/dist/types/Renderer/copperRenderer.d.ts +4 -4
  70. package/dist/types/Renderer/copperRendererOnDemond.d.ts +4 -5
  71. package/dist/types/Scene/baseScene.d.ts +2 -2
  72. package/dist/types/Scene/commonSceneMethod.d.ts +1 -1
  73. package/dist/types/Scene/copperMScene.d.ts +2 -2
  74. package/dist/types/Scene/copperScene.d.ts +2 -2
  75. package/dist/types/Scene/copperSceneOnDemond.d.ts +2 -2
  76. package/dist/types/Utils/add3DLabel.d.ts +2 -2
  77. package/dist/types/Utils/segmentation/CommToolsData.d.ts +71 -0
  78. package/dist/types/Utils/segmentation/DragOperator.d.ts +30 -0
  79. package/dist/types/Utils/segmentation/DrawToolCore.d.ts +78 -0
  80. package/dist/types/Utils/segmentation/NrrdTools.d.ts +178 -0
  81. package/dist/types/Utils/segmentation/coreTools/archive.d.ts +1 -0
  82. package/dist/types/Utils/segmentation/coreTools/coreType.d.ts +206 -0
  83. package/dist/types/Utils/segmentation/coreTools/divControlTools.d.ts +19 -0
  84. package/dist/types/Utils/segmentation/coreTools/gui.d.ts +123 -0
  85. package/dist/types/Utils/utils.d.ts +1 -1
  86. package/dist/types/Utils/workers/reformatSaveDataWorker.d.ts +3 -3
  87. package/dist/types/index.d.ts +13 -11
  88. package/dist/types/types/types.d.ts +4 -38
  89. package/dist/types/types.d.ts +4 -38
  90. package/package.json +1 -1
  91. package/dist/Utils/nrrd_tool.d.ts +0 -269
  92. package/dist/Utils/nrrd_tool.js +0 -2480
  93. package/dist/Utils/nrrd_tool.js.map +0 -1
  94. package/dist/types/Utils/nrrd_tool.d.ts +0 -269
@@ -0,0 +1,71 @@
1
+ import { IProtected, IGUIStates, INrrdStates, ICursorPage, IPaintImages, IConvertObjType } from "./coreTools/coreType";
2
+ export declare class CommToolsData {
3
+ baseCanvasesSize: number;
4
+ nrrd_states: INrrdStates;
5
+ cursorPage: ICursorPage;
6
+ gui_states: IGUIStates;
7
+ protectedData: IProtected;
8
+ constructor(container: HTMLElement, mainAreaContainer: HTMLElement);
9
+ private generateCanvases;
10
+ /**
11
+ * Rewrite this {clearPaint} function under DrawToolCore
12
+ */
13
+ clearPaint(): void;
14
+ /**
15
+ * Rewrite this {undoLastPainting} function under DrawToolCore
16
+ */
17
+ undoLastPainting(): void;
18
+ /**
19
+ * Rewrite this {clearStoreImages} function under NrrdTools
20
+ */
21
+ clearStoreImages(): void;
22
+ /**
23
+ * Rewrite this {resizePaintArea} function under NrrdTools
24
+ */
25
+ resizePaintArea(factor: number): void;
26
+ /**
27
+ * Rewrite this {setIsDrawFalse} function under NrrdTools
28
+ */
29
+ setIsDrawFalse(target: number): void;
30
+ /**
31
+ * Rewrite this {updateOriginAndChangedWH} function under NrrdTools
32
+ */
33
+ updateOriginAndChangedWH(): void;
34
+ /**
35
+ * Rewrite this {flipDisplayImageByAxis} function under NrrdTools
36
+ */
37
+ flipDisplayImageByAxis(): void;
38
+ /**
39
+ * Rewrite this {resetPaintAreaUIPosition} function under NrrdTools
40
+ */
41
+ resetPaintAreaUIPosition(l?: number, t?: number): void;
42
+ /**
43
+ * Rewrite this {resetPaintAreaUIPosition} function under NrrdTools
44
+ */
45
+ setEmptyCanvasSize(axis?: "x" | "y" | "z"): void;
46
+ /**
47
+ * Rewrite this {convertCursorPoint} function under NrrdTools
48
+ */
49
+ convertCursorPoint(from: "x" | "y" | "z", to: "x" | "y" | "z", cursorNumX: number, cursorNumY: number, currentSliceIndex: number): IConvertObjType | undefined;
50
+ /**
51
+ * Rewrite this {resetLayerCanvas} function under NrrdTools
52
+ */
53
+ resetLayerCanvas(): void;
54
+ /**
55
+ * Rewrite this {setSyncsliceNum} function under NrrdTools
56
+ */
57
+ setSyncsliceNum(): void;
58
+ /**
59
+ * Rewrite this {redrawDisplayCanvas} function under NrrdTools
60
+ */
61
+ redrawDisplayCanvas(): void;
62
+ /**
63
+ * Get a painted mask image (IPaintImage) based on current axis and input slice index.
64
+ *
65
+ * @param axis "x" | "y" | "z"
66
+ * @param sliceIndex number
67
+ * @param paintedImages IPaintImages, All painted mask images.
68
+ * @returns
69
+ */
70
+ filterDrawedImage(axis: "x" | "y" | "z", sliceIndex: number, paintedImages: IPaintImages): import("./coreTools/coreType").IPaintImage;
71
+ }
@@ -0,0 +1,267 @@
1
+ import { switchPencilIcon } from "../utils";
2
+ import { enableDownload } from "./coreTools/divControlTools";
3
+ export class CommToolsData {
4
+ constructor(container, mainAreaContainer) {
5
+ this.baseCanvasesSize = 1;
6
+ this.nrrd_states = {
7
+ originWidth: 0,
8
+ originHeight: 0,
9
+ nrrd_x_mm: 0,
10
+ nrrd_y_mm: 0,
11
+ nrrd_z_mm: 0,
12
+ nrrd_x_pixel: 0,
13
+ nrrd_y_pixel: 0,
14
+ nrrd_z_pixel: 0,
15
+ changedWidth: 0,
16
+ changedHeight: 0,
17
+ oldIndex: 0,
18
+ currentIndex: 0,
19
+ maxIndex: 0,
20
+ minIndex: 0,
21
+ RSARatio: 0,
22
+ voxelSpacing: [],
23
+ spaceOrigin: [],
24
+ dimensions: [],
25
+ loadMaskJson: false,
26
+ ratios: { x: 1, y: 1, z: 1 },
27
+ sharedPlace: { x: [-1], y: [-1], z: [-1] },
28
+ contrastNum: 0,
29
+ showContrast: false,
30
+ enableCursorChoose: false,
31
+ isCursorSelect: false,
32
+ cursorPageX: 0,
33
+ cursorPageY: 0,
34
+ sphereOrigin: { x: [0, 0, 0], y: [0, 0, 0], z: [0, 0, 0] },
35
+ spherePlanB: true,
36
+ sphereRadius: 10,
37
+ Mouse_Over_x: 0,
38
+ Mouse_Over_y: 0,
39
+ Mouse_Over: false,
40
+ stepClear: 1,
41
+ sizeFoctor: this.baseCanvasesSize,
42
+ clearAllFlag: false,
43
+ previousPanelL: -99999,
44
+ previousPanelT: -99999,
45
+ switchSliceFlag: false,
46
+ labels: ["label1", "label2", "label3"],
47
+ getMask: (mask, sliceId, label, width, height, clearAllFlag) => { },
48
+ getSphere: (sphereOrigin, sphereRadius) => { },
49
+ drawStartPos: { x: 1, y: 1 },
50
+ };
51
+ this.cursorPage = {
52
+ x: {
53
+ cursorPageX: 0,
54
+ cursorPageY: 0,
55
+ index: 0,
56
+ updated: false,
57
+ },
58
+ y: {
59
+ cursorPageX: 0,
60
+ cursorPageY: 0,
61
+ index: 0,
62
+ updated: false,
63
+ },
64
+ z: {
65
+ cursorPageX: 0,
66
+ cursorPageY: 0,
67
+ index: 0,
68
+ updated: false,
69
+ },
70
+ };
71
+ this.gui_states = {
72
+ mainAreaSize: 3,
73
+ dragSensitivity: 75,
74
+ Eraser: false,
75
+ globalAlpha: 0.7,
76
+ lineWidth: 2,
77
+ color: "#f50a33",
78
+ segmentation: true,
79
+ fillColor: "#00ff00",
80
+ brushColor: "#00ff00",
81
+ brushAndEraserSize: 15,
82
+ cursor: "dot",
83
+ label: "label1",
84
+ sphere: false,
85
+ readyToUpdate: true,
86
+ defaultPaintCursor: switchPencilIcon("dot"),
87
+ max_sensitive: 100,
88
+ // EraserSize: 25,
89
+ clear: () => {
90
+ this.clearPaint();
91
+ },
92
+ clearAll: () => {
93
+ const text = "Are you sure remove annotations on All slice?";
94
+ if (confirm(text) === true) {
95
+ this.nrrd_states.clearAllFlag = true;
96
+ this.clearPaint();
97
+ this.clearStoreImages();
98
+ }
99
+ this.nrrd_states.clearAllFlag = false;
100
+ },
101
+ undo: () => {
102
+ this.undoLastPainting();
103
+ },
104
+ downloadCurrentMask: () => {
105
+ const config = {
106
+ axis: this.protectedData.axis,
107
+ currentIndex: this.nrrd_states.currentIndex,
108
+ drawingCanvas: this.protectedData.canvases.drawingCanvas,
109
+ originWidth: this.nrrd_states.originWidth,
110
+ originHeight: this.nrrd_states.originHeight,
111
+ };
112
+ enableDownload(config);
113
+ },
114
+ resetZoom: () => {
115
+ this.nrrd_states.sizeFoctor = this.baseCanvasesSize;
116
+ this.gui_states.mainAreaSize = this.baseCanvasesSize;
117
+ this.resizePaintArea(this.nrrd_states.sizeFoctor);
118
+ this.resetPaintAreaUIPosition();
119
+ },
120
+ };
121
+ const canvases = this.generateCanvases();
122
+ this.protectedData = {
123
+ container,
124
+ mainAreaContainer,
125
+ allSlicesArray: [],
126
+ displaySlices: [],
127
+ backUpDisplaySlices: [],
128
+ skipSlicesDic: {},
129
+ currentShowingSlice: undefined,
130
+ mainPreSlices: undefined,
131
+ Is_Shift_Pressed: false,
132
+ Is_Draw: false,
133
+ axis: "z",
134
+ maskData: {
135
+ // used to store one label all marks
136
+ paintImagesLabel1: { x: [], y: [], z: [] },
137
+ paintImagesLabel2: { x: [], y: [], z: [] },
138
+ paintImagesLabel3: { x: [], y: [], z: [] },
139
+ // used to store display marks with multiple labels
140
+ paintImages: { x: [], y: [], z: [] },
141
+ },
142
+ canvases: {
143
+ originCanvas: null,
144
+ drawingCanvas: canvases[0],
145
+ displayCanvas: canvases[1],
146
+ drawingCanvasLayerMaster: canvases[2],
147
+ drawingCanvasLayerOne: canvases[3],
148
+ drawingCanvasLayerTwo: canvases[4],
149
+ drawingCanvasLayerThree: canvases[5],
150
+ drawingSphereCanvas: canvases[6],
151
+ emptyCanvas: canvases[7],
152
+ },
153
+ ctxes: {
154
+ drawingCtx: canvases[0].getContext("2d"),
155
+ displayCtx: canvases[1].getContext("2d"),
156
+ drawingLayerMasterCtx: canvases[2].getContext("2d"),
157
+ drawingLayerOneCtx: canvases[3].getContext("2d"),
158
+ drawingLayerTwoCtx: canvases[4].getContext("2d"),
159
+ drawingLayerThreeCtx: canvases[5].getContext("2d"),
160
+ drawingSphereCtx: canvases[6].getContext("2d"),
161
+ emptyCtx: canvases[7].getContext("2d", {
162
+ willReadFrequently: true,
163
+ }),
164
+ },
165
+ };
166
+ }
167
+ generateCanvases() {
168
+ const canvasArr = [];
169
+ for (let i = 0; i < 8; i++) {
170
+ const canvas = document.createElement("canvas");
171
+ canvasArr.push(canvas);
172
+ }
173
+ return canvasArr;
174
+ }
175
+ /**
176
+ * Rewrite this {clearPaint} function under DrawToolCore
177
+ */
178
+ clearPaint() {
179
+ throw new Error("Child class must implement abstract clearPaint, currently you can find it in DrawToolCore.");
180
+ }
181
+ /**
182
+ * Rewrite this {undoLastPainting} function under DrawToolCore
183
+ */
184
+ undoLastPainting() {
185
+ throw new Error("Child class must implement abstract undoLastPainting, currently you can find it in DrawToolCore.");
186
+ }
187
+ /**
188
+ * Rewrite this {clearStoreImages} function under NrrdTools
189
+ */
190
+ clearStoreImages() {
191
+ throw new Error("Child class must implement abstract clearStoreImages, currently you can find it in NrrdTools.");
192
+ }
193
+ /**
194
+ * Rewrite this {resizePaintArea} function under NrrdTools
195
+ */
196
+ resizePaintArea(factor) {
197
+ throw new Error("Child class must implement abstract resizePaintArea, currently you can find it in NrrdTools.");
198
+ }
199
+ /**
200
+ * Rewrite this {setIsDrawFalse} function under NrrdTools
201
+ */
202
+ setIsDrawFalse(target) {
203
+ throw new Error("Child class must implement abstract setIsDrawFalse, currently you can find it in NrrdTools.");
204
+ }
205
+ /**
206
+ * Rewrite this {updateOriginAndChangedWH} function under NrrdTools
207
+ */
208
+ updateOriginAndChangedWH() {
209
+ throw new Error("Child class must implement abstract updateOriginAndChangedWH, currently you can find it in NrrdTools.");
210
+ }
211
+ /**
212
+ * Rewrite this {flipDisplayImageByAxis} function under NrrdTools
213
+ */
214
+ flipDisplayImageByAxis() {
215
+ throw new Error("Child class must implement abstract flipDisplayImageByAxis, currently you can find it in NrrdTools.");
216
+ }
217
+ /**
218
+ * Rewrite this {resetPaintAreaUIPosition} function under NrrdTools
219
+ */
220
+ resetPaintAreaUIPosition(l, t) {
221
+ throw new Error("Child class must implement abstract resetPaintAreaUIPosition, currently you can find it in NrrdTools.");
222
+ }
223
+ /**
224
+ * Rewrite this {resetPaintAreaUIPosition} function under NrrdTools
225
+ */
226
+ setEmptyCanvasSize(axis) {
227
+ throw new Error("Child class must implement abstract setEmptyCanvasSize, currently you can find it in NrrdTools.");
228
+ }
229
+ /**
230
+ * Rewrite this {convertCursorPoint} function under NrrdTools
231
+ */
232
+ convertCursorPoint(from, to, cursorNumX, cursorNumY, currentSliceIndex) {
233
+ throw new Error("Child class must implement abstract convertCursorPoint, currently you can find it in NrrdTools.");
234
+ }
235
+ /**
236
+ * Rewrite this {resetLayerCanvas} function under NrrdTools
237
+ */
238
+ resetLayerCanvas() {
239
+ throw new Error("Child class must implement abstract resetLayerCanvas, currently you can find it in NrrdTools.");
240
+ }
241
+ /**
242
+ * Rewrite this {setSyncsliceNum} function under NrrdTools
243
+ */
244
+ setSyncsliceNum() {
245
+ throw new Error("Child class must implement abstract setSyncsliceNum, currently you can find it in NrrdTools.");
246
+ }
247
+ /**
248
+ * Rewrite this {redrawDisplayCanvas} function under NrrdTools
249
+ */
250
+ redrawDisplayCanvas() {
251
+ throw new Error("Child class must implement abstract redrawDisplayCanvas, currently you can find it in NrrdTools.");
252
+ }
253
+ /**
254
+ * Get a painted mask image (IPaintImage) based on current axis and input slice index.
255
+ *
256
+ * @param axis "x" | "y" | "z"
257
+ * @param sliceIndex number
258
+ * @param paintedImages IPaintImages, All painted mask images.
259
+ * @returns
260
+ */
261
+ filterDrawedImage(axis, sliceIndex, paintedImages) {
262
+ return paintedImages[axis].filter((item) => {
263
+ return item.index === sliceIndex;
264
+ })[0];
265
+ }
266
+ }
267
+ //# sourceMappingURL=CommToolsData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommToolsData.js","sourceRoot":"","sources":["../../../src/Utils/segmentation/CommToolsData.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { IDragOpts, IDrawingEvents, IProtected, IGUIStates, INrrdStates, IPaintImage, IPaintImages } from "./coreTools/coreType";
2
+ export declare class DragOperator {
3
+ container: HTMLElement;
4
+ private dragPrameters;
5
+ private drawingPrameters;
6
+ private sensitiveArray;
7
+ private showDragNumberDiv;
8
+ private nrrd_states;
9
+ private gui_states;
10
+ private protectedData;
11
+ private dragEffectCanvases;
12
+ private setSyncsliceNum;
13
+ private setIsDrawFalse;
14
+ private flipDisplayImageByAxis;
15
+ private setEmptyCanvasSize;
16
+ private filterDrawedImage;
17
+ 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, filterDrawedImage: (axis: "x" | "y" | "z", sliceIndex: number, paintedImages: IPaintImages) => IPaintImage);
18
+ private init;
19
+ setShowDragNumberDiv(sliceIndexContainer: HTMLDivElement): void;
20
+ drag(opts?: IDragOpts): void;
21
+ updateIndex(move: number): void;
22
+ private drawDragSlice;
23
+ private drawMaskToLabelCtx;
24
+ private cleanCanvases;
25
+ updateShowNumDiv(contrastNum: number): void;
26
+ updateCurrentContrastSlice(): any;
27
+ configDragMode: () => void;
28
+ removeDragMode: () => void;
29
+ updateMainSlice(mainPreSlices: any): void;
30
+ }
@@ -0,0 +1,243 @@
1
+ import { throttle } from "../utils";
2
+ import { createShowSliceNumberDiv } from "./coreTools/divControlTools";
3
+ export class DragOperator {
4
+ constructor(container, nrrd_sates, gui_states, protectedData, drawingPrameters, setSyncsliceNum, setIsDrawFalse, flipDisplayImageByAxis, setEmptyCanvasSize, filterDrawedImage) {
5
+ this.dragPrameters = {
6
+ move: 0,
7
+ y: 0,
8
+ h: 0,
9
+ sensivity: 1,
10
+ handleOnDragMouseUp: (ev) => { },
11
+ handleOnDragMouseDown: (ev) => { },
12
+ handleOnDragMouseMove: (ev) => { },
13
+ };
14
+ this.sensitiveArray = [];
15
+ this.configDragMode = () => {
16
+ this.container.style.cursor = "pointer";
17
+ this.container.addEventListener("pointerdown", this.dragPrameters.handleOnDragMouseDown, true);
18
+ this.container.addEventListener("pointerup", this.dragPrameters.handleOnDragMouseUp, true);
19
+ };
20
+ this.removeDragMode = () => {
21
+ this.container.style.cursor = "";
22
+ this.container.removeEventListener("pointerdown", this.dragPrameters.handleOnDragMouseDown, true);
23
+ this.container.removeEventListener("pointerup", this.dragPrameters.handleOnDragMouseUp, true);
24
+ this.setIsDrawFalse(1000);
25
+ };
26
+ this.container = container;
27
+ this.drawingPrameters = drawingPrameters;
28
+ this.nrrd_states = nrrd_sates;
29
+ this.gui_states = gui_states;
30
+ this.protectedData = protectedData;
31
+ this.setSyncsliceNum = setSyncsliceNum;
32
+ this.setIsDrawFalse = setIsDrawFalse;
33
+ this.flipDisplayImageByAxis = flipDisplayImageByAxis;
34
+ this.setEmptyCanvasSize = setEmptyCanvasSize;
35
+ this.filterDrawedImage = filterDrawedImage;
36
+ this.showDragNumberDiv = createShowSliceNumberDiv();
37
+ this.init();
38
+ }
39
+ init() {
40
+ for (let i = 0; i < this.gui_states.max_sensitive; i++) {
41
+ this.sensitiveArray.push((i + 1) / 20);
42
+ }
43
+ this.dragEffectCanvases = {
44
+ drawingCanvasLayerMaster: this.protectedData.canvases.drawingCanvasLayerMaster,
45
+ drawingCanvasLayerOne: this.protectedData.canvases.drawingCanvasLayerOne,
46
+ drawingCanvasLayerTwo: this.protectedData.canvases.drawingCanvasLayerTwo,
47
+ drawingCanvasLayerThree: this.protectedData.canvases.drawingCanvasLayerThree,
48
+ displayCanvas: this.protectedData.canvases.displayCanvas,
49
+ };
50
+ }
51
+ setShowDragNumberDiv(sliceIndexContainer) {
52
+ this.showDragNumberDiv = sliceIndexContainer;
53
+ }
54
+ drag(opts) {
55
+ this.dragPrameters.h = this.container.offsetHeight;
56
+ this.sensitiveArray.reverse();
57
+ if (opts === null || opts === void 0 ? void 0 : opts.showNumber) {
58
+ this.container.appendChild(this.showDragNumberDiv);
59
+ }
60
+ this.dragPrameters.handleOnDragMouseDown = (ev) => {
61
+ // before start drag event, remove wheel event.
62
+ this.protectedData.canvases.drawingCanvas.removeEventListener("wheel", this.drawingPrameters.handleZoomWheel);
63
+ if (ev.button === 0) {
64
+ this.dragPrameters.y = ev.offsetY / this.dragPrameters.h;
65
+ this.container.addEventListener("pointermove", this.dragPrameters.handleOnDragMouseMove, false);
66
+ this.dragPrameters.sensivity =
67
+ this.sensitiveArray[this.gui_states.dragSensitivity - 1];
68
+ }
69
+ };
70
+ this.dragPrameters.handleOnDragMouseMove = throttle((ev) => {
71
+ if (this.dragPrameters.y - ev.offsetY / this.dragPrameters.h >= 0) {
72
+ this.dragPrameters.move = -Math.ceil(((this.dragPrameters.y - ev.offsetY / this.dragPrameters.h) * 10) /
73
+ this.dragPrameters.sensivity);
74
+ }
75
+ else {
76
+ this.dragPrameters.move = -Math.floor(((this.dragPrameters.y - ev.offsetY / this.dragPrameters.h) * 10) /
77
+ this.dragPrameters.sensivity);
78
+ }
79
+ this.updateIndex(this.dragPrameters.move);
80
+ (opts === null || opts === void 0 ? void 0 : opts.getSliceNum) &&
81
+ opts.getSliceNum(this.nrrd_states.currentIndex, this.nrrd_states.contrastNum);
82
+ this.dragPrameters.y = ev.offsetY / this.dragPrameters.h;
83
+ }, this.dragPrameters.sensivity * 200);
84
+ this.dragPrameters.handleOnDragMouseUp = (ev) => {
85
+ // after drag, add the wheel event
86
+ this.protectedData.canvases.drawingCanvas.addEventListener("wheel", this.drawingPrameters.handleZoomWheel);
87
+ this.setSyncsliceNum();
88
+ this.container.removeEventListener("pointermove", this.dragPrameters.handleOnDragMouseMove, false);
89
+ };
90
+ this.configDragMode();
91
+ this.container.addEventListener("keydown", (ev) => {
92
+ if (ev.key === "Shift") {
93
+ this.removeDragMode();
94
+ }
95
+ });
96
+ this.container.addEventListener("keyup", (ev) => {
97
+ if (ev.key === "Shift" && !this.gui_states.sphere) {
98
+ this.configDragMode();
99
+ }
100
+ });
101
+ }
102
+ updateIndex(move) {
103
+ let sliceModifyNum = 0;
104
+ let contrastModifyNum = 0;
105
+ if (this.nrrd_states.showContrast) {
106
+ contrastModifyNum = move % this.protectedData.displaySlices.length;
107
+ this.nrrd_states.contrastNum += contrastModifyNum;
108
+ if (move > 0) {
109
+ // move forward
110
+ if (this.nrrd_states.currentIndex <= this.nrrd_states.maxIndex) {
111
+ sliceModifyNum = Math.floor(move / this.protectedData.displaySlices.length);
112
+ if (this.nrrd_states.contrastNum >
113
+ this.protectedData.displaySlices.length - 1) {
114
+ sliceModifyNum += 1;
115
+ this.nrrd_states.contrastNum -=
116
+ this.protectedData.displaySlices.length;
117
+ }
118
+ }
119
+ else {
120
+ sliceModifyNum = 0;
121
+ }
122
+ }
123
+ else {
124
+ // move back
125
+ sliceModifyNum = Math.ceil(move / this.protectedData.displaySlices.length);
126
+ if (this.nrrd_states.contrastNum < 0) {
127
+ this.nrrd_states.contrastNum +=
128
+ this.protectedData.displaySlices.length;
129
+ sliceModifyNum -= 1;
130
+ }
131
+ }
132
+ }
133
+ else {
134
+ sliceModifyNum = move;
135
+ }
136
+ // let newIndex = this.nrrd_states.oldIndex + sliceModifyNum;
137
+ let newIndex = this.nrrd_states.currentIndex + sliceModifyNum;
138
+ if (newIndex != this.nrrd_states.currentIndex ||
139
+ this.nrrd_states.showContrast) {
140
+ if (newIndex > this.nrrd_states.maxIndex) {
141
+ newIndex = this.nrrd_states.maxIndex;
142
+ this.nrrd_states.contrastNum =
143
+ this.protectedData.displaySlices.length - 1;
144
+ }
145
+ else if (newIndex < this.nrrd_states.minIndex) {
146
+ newIndex = this.nrrd_states.minIndex;
147
+ this.nrrd_states.contrastNum = 0;
148
+ }
149
+ else {
150
+ this.protectedData.mainPreSlices.index =
151
+ newIndex * this.nrrd_states.RSARatio;
152
+ // clear drawing canvas, and display next slicez
153
+ this.setSyncsliceNum();
154
+ let isSameIndex = true;
155
+ if (newIndex != this.nrrd_states.currentIndex) {
156
+ this.nrrd_states.switchSliceFlag = true;
157
+ isSameIndex = false;
158
+ }
159
+ this.cleanCanvases(isSameIndex);
160
+ if (this.nrrd_states.changedWidth === 0) {
161
+ this.nrrd_states.changedWidth = this.nrrd_states.originWidth;
162
+ this.nrrd_states.changedHeight = this.nrrd_states.originHeight;
163
+ }
164
+ // get the slice that need to be updated on displayCanvas
165
+ let needToUpdateSlice = this.updateCurrentContrastSlice();
166
+ needToUpdateSlice.repaint.call(needToUpdateSlice);
167
+ this.nrrd_states.currentIndex = newIndex;
168
+ this.drawDragSlice(needToUpdateSlice.canvas);
169
+ }
170
+ this.nrrd_states.oldIndex = newIndex * this.nrrd_states.RSARatio;
171
+ this.updateShowNumDiv(this.nrrd_states.contrastNum);
172
+ }
173
+ }
174
+ drawDragSlice(canvas) {
175
+ this.protectedData.ctxes.displayCtx.save();
176
+ // flip images
177
+ this.flipDisplayImageByAxis();
178
+ this.protectedData.ctxes.displayCtx.drawImage(canvas, 0, 0, this.nrrd_states.changedWidth, this.nrrd_states.changedHeight);
179
+ this.protectedData.ctxes.displayCtx.restore();
180
+ if (this.protectedData.maskData.paintImages.x.length > 0 ||
181
+ this.protectedData.maskData.paintImages.y.length > 0 ||
182
+ this.protectedData.maskData.paintImages.z.length > 0) {
183
+ if (this.nrrd_states.switchSliceFlag) {
184
+ // 0929
185
+ // this.paintedImage = this.filterDrawedImage(
186
+ // this.protectedData.axis,
187
+ // this.nrrd_states.currentIndex,
188
+ // this.protectedData.maskData.paintImages
189
+ // );
190
+ this.drawMaskToLabelCtx(this.protectedData.maskData.paintImages, this.protectedData.ctxes.drawingLayerMasterCtx);
191
+ this.drawMaskToLabelCtx(this.protectedData.maskData.paintImagesLabel1, this.protectedData.ctxes.drawingLayerOneCtx);
192
+ this.drawMaskToLabelCtx(this.protectedData.maskData.paintImagesLabel2, this.protectedData.ctxes.drawingLayerTwoCtx);
193
+ this.drawMaskToLabelCtx(this.protectedData.maskData.paintImagesLabel3, this.protectedData.ctxes.drawingLayerThreeCtx);
194
+ this.nrrd_states.switchSliceFlag = false;
195
+ }
196
+ }
197
+ }
198
+ drawMaskToLabelCtx(paintedImages, ctx) {
199
+ const paintedImage = this.filterDrawedImage(this.protectedData.axis, this.nrrd_states.currentIndex, paintedImages);
200
+ if (paintedImage === null || paintedImage === void 0 ? void 0 : paintedImage.image) {
201
+ // redraw the stored data to empty point 2
202
+ this.setEmptyCanvasSize();
203
+ this.protectedData.ctxes.emptyCtx.putImageData(paintedImage.image, 0, 0);
204
+ ctx.drawImage(this.protectedData.canvases.emptyCanvas, 0, 0, this.nrrd_states.changedWidth, this.nrrd_states.changedHeight);
205
+ }
206
+ }
207
+ cleanCanvases(flag) {
208
+ for (const name in this.dragEffectCanvases) {
209
+ if (flag) {
210
+ if (name === "displayCanvas") {
211
+ this.dragEffectCanvases.displayCanvas.width =
212
+ this.dragEffectCanvases.displayCanvas.width;
213
+ }
214
+ }
215
+ else {
216
+ this.dragEffectCanvases[name].width =
217
+ this.dragEffectCanvases[name].width;
218
+ }
219
+ }
220
+ }
221
+ updateShowNumDiv(contrastNum) {
222
+ if (this.protectedData.mainPreSlices) {
223
+ if (this.nrrd_states.currentIndex > this.nrrd_states.maxIndex) {
224
+ this.nrrd_states.currentIndex = this.nrrd_states.maxIndex;
225
+ }
226
+ if (this.nrrd_states.showContrast) {
227
+ this.showDragNumberDiv.innerHTML = `ContrastNum: ${contrastNum}/${this.protectedData.displaySlices.length - 1} SliceNum: ${this.nrrd_states.currentIndex}/${this.nrrd_states.maxIndex}`;
228
+ }
229
+ else {
230
+ this.showDragNumberDiv.innerHTML = `SliceNum: ${this.nrrd_states.currentIndex}/${this.nrrd_states.maxIndex}`;
231
+ }
232
+ }
233
+ }
234
+ updateCurrentContrastSlice() {
235
+ this.protectedData.currentShowingSlice =
236
+ this.protectedData.displaySlices[this.nrrd_states.contrastNum];
237
+ return this.protectedData.currentShowingSlice;
238
+ }
239
+ updateMainSlice(mainPreSlices) {
240
+ this.protectedData.mainPreSlices = mainPreSlices;
241
+ }
242
+ }
243
+ //# sourceMappingURL=DragOperator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DragOperator.js","sourceRoot":"","sources":["../../../src/Utils/segmentation/DragOperator.ts"],"names":[],"mappings":"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"}