copper3d 3.3.3 → 3.4.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 (36) hide show
  1. package/dist/Utils/segmentation/DrawToolCore.js +20 -3
  2. package/dist/Utils/segmentation/DrawToolCore.js.map +1 -1
  3. package/dist/Utils/segmentation/NrrdTools.js +4 -0
  4. package/dist/Utils/segmentation/NrrdTools.js.map +1 -1
  5. package/dist/Utils/segmentation/RenderingUtils.d.ts +9 -3
  6. package/dist/Utils/segmentation/RenderingUtils.js +35 -15
  7. package/dist/Utils/segmentation/RenderingUtils.js.map +1 -1
  8. package/dist/Utils/segmentation/core/MarchingSquares.d.ts +72 -0
  9. package/dist/Utils/segmentation/core/MarchingSquares.js +169 -0
  10. package/dist/Utils/segmentation/core/MarchingSquares.js.map +1 -0
  11. package/dist/Utils/segmentation/core/index.d.ts +2 -0
  12. package/dist/Utils/segmentation/core/index.js +1 -0
  13. package/dist/Utils/segmentation/core/index.js.map +1 -1
  14. package/dist/Utils/segmentation/eventRouter/EventRouter.d.ts +9 -0
  15. package/dist/Utils/segmentation/eventRouter/EventRouter.js +36 -8
  16. package/dist/Utils/segmentation/eventRouter/EventRouter.js.map +1 -1
  17. package/dist/Utils/segmentation/tools/DrawingTool.d.ts +35 -10
  18. package/dist/Utils/segmentation/tools/DrawingTool.js +247 -36
  19. package/dist/Utils/segmentation/tools/DrawingTool.js.map +1 -1
  20. package/dist/Utils/segmentation/tools/SphereBrushTool.d.ts +83 -6
  21. package/dist/Utils/segmentation/tools/SphereBrushTool.js +283 -68
  22. package/dist/Utils/segmentation/tools/SphereBrushTool.js.map +1 -1
  23. package/dist/Utils/segmentation/tools/ToolHost.d.ts +1 -1
  24. package/dist/bundle.esm.js +794 -131
  25. package/dist/bundle.umd.js +794 -131
  26. package/dist/index.d.ts +1 -1
  27. package/dist/index.js +1 -1
  28. package/dist/types/Utils/segmentation/RenderingUtils.d.ts +9 -3
  29. package/dist/types/Utils/segmentation/core/MarchingSquares.d.ts +72 -0
  30. package/dist/types/Utils/segmentation/core/index.d.ts +2 -0
  31. package/dist/types/Utils/segmentation/eventRouter/EventRouter.d.ts +9 -0
  32. package/dist/types/Utils/segmentation/tools/DrawingTool.d.ts +35 -10
  33. package/dist/types/Utils/segmentation/tools/SphereBrushTool.d.ts +83 -6
  34. package/dist/types/Utils/segmentation/tools/ToolHost.d.ts +1 -1
  35. package/dist/types/index.d.ts +1 -1
  36. package/package.json +1 -1
@@ -19,7 +19,11 @@ import { CHANNEL_HEX_COLORS } from "../core";
19
19
  export class SphereBrushTool extends BaseTool {
20
20
  constructor(ctx, callbacks) {
21
21
  super(ctx);
22
- /** Recorded sphere center in canvas mm-space */
22
+ /**
23
+ * Recorded sphere center in display (zoomed) coordinates.
24
+ * Used for both preview redraw and voxel calculation — the voxel conversion
25
+ * uses `changedWidth/Height` as the display scale, so no mm detour is needed.
26
+ */
23
27
  this.centerX = 0;
24
28
  this.centerY = 0;
25
29
  this.centerSlice = 0;
@@ -27,10 +31,24 @@ export class SphereBrushTool extends BaseTool {
27
31
  this.active = false;
28
32
  /** Current operation mode for the active placement */
29
33
  this.mode = "brush";
30
- /** Cumulative "before" snapshots for drag-erase undo (z-index → slice data) */
34
+ /** Cumulative "before" snapshots for drag undo (z-index → slice data) — used by both brush and eraser drag */
31
35
  this.dragBeforeSnapshots = new Map();
32
- /** Whether a drag-erase has actually moved (vs. simple click-release) */
36
+ /** Whether a drag has actually moved (vs. simple click-release) */
33
37
  this.dragMoved = false;
38
+ /**
39
+ * Latest cursor position in display (zoomed) coords. Used by the wheel
40
+ * handler to redraw the preview at the cursor, not the original mousedown
41
+ * point, during mid-drag radius changes.
42
+ */
43
+ this.lastDisplayX = 0;
44
+ this.lastDisplayY = 0;
45
+ this.lastSliceIndex = 0;
46
+ /**
47
+ * All sphere centers written during the current stroke. The wheel handler
48
+ * retroactively re-renders the entire stroke at the new radius by restoring
49
+ * `dragBeforeSnapshots` and replaying every entry here.
50
+ */
51
+ this.strokeCenters = [];
34
52
  this.callbacks = callbacks;
35
53
  }
36
54
  setCallbacks(callbacks) {
@@ -38,41 +56,66 @@ export class SphereBrushTool extends BaseTool {
38
56
  }
39
57
  // ── Geometry (ported from SphereTool) ──────────────────────────
40
58
  /**
41
- * Convert canvas mm-space coordinates to 3D voxel coordinates.
59
+ * Convert display (zoomed) coordinates to 3D voxel coordinates.
60
+ *
61
+ * Uses `changedWidth/Height` as the display scale directly (instead of
62
+ * going through mm via `/sizeFactor`). This keeps the write pixel-exact
63
+ * with the preview circle, which is drawn on a `changedWidth x changedHeight`
64
+ * sized sphere canvas — avoiding floating-point drift at high zoom levels.
42
65
  */
43
- canvasToVoxelCenter(canvasX, canvasY, sliceIndex, axis) {
66
+ canvasToVoxelCenter(displayX, displayY, sliceIndex, axis) {
44
67
  const nrrd = this.ctx.nrrd_states;
68
+ const cw = nrrd.view.changedWidth;
69
+ const ch = nrrd.view.changedHeight;
45
70
  switch (axis) {
46
71
  case 'z':
47
72
  return {
48
- x: canvasX * nrrd.image.nrrd_x_pixel / nrrd.image.nrrd_x_mm,
49
- y: canvasY * nrrd.image.nrrd_y_pixel / nrrd.image.nrrd_y_mm,
73
+ x: displayX * nrrd.image.nrrd_x_pixel / cw,
74
+ y: displayY * nrrd.image.nrrd_y_pixel / ch,
50
75
  z: sliceIndex,
51
76
  };
52
77
  case 'y':
53
78
  return {
54
- x: canvasX * nrrd.image.nrrd_x_pixel / nrrd.image.nrrd_x_mm,
79
+ x: displayX * nrrd.image.nrrd_x_pixel / cw,
55
80
  y: sliceIndex,
56
- z: (nrrd.image.nrrd_z_mm - canvasY) * nrrd.image.nrrd_z_pixel / nrrd.image.nrrd_z_mm,
81
+ // Coronal vertical flip: display Y=0 is top, voxel Z increases downward in mm-space
82
+ z: (ch - displayY) * nrrd.image.nrrd_z_pixel / ch,
57
83
  };
58
84
  case 'x':
59
85
  return {
60
86
  x: sliceIndex,
61
- y: canvasY * nrrd.image.nrrd_y_pixel / nrrd.image.nrrd_y_mm,
62
- z: canvasX * nrrd.image.nrrd_z_pixel / nrrd.image.nrrd_z_mm,
87
+ y: displayY * nrrd.image.nrrd_y_pixel / ch,
88
+ z: displayX * nrrd.image.nrrd_z_pixel / cw,
63
89
  };
64
90
  }
65
91
  }
66
92
  /**
67
93
  * Convert mm radius to per-axis voxel radii.
94
+ *
95
+ * For the two axes visible in the current view, scale via
96
+ * `changedWidth/Height` so the rendered ellipsoid cross-section matches
97
+ * the preview pixel radius exactly. The third (slice-direction) axis is
98
+ * not visible, so it uses the plain mm-based ratio.
68
99
  */
69
- getVoxelRadii(radius) {
100
+ getVoxelRadii(radius, axis) {
70
101
  const nrrd = this.ctx.nrrd_states;
71
- return {
72
- rx: radius * nrrd.image.nrrd_x_pixel / nrrd.image.nrrd_x_mm,
73
- ry: radius * nrrd.image.nrrd_y_pixel / nrrd.image.nrrd_y_mm,
74
- rz: radius * nrrd.image.nrrd_z_pixel / nrrd.image.nrrd_z_mm,
75
- };
102
+ const sf = nrrd.view.sizeFactor;
103
+ const cw = nrrd.view.changedWidth;
104
+ const ch = nrrd.view.changedHeight;
105
+ // pixel-exact voxel radius for the visible horizontal/vertical dims
106
+ const rxView = radius * sf * nrrd.image.nrrd_x_pixel / cw;
107
+ const ryView = radius * sf * nrrd.image.nrrd_y_pixel / ch;
108
+ const rzHoriz = radius * sf * nrrd.image.nrrd_z_pixel / cw;
109
+ const rzVert = radius * sf * nrrd.image.nrrd_z_pixel / ch;
110
+ // mm-based fallback for the slice-direction (perpendicular) dim
111
+ const rxMm = radius * nrrd.image.nrrd_x_pixel / nrrd.image.nrrd_x_mm;
112
+ const ryMm = radius * nrrd.image.nrrd_y_pixel / nrrd.image.nrrd_y_mm;
113
+ const rzMm = radius * nrrd.image.nrrd_z_pixel / nrrd.image.nrrd_z_mm;
114
+ switch (axis) {
115
+ case 'z': return { rx: rxView, ry: ryView, rz: rzMm };
116
+ case 'y': return { rx: rxView, ry: ryMm, rz: rzVert };
117
+ case 'x': return { rx: rxMm, ry: ryView, rz: rzHoriz };
118
+ }
76
119
  }
77
120
  /**
78
121
  * Compute clamped bounding box for an ellipsoid in voxel space.
@@ -177,11 +220,15 @@ export class SphereBrushTool extends BaseTool {
177
220
  drawPreview(mouseX, mouseY, radius, isEraser) {
178
221
  const sphereCanvas = this.ctx.protectedData.canvases.drawingSphereCanvas;
179
222
  const sphereCtx = this.ctx.protectedData.ctxes.drawingSphereCtx;
180
- // Clear and resize sphere canvas
181
- sphereCanvas.width = this.ctx.protectedData.canvases.originCanvas.width;
182
- sphereCanvas.height = this.ctx.protectedData.canvases.originCanvas.height;
223
+ // Size sphere canvas to the zoomed display size so start() draws it 1:1 —
224
+ // no scaling step, eliminating any zoom-dependent positioning error.
225
+ const sf = this.ctx.nrrd_states.view.sizeFactor;
226
+ sphereCanvas.width = this.ctx.nrrd_states.view.changedWidth;
227
+ sphereCanvas.height = this.ctx.nrrd_states.view.changedHeight;
228
+ // mouseX/mouseY are already in zoomed display coords; scale radius to match.
229
+ const scaledRadius = radius * sf;
183
230
  sphereCtx.beginPath();
184
- sphereCtx.arc(mouseX, mouseY, radius, 0, 2 * Math.PI);
231
+ sphereCtx.arc(mouseX, mouseY, scaledRadius, 0, 2 * Math.PI);
185
232
  if (isEraser) {
186
233
  // Eraser preview: dashed outline
187
234
  sphereCtx.strokeStyle = "#ff4444";
@@ -234,38 +281,135 @@ export class SphereBrushTool extends BaseTool {
234
281
  return (e) => {
235
282
  e.preventDefault();
236
283
  const sphere = this.ctx.nrrd_states.sphere;
237
- if (e.deltaY < 0) {
238
- sphere.sphereBrushRadius += 1;
284
+ sphere.sphereBrushRadius = Math.max(1, Math.min(sphere.sphereBrushRadius + (e.deltaY < 0 ? 1 : -1), 50));
285
+ // 3D Slicer-style retroactive resize: if the user has already started
286
+ // painting/erasing a stroke, re-render the entire stroke at the new
287
+ // radius so the whole pipe/erase-path resizes together.
288
+ if (this.active && this.dragMoved && this.strokeCenters.length > 0) {
289
+ this.replayStrokeWithCurrentRadius();
239
290
  }
240
- else {
241
- sphere.sphereBrushRadius -= 1;
242
- }
243
- sphere.sphereBrushRadius = Math.max(1, Math.min(sphere.sphereBrushRadius, 50));
244
- // Redraw preview
291
+ // Preview always follows the latest cursor position, not the mousedown
292
+ // point — otherwise the preview circle appears stuck on click-down when
293
+ // the user scrolls after dragging elsewhere.
245
294
  if (this.active) {
246
- this.drawPreview(this.centerX, this.centerY, sphere.sphereBrushRadius, this.mode === "eraser");
295
+ this.drawPreview(this.lastDisplayX, this.lastDisplayY, sphere.sphereBrushRadius, this.mode === "eraser");
247
296
  }
248
297
  };
249
298
  }
299
+ /**
300
+ * Retroactively re-render the current stroke at the current radius.
301
+ *
302
+ * Step 1: walk every recorded stroke center and expand
303
+ * `dragBeforeSnapshots` to cover the new (larger) bounding box. Slices
304
+ * newly included here are still pristine because the original stroke
305
+ * never touched them.
306
+ * Step 2: restore every snapshotted slice from its pristine backup.
307
+ * Step 3: replay every stroke center at the new radius.
308
+ *
309
+ * Step 3 produces the same final state as if the user had used the new
310
+ * radius from the start. Undo still captures the full stroke as one group
311
+ * at pointerup.
312
+ */
313
+ replayStrokeWithCurrentRadius() {
314
+ if (this.strokeCenters.length === 0)
315
+ return;
316
+ const layer = this.ctx.gui_states.layerChannel.layer;
317
+ const channel = this.ctx.gui_states.layerChannel.activeChannel || 1;
318
+ const axis = this.ctx.protectedData.axis;
319
+ const radius = this.ctx.nrrd_states.sphere.sphereBrushRadius;
320
+ let vol;
321
+ try {
322
+ vol = this.callbacks.getVolumeForLayer(layer);
323
+ }
324
+ catch (_a) {
325
+ return;
326
+ }
327
+ const dims = vol.getDimensions();
328
+ // 1. Expand snapshot coverage using the new radius so any newly-exposed
329
+ // Z slices are captured while still pristine.
330
+ for (const sc of this.strokeCenters) {
331
+ const center = this.canvasToVoxelCenter(sc.x, sc.y, sc.sliceIndex, axis);
332
+ const radii = this.getVoxelRadii(radius, axis);
333
+ const bb = this.getBoundingBox(center, radii, dims);
334
+ this.expandDragBeforeSnapshots(vol, bb.minZ, bb.maxZ);
335
+ }
336
+ // 2. Restore every snapshotted slice from pristine backup.
337
+ for (const [z, pristine] of this.dragBeforeSnapshots) {
338
+ try {
339
+ vol.setSliceUint8(z, pristine, 'z');
340
+ }
341
+ catch (_b) {
342
+ // Slice write failed — skip silently so a single bad slice doesn't break the replay.
343
+ }
344
+ }
345
+ // 3. Replay every stroke center with the new radius.
346
+ for (const sc of this.strokeCenters) {
347
+ const center = this.canvasToVoxelCenter(sc.x, sc.y, sc.sliceIndex, axis);
348
+ const radii = this.getVoxelRadii(radius, axis);
349
+ const bb = this.getBoundingBox(center, radii, dims);
350
+ if (this.mode === "brush") {
351
+ this.write3DSphereToBrush(vol, center, radii, bb, channel);
352
+ }
353
+ else {
354
+ this.erase3DSphereFromVolume(vol, center, radii, bb, channel);
355
+ }
356
+ }
357
+ this.refreshDisplay(layer, undefined, false);
358
+ }
250
359
  // ── Sphere Brush Click/PointerUp ───────────────────────────────
251
360
  /**
252
- * Handle pointer-down in sphereBrush mode (direct click, no Shift needed).
361
+ * Handle pointer-down in sphereBrush mode (3D Slicer-style).
362
+ *
363
+ * Captures pristine snapshots at the mousedown location but does NOT
364
+ * write any voxels yet — the user may wheel-adjust the radius before
365
+ * dragging. The first sphere is written either by the first pointermove
366
+ * or by pointerup (single-click fallback).
253
367
  */
254
368
  onSphereBrushClick(e) {
255
- this.centerX = e.offsetX / this.ctx.nrrd_states.view.sizeFactor;
256
- this.centerY = e.offsetY / this.ctx.nrrd_states.view.sizeFactor;
369
+ this.centerX = e.offsetX;
370
+ this.centerY = e.offsetY;
257
371
  this.centerSlice = this.ctx.nrrd_states.view.currentSliceIndex;
372
+ this.lastDisplayX = this.centerX;
373
+ this.lastDisplayY = this.centerY;
374
+ this.lastSliceIndex = this.centerSlice;
258
375
  this.active = true;
259
376
  this.mode = "brush";
260
- this.drawPreview(this.centerX, this.centerY, this.ctx.nrrd_states.sphere.sphereBrushRadius, false);
377
+ this.dragMoved = false;
378
+ this.dragBeforeSnapshots.clear();
379
+ this.strokeCenters = [{ x: this.centerX, y: this.centerY, sliceIndex: this.centerSlice }];
380
+ const layer = this.ctx.gui_states.layerChannel.layer;
381
+ const axis = this.ctx.protectedData.axis;
382
+ const radius = this.ctx.nrrd_states.sphere.sphereBrushRadius;
383
+ try {
384
+ const vol = this.callbacks.getVolumeForLayer(layer);
385
+ const dims = vol.getDimensions();
386
+ const center = this.canvasToVoxelCenter(this.centerX, this.centerY, this.centerSlice, axis);
387
+ const radii = this.getVoxelRadii(radius, axis);
388
+ const bb = this.getBoundingBox(center, radii, dims);
389
+ this.expandDragBeforeSnapshots(vol, bb.minZ, bb.maxZ);
390
+ }
391
+ catch (_a) {
392
+ // Volume not ready — preview still shown so user gets visual feedback
393
+ }
394
+ this.drawPreview(this.centerX, this.centerY, radius, false);
261
395
  }
262
396
  /**
263
- * Handle pointer-up in sphereBrush mode — write sphere to volume.
397
+ * Handle pointer-move in sphereBrush mode — drag to continuously paint.
398
+ *
399
+ * Mirrors sphereEraser drag: writes a new sphere at each move position,
400
+ * extends the cumulative before-snapshot to cover any newly-touched Z
401
+ * slices, and repaints the preview. Never notifies the backend; pointerup
402
+ * does that once for the whole stroke.
264
403
  */
265
- onSphereBrushPointerUp() {
404
+ onSphereBrushMove(e) {
266
405
  if (!this.active || this.mode !== "brush")
267
406
  return;
268
- this.active = false;
407
+ this.dragMoved = true;
408
+ const sliceIndex = this.ctx.nrrd_states.view.currentSliceIndex;
409
+ this.lastDisplayX = e.offsetX;
410
+ this.lastDisplayY = e.offsetY;
411
+ this.lastSliceIndex = sliceIndex;
412
+ this.strokeCenters.push({ x: e.offsetX, y: e.offsetY, sliceIndex });
269
413
  const layer = this.ctx.gui_states.layerChannel.layer;
270
414
  const channel = this.ctx.gui_states.layerChannel.activeChannel || 1;
271
415
  const axis = this.ctx.protectedData.axis;
@@ -275,26 +419,56 @@ export class SphereBrushTool extends BaseTool {
275
419
  vol = this.callbacks.getVolumeForLayer(layer);
276
420
  }
277
421
  catch (_a) {
278
- this.clearPreview();
279
422
  return;
280
423
  }
281
424
  const dims = vol.getDimensions();
282
- const center = this.canvasToVoxelCenter(this.centerX, this.centerY, this.centerSlice, axis);
283
- const radii = this.getVoxelRadii(radius);
425
+ const center = this.canvasToVoxelCenter(e.offsetX, e.offsetY, sliceIndex, axis);
426
+ const radii = this.getVoxelRadii(radius, axis);
284
427
  const bb = this.getBoundingBox(center, radii, dims);
285
- // Capture pre-write snapshots
286
- const before = this.captureSliceSnapshots(vol, bb.minZ, bb.maxZ);
287
- // Write sphere
428
+ this.expandDragBeforeSnapshots(vol, bb.minZ, bb.maxZ);
288
429
  this.write3DSphereToBrush(vol, center, radii, bb, channel);
289
- // Capture post-write snapshots and push undo group
290
- const after = this.captureSliceSnapshots(vol, bb.minZ, bb.maxZ);
291
- const deltas = this.buildUndoGroup(layer, before, after);
430
+ this.drawPreview(e.offsetX, e.offsetY, radius, false);
431
+ this.refreshDisplay(layer, undefined, false);
432
+ }
433
+ /**
434
+ * Handle pointer-up in sphereBrush mode — finalize stroke + push undo group
435
+ * + single batched backend notify for all Z slices touched during the drag.
436
+ */
437
+ onSphereBrushPointerUp() {
438
+ if (!this.active || this.mode !== "brush")
439
+ return;
440
+ this.active = false;
441
+ const layer = this.ctx.gui_states.layerChannel.layer;
442
+ const channel = this.ctx.gui_states.layerChannel.activeChannel || 1;
443
+ const axis = this.ctx.protectedData.axis;
444
+ const radius = this.ctx.nrrd_states.sphere.sphereBrushRadius;
445
+ let vol;
446
+ try {
447
+ vol = this.callbacks.getVolumeForLayer(layer);
448
+ }
449
+ catch (_a) {
450
+ this.finalizeStrokeState();
451
+ return;
452
+ }
453
+ // Click-without-drag: write the single sphere now so a plain click still
454
+ // paints something. onSphereBrushClick intentionally skipped this so the
455
+ // user could wheel-adjust radius first.
456
+ if (!this.dragMoved && this.strokeCenters.length > 0) {
457
+ const sc = this.strokeCenters[0];
458
+ const dims = vol.getDimensions();
459
+ const center = this.canvasToVoxelCenter(sc.x, sc.y, sc.sliceIndex, axis);
460
+ const radii = this.getVoxelRadii(radius, axis);
461
+ const bb = this.getBoundingBox(center, radii, dims);
462
+ this.expandDragBeforeSnapshots(vol, bb.minZ, bb.maxZ);
463
+ this.write3DSphereToBrush(vol, center, radii, bb, channel);
464
+ }
465
+ const after = this.captureSliceSnapshots(vol, this.dragMinZ(), this.dragMaxZ());
466
+ const deltas = this.buildUndoGroup(layer, this.dragBeforeSnapshots, after);
292
467
  if (deltas.length > 0) {
293
468
  this.callbacks.pushUndoGroup(deltas);
294
469
  }
295
- // Refresh display and notify backend of ALL changed slices
296
- this.refreshDisplay(layer, deltas);
297
- this.clearPreview();
470
+ this.refreshDisplay(layer, deltas, true);
471
+ this.finalizeStrokeState();
298
472
  }
299
473
  // ── Sphere Eraser Click/PointerUp ──────────────────────────────
300
474
  /**
@@ -302,13 +476,17 @@ export class SphereBrushTool extends BaseTool {
302
476
  * Initializes drag tracking for cumulative undo.
303
477
  */
304
478
  onSphereEraserClick(e) {
305
- this.centerX = e.offsetX / this.ctx.nrrd_states.view.sizeFactor;
306
- this.centerY = e.offsetY / this.ctx.nrrd_states.view.sizeFactor;
479
+ this.centerX = e.offsetX;
480
+ this.centerY = e.offsetY;
307
481
  this.centerSlice = this.ctx.nrrd_states.view.currentSliceIndex;
482
+ this.lastDisplayX = this.centerX;
483
+ this.lastDisplayY = this.centerY;
484
+ this.lastSliceIndex = this.centerSlice;
308
485
  this.active = true;
309
486
  this.mode = "eraser";
310
487
  this.dragMoved = false;
311
488
  this.dragBeforeSnapshots.clear();
489
+ this.strokeCenters = [{ x: this.centerX, y: this.centerY, sliceIndex: this.centerSlice }];
312
490
  // Capture initial "before" snapshots for the first sphere position
313
491
  const layer = this.ctx.gui_states.layerChannel.layer;
314
492
  const radius = this.ctx.nrrd_states.sphere.sphereBrushRadius;
@@ -317,7 +495,7 @@ export class SphereBrushTool extends BaseTool {
317
495
  const dims = vol.getDimensions();
318
496
  const axis = this.ctx.protectedData.axis;
319
497
  const center = this.canvasToVoxelCenter(this.centerX, this.centerY, this.centerSlice, axis);
320
- const radii = this.getVoxelRadii(radius);
498
+ const radii = this.getVoxelRadii(radius, axis);
321
499
  const bb = this.getBoundingBox(center, radii, dims);
322
500
  this.expandDragBeforeSnapshots(vol, bb.minZ, bb.maxZ);
323
501
  }
@@ -333,9 +511,11 @@ export class SphereBrushTool extends BaseTool {
333
511
  if (!this.active || this.mode !== "eraser")
334
512
  return;
335
513
  this.dragMoved = true;
336
- const mouseX = e.offsetX / this.ctx.nrrd_states.view.sizeFactor;
337
- const mouseY = e.offsetY / this.ctx.nrrd_states.view.sizeFactor;
338
514
  const sliceIndex = this.ctx.nrrd_states.view.currentSliceIndex;
515
+ this.lastDisplayX = e.offsetX;
516
+ this.lastDisplayY = e.offsetY;
517
+ this.lastSliceIndex = sliceIndex;
518
+ this.strokeCenters.push({ x: e.offsetX, y: e.offsetY, sliceIndex });
339
519
  const layer = this.ctx.gui_states.layerChannel.layer;
340
520
  const channel = this.ctx.gui_states.layerChannel.activeChannel || 1;
341
521
  const axis = this.ctx.protectedData.axis;
@@ -348,17 +528,18 @@ export class SphereBrushTool extends BaseTool {
348
528
  return;
349
529
  }
350
530
  const dims = vol.getDimensions();
351
- const center = this.canvasToVoxelCenter(mouseX, mouseY, sliceIndex, axis);
352
- const radii = this.getVoxelRadii(radius);
531
+ const center = this.canvasToVoxelCenter(e.offsetX, e.offsetY, sliceIndex, axis);
532
+ const radii = this.getVoxelRadii(radius, axis);
353
533
  const bb = this.getBoundingBox(center, radii, dims);
354
534
  // Expand "before" snapshots to cover any new Z slices
355
535
  this.expandDragBeforeSnapshots(vol, bb.minZ, bb.maxZ);
356
536
  // Erase sphere at current position
357
537
  this.erase3DSphereFromVolume(vol, center, radii, bb, channel);
358
- // Update preview position
359
- this.drawPreview(mouseX, mouseY, radius, true);
360
- // Refresh display so user sees the erase in real-time
361
- this.refreshDisplay(layer);
538
+ // Update preview position (pass display/zoomed coords)
539
+ this.drawPreview(e.offsetX, e.offsetY, radius, true);
540
+ // Refresh display locally skip backend notify to avoid per-frame HTTP.
541
+ // onSphereEraserPointerUp batches all deltas into a single notify.
542
+ this.refreshDisplay(layer, undefined, false);
362
543
  }
363
544
  /**
364
545
  * Handle pointer-up in sphereEraser mode — finalize erase + push undo group.
@@ -377,16 +558,17 @@ export class SphereBrushTool extends BaseTool {
377
558
  vol = this.callbacks.getVolumeForLayer(layer);
378
559
  }
379
560
  catch (_a) {
380
- this.clearPreview();
381
- this.dragBeforeSnapshots.clear();
561
+ this.finalizeStrokeState();
382
562
  return;
383
563
  }
384
- // If no drag occurred, erase at the click position (original click-release behavior)
385
- if (!this.dragMoved) {
564
+ // Click-without-drag: erase at the click position (click-release behavior).
565
+ if (!this.dragMoved && this.strokeCenters.length > 0) {
566
+ const sc = this.strokeCenters[0];
386
567
  const dims = vol.getDimensions();
387
- const center = this.canvasToVoxelCenter(this.centerX, this.centerY, this.centerSlice, axis);
388
- const radii = this.getVoxelRadii(radius);
568
+ const center = this.canvasToVoxelCenter(sc.x, sc.y, sc.sliceIndex, axis);
569
+ const radii = this.getVoxelRadii(radius, axis);
389
570
  const bb = this.getBoundingBox(center, radii, dims);
571
+ this.expandDragBeforeSnapshots(vol, bb.minZ, bb.maxZ);
390
572
  this.erase3DSphereFromVolume(vol, center, radii, bb, channel);
391
573
  }
392
574
  // Build undo group from cumulative "before" snapshots vs current state
@@ -395,10 +577,20 @@ export class SphereBrushTool extends BaseTool {
395
577
  if (deltas.length > 0) {
396
578
  this.callbacks.pushUndoGroup(deltas);
397
579
  }
398
- // Refresh display and notify backend of ALL changed slices
399
- this.refreshDisplay(layer, deltas);
580
+ // Refresh display and notify backend of ALL changed slices — single HTTP batch
581
+ this.refreshDisplay(layer, deltas, true);
582
+ this.finalizeStrokeState();
583
+ }
584
+ /**
585
+ * Clear per-stroke state after pointerup or cancel. Kept as a helper so
586
+ * brush/eraser pointerup and cancelActivePlacement all reset the same set
587
+ * of fields — if a new drag-state field is added, only one place to update.
588
+ */
589
+ finalizeStrokeState() {
400
590
  this.clearPreview();
401
591
  this.dragBeforeSnapshots.clear();
592
+ this.strokeCenters = [];
593
+ this.dragMoved = false;
402
594
  }
403
595
  /**
404
596
  * Expand cumulative "before" snapshots to cover z range [minZ, maxZ].
@@ -443,8 +635,11 @@ export class SphereBrushTool extends BaseTool {
443
635
  * @param changedDeltas - If provided, fire onMaskChanged for ALL changed
444
636
  * slices (not just the current view slice) so the backend receives the
445
637
  * full 3D sphere data for NII/GLTF export.
638
+ * @param notifyBackend - When false, only refresh the local canvas and skip
639
+ * the onMaskChanged callback. Used during drag to avoid per-frame HTTP;
640
+ * pointerup then calls with `true` to send a single batched update.
446
641
  */
447
- refreshDisplay(layerId, changedDeltas) {
642
+ refreshDisplay(layerId, changedDeltas, notifyBackend = true) {
448
643
  // Re-render layer canvas from volume for the current slice
449
644
  const target = this.ctx.protectedData.layerTargets.get(layerId);
450
645
  if (target) {
@@ -457,6 +652,9 @@ export class SphereBrushTool extends BaseTool {
457
652
  }
458
653
  // Composite all layers to master canvas
459
654
  this.callbacks.compositeAllLayers();
655
+ // Skip backend notify during drag — pointerup batches a single notify for the whole stroke.
656
+ if (!notifyBackend)
657
+ return;
460
658
  // Fire onMaskChanged for ALL changed slices (not just the current view slice)
461
659
  // This ensures the backend receives the full 3D sphere data for export.
462
660
  try {
@@ -485,5 +683,22 @@ export class SphereBrushTool extends BaseTool {
485
683
  get isActive() {
486
684
  return this.active;
487
685
  }
686
+ /**
687
+ * Defensively cancel any in-progress sphere placement and clear the preview.
688
+ *
689
+ * Called when crosshair mode is entered so any lingering sphere preview
690
+ * (e.g. red dashed eraser outline) is wiped immediately. In normal flow
691
+ * `leftButtonDown === true` blocks crosshair toggle, so this shouldn't
692
+ * fire mid-stroke — but if it ever does, we drop the drag snapshot
693
+ * rather than committing a partial undo entry.
694
+ */
695
+ cancelActivePlacement() {
696
+ if (!this.active) {
697
+ this.clearPreview();
698
+ return;
699
+ }
700
+ this.active = false;
701
+ this.finalizeStrokeState();
702
+ }
488
703
  }
489
704
  //# sourceMappingURL=SphereBrushTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SphereBrushTool.js","sourceRoot":"","sources":["../../../../src/Utils/segmentation/tools/SphereBrushTool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SphereBrushTool.js","sourceRoot":"","sources":["../../../../src/Utils/segmentation/tools/SphereBrushTool.ts"],"names":[],"mappings":"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"}
@@ -64,7 +64,7 @@ export type ZoomHostDeps = Pick<ToolHost, 'resetPaintAreaUIPosition' | 'resizePa
64
64
  /** SphereTool host dependencies */
65
65
  export type SphereHostDeps = Pick<ToolHost, 'setEmptyCanvasSize' | 'drawImageOnEmptyImage' | 'enableCrosshair' | 'setUpSphereOrigins'>;
66
66
  /** DrawingTool host dependencies */
67
- export type DrawingHostDeps = Pick<ToolHost, 'setCurrentLayer' | 'compositeAllLayers' | 'syncLayerSliceData' | 'filterDrawedImage' | 'getVolumeForLayer' | 'pushUndoDelta' | 'getEraserUrls'>;
67
+ export type DrawingHostDeps = Pick<ToolHost, 'setCurrentLayer' | 'compositeAllLayers' | 'syncLayerSliceData' | 'filterDrawedImage' | 'getVolumeForLayer' | 'pushUndoDelta' | 'getEraserUrls' | 'renderSliceToCanvas' | 'getOrCreateSliceBuffer'>;
68
68
  /** DragSliceTool host dependencies */
69
69
  export type DragSliceHostDeps = Pick<ToolHost, 'setSyncsliceNum' | 'setIsDrawFalse' | 'flipDisplayImageByAxis' | 'setEmptyCanvasSize' | 'getOrCreateSliceBuffer' | 'renderSliceToCanvas' | 'refreshSphereOverlay' | 'compositeAllLayers'>;
70
70
  /** LayerChannelManager host dependencies */