copper3d 3.6.2 → 3.6.5

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 (63) hide show
  1. package/dist/Loader/copperNrrdLoader.js +1 -1
  2. package/dist/Loader/copperNrrdLoader.js.map +1 -1
  3. package/dist/Scene/copperScene.d.ts +4 -4
  4. package/dist/Scene/copperScene.js +4 -4
  5. package/dist/Scene/copperScene.js.map +1 -1
  6. package/dist/Utils/segmentation/NrrdTools.d.ts +41 -2
  7. package/dist/Utils/segmentation/NrrdTools.js +30 -2
  8. package/dist/Utils/segmentation/NrrdTools.js.map +1 -1
  9. package/dist/Utils/segmentation/tools/AiAssistTool.d.ts +108 -5
  10. package/dist/Utils/segmentation/tools/AiAssistTool.js +408 -25
  11. package/dist/Utils/segmentation/tools/AiAssistTool.js.map +1 -1
  12. package/dist/Utils/surfaceAnnotation/MeshGraph.d.ts +12 -10
  13. package/dist/Utils/surfaceAnnotation/MeshGraph.js +14 -12
  14. package/dist/Utils/surfaceAnnotation/MeshGraph.js.map +1 -1
  15. package/dist/Utils/surfaceAnnotation/SurfaceAnnotator.d.ts +48 -28
  16. package/dist/Utils/surfaceAnnotation/SurfaceAnnotator.js +76 -50
  17. package/dist/Utils/surfaceAnnotation/SurfaceAnnotator.js.map +1 -1
  18. package/dist/Utils/surfaceAnnotation/annotationStore.d.ts +4 -4
  19. package/dist/Utils/surfaceAnnotation/annotationStore.js +4 -4
  20. package/dist/Utils/surfaceAnnotation/annotationStore.js.map +1 -1
  21. package/dist/Utils/surfaceAnnotation/contourRender.d.ts +1 -1
  22. package/dist/Utils/surfaceAnnotation/contourRender.js +16 -11
  23. package/dist/Utils/surfaceAnnotation/contourRender.js.map +1 -1
  24. package/dist/Utils/surfaceAnnotation/geodesicContour.d.ts +11 -10
  25. package/dist/Utils/surfaceAnnotation/geodesicContour.js +16 -15
  26. package/dist/Utils/surfaceAnnotation/geodesicContour.js.map +1 -1
  27. package/dist/Utils/surfaceAnnotation/pointMarkers.d.ts +3 -2
  28. package/dist/Utils/surfaceAnnotation/pointMarkers.js +6 -2
  29. package/dist/Utils/surfaceAnnotation/pointMarkers.js.map +1 -1
  30. package/dist/Utils/surfaceAnnotation/raycastSurface.d.ts +3 -2
  31. package/dist/Utils/surfaceAnnotation/raycastSurface.js +71 -5
  32. package/dist/Utils/surfaceAnnotation/raycastSurface.js.map +1 -1
  33. package/dist/Utils/surfaceAnnotation/strokeContour.d.ts +9 -6
  34. package/dist/Utils/surfaceAnnotation/strokeContour.js +15 -10
  35. package/dist/Utils/surfaceAnnotation/strokeContour.js.map +1 -1
  36. package/dist/Utils/surfaceAnnotation/types.d.ts +5 -5
  37. package/dist/Utils/surfaceAnnotation/types.js +2 -2
  38. package/dist/Utils/surfaceAnnotation/types.js.map +1 -1
  39. package/dist/Utils/texture2d.js +4 -2
  40. package/dist/Utils/texture2d.js.map +1 -1
  41. package/dist/Utils/workers/reformatSaveDataWorker.js +2 -2
  42. package/dist/Utils/workers/reformatSaveDataWorker.js.map +1 -1
  43. package/dist/bundle.esm.js +684 -157
  44. package/dist/bundle.umd.js +684 -157
  45. package/dist/index.d.ts +1 -1
  46. package/dist/index.js +9 -2
  47. package/dist/index.js.map +1 -1
  48. package/dist/lib/three-vignette.js +8 -2
  49. package/dist/lib/three-vignette.js.map +1 -1
  50. package/dist/types/Scene/copperScene.d.ts +4 -4
  51. package/dist/types/Utils/segmentation/NrrdTools.d.ts +41 -2
  52. package/dist/types/Utils/segmentation/tools/AiAssistTool.d.ts +108 -5
  53. package/dist/types/Utils/surfaceAnnotation/MeshGraph.d.ts +12 -10
  54. package/dist/types/Utils/surfaceAnnotation/SurfaceAnnotator.d.ts +48 -28
  55. package/dist/types/Utils/surfaceAnnotation/annotationStore.d.ts +4 -4
  56. package/dist/types/Utils/surfaceAnnotation/contourRender.d.ts +1 -1
  57. package/dist/types/Utils/surfaceAnnotation/geodesicContour.d.ts +11 -10
  58. package/dist/types/Utils/surfaceAnnotation/pointMarkers.d.ts +3 -2
  59. package/dist/types/Utils/surfaceAnnotation/raycastSurface.d.ts +3 -2
  60. package/dist/types/Utils/surfaceAnnotation/strokeContour.d.ts +9 -6
  61. package/dist/types/Utils/surfaceAnnotation/types.d.ts +5 -5
  62. package/dist/types/index.d.ts +1 -1
  63. package/package.json +2 -1
@@ -20,7 +20,7 @@
20
20
  * any view (the scratch is a full 3D volume).
21
21
  */
22
22
  import { BaseTool } from "./BaseTool";
23
- import { MaskVolume, AI_MASK_CHANNEL_COLORS } from "../core";
23
+ import { MaskVolume } from "../core";
24
24
  /** Scratch volume key in maskData.volumes — kept OUT of image.layers so
25
25
  * compositeAllLayers ignores it (we render it ourselves in start()). */
26
26
  export const AI_SCRATCH_LAYER = "aiScratch";
@@ -38,14 +38,29 @@ export class AiAssistTool extends BaseTool {
38
38
  this.committedVol = null;
39
39
  this.promptTool = "point";
40
40
  this.polarity = 1; // 1 = foreground (positive), 0 = background
41
- /** Target channel/label (1-8) the AI paints into the "AI layer" channel. */
42
- this.channel = 1;
41
+ /** The label value (1-255) the AI currently paints into = the active Segmentation.
42
+ * Each Segmentation is a label value in the single-channel scratch volume; its
43
+ * colour lives in the volume's colorMap (set via setSegmentColor). */
44
+ this.activeLabel = 1;
43
45
  /** Scribble brush radius (px), user-adjustable via slider. */
44
46
  this.scribbleSize = 5;
45
47
  /** Accumulated prompts for the CURRENT slice; reset on slice/axis change. */
46
48
  this.points = [];
47
49
  this.scribble = [];
50
+ /** Lasso contour sent to the backend (densified along the curve at finish). */
51
+ this.lasso = [];
48
52
  this.activeSlice = -1;
53
+ // ── Lasso v2 editing state (discrete clicked vertices → smooth closed curve) ──
54
+ /** Placed lasso vertices (voxel + screen + polarity). Empty = not editing. */
55
+ this.lassoVerts = [];
56
+ /** Undo / redo snapshot stacks of the vertex list (for Ctrl+Z / Ctrl+Y). */
57
+ this.lassoUndo = [];
58
+ this.lassoRedo = [];
59
+ /** Index of the vertex currently hovered (shows a red ✕; click removes it). −1 = none. */
60
+ this.lassoHoverIdx = -1;
61
+ /** Double-click detection (a dbl-click finishes the lasso). */
62
+ this.lastLassoDownTime = 0;
63
+ this.lastLassoDownPos = { x: 0, y: 0 };
49
64
  // Drag state (box / scribble) — voxel coords for the prompt
50
65
  this.dragging = false;
51
66
  this.dragStart = null;
@@ -56,8 +71,14 @@ export class AiAssistTool extends BaseTool {
56
71
  // Live cursor position (screen px) for the scribble brush-size preview ring —
57
72
  // updated on every hover move so the ring follows the mouse like the paint brush.
58
73
  this.hoverScreen = null;
74
+ /** Hide the point seed markers once a prediction has painted (only the mask
75
+ * should remain). A new point click re-shows them until its mask returns. */
76
+ this.hidePointMarkers = false;
59
77
  /** Fired when a prompt gesture completes — app calls backend, then applyMask(). */
60
78
  this.onPrompt = null;
79
+ /** Fired whenever the lasso vertex set changes (add/delete/undo/redo/finish/cancel),
80
+ * so the panel can reactively show the Finish button + vertex count. */
81
+ this.onLassoChange = null;
61
82
  this.host = host;
62
83
  }
63
84
  // ── Configuration (driven from the panel via NrrdTools) ────────────────────
@@ -75,16 +96,51 @@ export class AiAssistTool extends BaseTool {
75
96
  setScribbleSize(size) {
76
97
  this.scribbleSize = Math.max(1, Math.min(40, Math.round(size)));
77
98
  }
78
- setChannel(channel) {
79
- const c = Math.max(1, Math.min(8, Math.round(channel)));
80
- // Changing channel starts a NEW region in the new colour otherwise the
81
- // accumulated points would be re-predicted and repainted in the new label,
82
- // recolouring the previous channel's region.
83
- if (c !== this.channel)
99
+ /** Select the active Segmentation by its label value (1-255). Switching starts a
100
+ * fresh prompt set otherwise accumulated prompts would be re-predicted and
101
+ * repainted into the new label, recolouring the previous segmentation's region. */
102
+ setActiveSegment(label) {
103
+ const c = Math.max(1, Math.min(255, Math.round(label)));
104
+ if (c !== this.activeLabel)
84
105
  this.resetPrompts();
85
- this.channel = c;
106
+ this.activeLabel = c;
107
+ }
108
+ getActiveLabel() { return this.activeLabel; }
109
+ /** Set a Segmentation's colour (its label's entry in the scratch volume colorMap).
110
+ * The 2D overlay repaints next frame (copper3d's render loop re-reads the map). */
111
+ setSegmentColor(label, color) {
112
+ var _a;
113
+ (_a = this.scratchVol) === null || _a === void 0 ? void 0 : _a.setChannelColor(Math.round(label), color);
114
+ }
115
+ /** "New segmentation": freeze the current regions (so they persist) and switch to
116
+ * a fresh label, exactly like the old "New region" but targeting a new label. */
117
+ newSegment(label) {
118
+ this.commitRegion();
119
+ this.setActiveSegment(label);
120
+ }
121
+ /** Delete a Segmentation: erase every voxel painted with its label from BOTH the
122
+ * live scratch and the frozen (committed) volume, so the region disappears from
123
+ * the view (otherwise orphaned label voxels would render with the wrong colour).
124
+ * Goes via setRawData so the volume's version counter bumps (overlay repaints). */
125
+ clearSegment(label) {
126
+ const lbl = Math.round(label);
127
+ const zeroOut = (v) => {
128
+ if (!v)
129
+ return;
130
+ const raw = v.getRawData().slice();
131
+ let changed = false;
132
+ for (let i = 0; i < raw.length; i++) {
133
+ if (raw[i] === lbl) {
134
+ raw[i] = 0;
135
+ changed = true;
136
+ }
137
+ }
138
+ if (changed)
139
+ v.setRawData(raw);
140
+ };
141
+ zeroOut(this.scratchVol);
142
+ zeroOut(this.committedVol);
86
143
  }
87
- getChannel() { return this.channel; }
88
144
  getScratchVolume() { return this.scratchVol; }
89
145
  /** Serialize the scratch volume as per-z-slice RLE (only NON-empty slices),
90
146
  * for persisting to ai_generated_nii_LPS on the backend. Binary (any channel →
@@ -126,6 +182,50 @@ export class AiAssistTool extends BaseTool {
126
182
  }
127
183
  return { axis: "z", width, height, slices: out };
128
184
  }
185
+ /** Per-SEGMENTATION serialization for the 3D build: one binary RLE per non-empty
186
+ * z-slice PER label (no binarize-merge), so the backend writes a multi-label
187
+ * NIfTI and colours the GLB per segmentation. Includes both live and frozen
188
+ * regions (both live in scratchVol). */
189
+ getScratchSegments() {
190
+ if (!this.scratchVol)
191
+ return null;
192
+ const { depth } = this.scratchVol.getDimensions();
193
+ const byLabel = new Map();
194
+ let width = 0;
195
+ let height = 0;
196
+ for (let z = 0; z < depth; z++) {
197
+ const { data, width: w, height: h } = this.scratchVol.getSliceUint8(z, "z");
198
+ width = w;
199
+ height = h;
200
+ const labels = new Set();
201
+ for (let i = 0; i < data.length; i++) {
202
+ if (data[i])
203
+ labels.add(data[i]);
204
+ }
205
+ for (const label of labels) {
206
+ const runs = [];
207
+ let value = 0; // always begin with a 0-run (matches backend rle_decode)
208
+ let count = 0;
209
+ for (let i = 0; i < data.length; i++) {
210
+ const v = data[i] === label ? 1 : 0;
211
+ if (v === value) {
212
+ count++;
213
+ }
214
+ else {
215
+ runs.push(count);
216
+ value = v;
217
+ count = 1;
218
+ }
219
+ }
220
+ runs.push(count);
221
+ if (!byLabel.has(label))
222
+ byLabel.set(label, []);
223
+ byLabel.get(label).push({ sliceIndex: z, rle: runs });
224
+ }
225
+ }
226
+ const segments = [...byLabel.entries()].map(([label, slices]) => ({ label, slices }));
227
+ return { axis: "z", width, height, segments };
228
+ }
129
229
  // ── Sandbox lifecycle ──────────────────────────────────────────────────────
130
230
  /** Create (or reuse) the scratch volume sized to the layer grid and register
131
231
  * it under maskData.volumes['aiScratch']. Snapshots the empty buffer. */
@@ -146,14 +246,10 @@ export class AiAssistTool extends BaseTool {
146
246
  this.scratchVol.clear();
147
247
  }
148
248
  volumes[AI_SCRATCH_LAYER] = this.scratchVol;
149
- // Paint the AI scratch with the AI-Assist palette (channel 1 = cyan) so the 2D
150
- // overlay matches the cyan ai_generated GLB. Scoped to THIS volume only — the
151
- // global palette / clinician mask colours are untouched.
152
- for (let ch = 1; ch <= 8; ch++) {
153
- const c = AI_MASK_CHANNEL_COLORS[ch];
154
- if (c)
155
- this.scratchVol.setChannelColor(ch, { r: c.r, g: c.g, b: c.b, a: c.a });
156
- }
249
+ // Segmentation colours are now driven per-label from the app (store useAiAssist
250
+ // setSegmentColor) right after enter, so the scratch can carry an arbitrary
251
+ // number of independently-coloured segmentations. No fixed palette is applied
252
+ // here. Scoped to THIS volume only global/clinician palettes are untouched.
157
253
  this.snapshotData = this.scratchVol.getRawData().slice();
158
254
  this.committedVol = null; // nothing frozen at session start
159
255
  this.resetPrompts();
@@ -199,10 +295,26 @@ export class AiAssistTool extends BaseTool {
199
295
  resetPrompts() {
200
296
  this.points = [];
201
297
  this.scribble = [];
298
+ this.lasso = [];
202
299
  this.box = undefined;
203
300
  this.dragScreenStart = null;
204
301
  this.dragScreen = null;
205
302
  this.screenScribble = [];
303
+ this.clearLassoEditing();
304
+ }
305
+ /** Drop the in-progress lasso vertices + undo/redo history (does not touch a
306
+ * prediction already painted from a finished lasso). */
307
+ clearLassoEditing() {
308
+ this.lassoVerts = [];
309
+ this.lassoUndo = [];
310
+ this.lassoRedo = [];
311
+ this.lassoHoverIdx = -1;
312
+ this.notifyLasso();
313
+ }
314
+ /** Tell the app layer the lasso vertex set changed (drives the Finish button). */
315
+ notifyLasso() {
316
+ var _a;
317
+ (_a = this.onLassoChange) === null || _a === void 0 ? void 0 : _a.call(this, this.lassoVerts.length, this.lassoVerts.length > 0);
206
318
  }
207
319
  // ── Coordinate mapping (all three views) ───────────────────────────────────
208
320
  //
@@ -263,14 +375,53 @@ export class AiAssistTool extends BaseTool {
263
375
  return null;
264
376
  return { vx, vy, w: sd.w, h: sd.h };
265
377
  }
378
+ /** Voxel-slice (vx,vy) → screen offset (px). Exact inverse of toVoxel, so
379
+ * markers / lasso curves drawn from voxel coords track pan AND zoom each frame
380
+ * (the freehand previews store screen px directly; persistent overlays don't). */
381
+ voxelToScreen(vx, vy) {
382
+ const sd = this.sliceDims();
383
+ if (!sd)
384
+ return null;
385
+ const nrrd = this.ctx.nrrd_states;
386
+ const img = nrrd.image;
387
+ let hMM, vMM, flipV;
388
+ switch (this.ctx.protectedData.axis) {
389
+ case "z":
390
+ hMM = img.nrrd_x_mm;
391
+ vMM = img.nrrd_y_mm;
392
+ flipV = false;
393
+ break;
394
+ case "y":
395
+ hMM = img.nrrd_x_mm;
396
+ vMM = img.nrrd_z_mm;
397
+ flipV = true;
398
+ break;
399
+ case "x":
400
+ hMM = img.nrrd_z_mm;
401
+ vMM = img.nrrd_y_mm;
402
+ flipV = false;
403
+ break;
404
+ default: return null;
405
+ }
406
+ const vyRaw = flipV ? sd.h - 1 - vy : vy;
407
+ const x = (vx * hMM / sd.w) * nrrd.view.sizeFactor;
408
+ const y = (vyRaw * vMM / sd.h) * nrrd.view.sizeFactor;
409
+ return { x, y };
410
+ }
266
411
  // ── Pointer handlers (left button; right stays pan in EventRouter) ──────────
267
412
  onPointerDown(e) {
268
413
  const hit = this.toVoxel(e);
269
414
  if (!hit)
270
415
  return;
271
416
  this.syncSlice();
417
+ // Lasso is click-to-place vertices (NOT a drag) — own handler.
418
+ if (this.promptTool === "lasso") {
419
+ this.onLassoPointerDown(e, hit.vx, hit.vy);
420
+ return;
421
+ }
272
422
  if (this.promptTool === "point") {
273
423
  this.points.push({ x: hit.vx, y: hit.vy, label: this.polarity });
424
+ this.hidePointMarkers = false; // show the new seed until its mask returns
274
425
  this.emit();
275
426
  }
276
427
  else {
@@ -286,9 +437,43 @@ export class AiAssistTool extends BaseTool {
286
437
  }
287
438
  }
288
439
  }
440
+ /** Lasso click: double-click finishes; click on a vertex deletes it; otherwise
441
+ * add a vertex. Nothing is sent to the backend until finishLasso(). */
442
+ onLassoPointerDown(e, vx, vy) {
443
+ const now = Date.now();
444
+ const dxl = e.offsetX - this.lastLassoDownPos.x;
445
+ const dyl = e.offsetY - this.lastLassoDownPos.y;
446
+ const isDbl = now - this.lastLassoDownTime < 300 &&
447
+ dxl * dxl + dyl * dyl <= 36; // ~6px
448
+ this.lastLassoDownTime = now;
449
+ this.lastLassoDownPos = { x: e.offsetX, y: e.offsetY };
450
+ // Double-click → finish (the 1st click of the pair already placed the vertex).
451
+ if (isDbl && this.lassoVerts.length >= 3) {
452
+ this.finishLasso();
453
+ return;
454
+ }
455
+ // Click on an existing vertex → delete it (recompute the curve).
456
+ const idx = this.lassoVertAt(e.offsetX, e.offsetY);
457
+ if (idx >= 0) {
458
+ this.pushLassoUndo();
459
+ this.lassoVerts.splice(idx, 1);
460
+ this.lassoHoverIdx = -1;
461
+ this.notifyLasso();
462
+ return;
463
+ }
464
+ // Otherwise add a new vertex.
465
+ this.pushLassoUndo();
466
+ this.lassoVerts.push({ vx, vy, sx: e.offsetX, sy: e.offsetY, label: this.polarity });
467
+ this.notifyLasso();
468
+ }
289
469
  onPointerMove(e) {
290
- // Track hover for the scribble preview ring even when not drawing.
470
+ // Track hover for the scribble preview ring / point crosshair even when idle.
291
471
  this.hoverScreen = { x: e.offsetX, y: e.offsetY };
472
+ // Lasso: update which vertex (if any) is hovered, for the red ✕ delete affordance.
473
+ if (this.promptTool === "lasso") {
474
+ this.lassoHoverIdx = this.lassoVertAt(e.offsetX, e.offsetY);
475
+ return; // lasso is click-based; no drag accumulation
476
+ }
292
477
  if (!this.dragging)
293
478
  return;
294
479
  // Track screen pos first so the live preview follows even slightly out of bounds.
@@ -341,12 +526,116 @@ export class AiAssistTool extends BaseTool {
341
526
  box: this.box,
342
527
  scribble: this.scribble.length ? [...this.scribble] : undefined,
343
528
  scribbleRadius: this.scribbleSize,
529
+ lasso: this.lasso.length ? [...this.lasso] : undefined,
344
530
  });
345
531
  }
532
+ // ── Lasso v2 (discrete vertices → smooth closed curve) ──────────────────────
533
+ /** Index of the lasso vertex under (sx,sy) within the hit radius, else −1.
534
+ * Uses live voxel→screen so it tracks pan/zoom. Topmost (latest) wins. */
535
+ lassoVertAt(sx, sy) {
536
+ var _a;
537
+ const r2 = AiAssistTool.LASSO_HIT_R * AiAssistTool.LASSO_HIT_R;
538
+ for (let i = this.lassoVerts.length - 1; i >= 0; i--) {
539
+ const v = this.lassoVerts[i];
540
+ const s = (_a = this.voxelToScreen(v.vx, v.vy)) !== null && _a !== void 0 ? _a : { x: v.sx, y: v.sy };
541
+ const dx = sx - s.x, dy = sy - s.y;
542
+ if (dx * dx + dy * dy <= r2)
543
+ return i;
544
+ }
545
+ return -1;
546
+ }
547
+ /** Snapshot the vertex list for undo (clears redo). */
548
+ pushLassoUndo() {
549
+ this.lassoUndo.push(this.lassoVerts.map((v) => (Object.assign({}, v))));
550
+ this.lassoRedo = [];
551
+ if (this.lassoUndo.length > 100)
552
+ this.lassoUndo.shift();
553
+ }
554
+ /** Public: undo the last add/delete of a lasso vertex (Ctrl+Z while editing). */
555
+ lassoUndoAction() {
556
+ if (!this.lassoUndo.length)
557
+ return;
558
+ this.lassoRedo.push(this.lassoVerts.map((v) => (Object.assign({}, v))));
559
+ this.lassoVerts = this.lassoUndo.pop();
560
+ this.lassoHoverIdx = -1;
561
+ this.notifyLasso();
562
+ }
563
+ /** Public: redo (Ctrl+Y / Ctrl+Shift+Z while editing). */
564
+ lassoRedoAction() {
565
+ if (!this.lassoRedo.length)
566
+ return;
567
+ this.lassoUndo.push(this.lassoVerts.map((v) => (Object.assign({}, v))));
568
+ this.lassoVerts = this.lassoRedo.pop();
569
+ this.lassoHoverIdx = -1;
570
+ this.notifyLasso();
571
+ }
572
+ /** Public: abandon the in-progress lasso (Esc). */
573
+ cancelLasso() { this.clearLassoEditing(); }
574
+ /** Public: true while the user is placing lasso vertices (≥1 vertex). */
575
+ isLassoEditing() { return this.lassoVerts.length > 0; }
576
+ /** Public: number of placed lasso vertices (drives the Finish button label/enable). */
577
+ getLassoVertCount() { return this.lassoVerts.length; }
578
+ /** Vertices ordered by polar angle around their centroid, so the closed curve is
579
+ * a SIMPLE (non-self-intersecting) loop regardless of click order — otherwise
580
+ * connecting points in click order + closing easily produces a bow-tie crossing.
581
+ * Trade-off: deep concavities collapse to their star-shaped hull, which is fine
582
+ * for a "rough loop around a blob". */
583
+ orderedLassoVerts() {
584
+ const n = this.lassoVerts.length;
585
+ if (n < 3)
586
+ return this.lassoVerts.slice();
587
+ let cx = 0, cy = 0;
588
+ for (const v of this.lassoVerts) {
589
+ cx += v.vx;
590
+ cy += v.vy;
591
+ }
592
+ cx /= n;
593
+ cy /= n;
594
+ return this.lassoVerts.slice().sort((a, b) => Math.atan2(a.vy - cy, a.vx - cx) - Math.atan2(b.vy - cy, b.vx - cx));
595
+ }
596
+ /** Public: close the curve, densify it, and send it to the backend as the lasso
597
+ * contour. Needs ≥3 vertices (a real area). Then clears the editing state. */
598
+ finishLasso() {
599
+ if (this.lassoVerts.length < 3)
600
+ return;
601
+ // Order by angle (no self-crossing), then sample the SAME closed curve the user
602
+ // saw → contour points (so the mask matches the curve, not a straight polygon).
603
+ const contour = this.sampleClosedSpline(this.orderedLassoVerts().map((v) => ({ x: v.vx, y: v.vy })), 16);
604
+ const label = this.lassoVerts[0].label; // a lasso carries one polarity (set at start)
605
+ this.lasso = contour.map((p) => ({ x: Math.round(p.x), y: Math.round(p.y), label }));
606
+ this.clearLassoEditing();
607
+ this.emit();
608
+ }
609
+ /** Sample a smooth CLOSED Catmull-Rom spline through `pts` → denser polyline.
610
+ * `segs` samples per control-point span. <3 pts → returns a copy unchanged. */
611
+ sampleClosedSpline(pts, segs) {
612
+ const n = pts.length;
613
+ if (n < 3)
614
+ return pts.slice();
615
+ const at = (i) => pts[((i % n) + n) % n];
616
+ const out = [];
617
+ for (let i = 0; i < n; i++) {
618
+ const p0 = at(i - 1), p1 = at(i), p2 = at(i + 1), p3 = at(i + 2);
619
+ for (let s = 0; s < segs; s++) {
620
+ const t = s / segs, t2 = t * t, t3 = t2 * t;
621
+ out.push({
622
+ x: 0.5 * (2 * p1.x + (-p0.x + p2.x) * t +
623
+ (2 * p0.x - 5 * p1.x + 4 * p2.x - p3.x) * t2 +
624
+ (-p0.x + 3 * p1.x - 3 * p2.x + p3.x) * t3),
625
+ y: 0.5 * (2 * p1.y + (-p0.y + p2.y) * t +
626
+ (2 * p0.y - 5 * p1.y + 4 * p2.y - p3.y) * t2 +
627
+ (-p0.y + 3 * p1.y - 3 * p2.y + p3.y) * t3),
628
+ });
629
+ }
630
+ }
631
+ return out;
632
+ }
346
633
  // ── Apply backend result → scratch volume ──────────────────────────────────
347
634
  applyMask(result) {
348
635
  if (!this.scratchVol)
349
636
  return;
637
+ // A prediction landed → hide the point seed markers; only the mask should show.
638
+ this.hidePointMarkers = true;
350
639
  // 3D result (engine B): write each slice across the covered span.
351
640
  if (result.slices && result.sliceRange) {
352
641
  const [lo] = result.sliceRange;
@@ -376,7 +665,7 @@ export class AiAssistTool extends BaseTool {
376
665
  pos += run;
377
666
  value ^= 1;
378
667
  }
379
- const ch = this.channel;
668
+ const ch = this.activeLabel;
380
669
  try {
381
670
  const out = this.scratchVol.getSliceUint8(sliceIndex, axis).data; // copy
382
671
  // Frozen same-channel pixels for this slice (if any region was committed).
@@ -449,10 +738,7 @@ export class AiAssistTool extends BaseTool {
449
738
  }
450
739
  targetCtx.restore();
451
740
  }
452
- // Scribble brush-size preview ring (when NOT dragging) — a circle centred on
453
- // the cursor whose radius = scribbleSize, so the user sees the brush size and
454
- // how the slider changes it (mirrors the paint brush's preview ring). Drawn
455
- // every frame from the live hover position by copper3d's render loop.
741
+ // Scribble brush-size preview ring (when NOT dragging).
456
742
  if (this.promptTool === "scribble" && !this.dragging && this.hoverScreen) {
457
743
  targetCtx.save();
458
744
  const fg = this.polarity === 1;
@@ -465,6 +751,103 @@ export class AiAssistTool extends BaseTool {
465
751
  targetCtx.stroke();
466
752
  targetCtx.restore();
467
753
  }
754
+ // Point markers + hover crosshair so the clinician sees exactly where each seed
755
+ // lands (and where the next click will go) before/while the prediction returns.
756
+ if (this.promptTool === "point") {
757
+ if (!this.hidePointMarkers) {
758
+ for (const p of this.points) {
759
+ const s = this.voxelToScreen(p.x, p.y);
760
+ if (s)
761
+ this.drawSeedMarker(targetCtx, s.x, s.y, p.label === 1);
762
+ }
763
+ }
764
+ if (!this.dragging && this.hoverScreen) {
765
+ targetCtx.save();
766
+ targetCtx.strokeStyle = this.polarity === 1
767
+ ? "rgba(120,255,180,0.55)" : "rgba(255,120,120,0.55)";
768
+ targetCtx.lineWidth = 1;
769
+ const { x, y } = this.hoverScreen;
770
+ targetCtx.beginPath();
771
+ targetCtx.moveTo(x - 7, y);
772
+ targetCtx.lineTo(x + 7, y);
773
+ targetCtx.moveTo(x, y - 7);
774
+ targetCtx.lineTo(x, y + 7);
775
+ targetCtx.stroke();
776
+ targetCtx.restore();
777
+ }
778
+ }
779
+ // Lasso v2: smooth closed curve through the placed vertices (closed + filled
780
+ // from ≥2 vertices), vertex dots, and a red ✕ on the hovered vertex.
781
+ if (this.promptTool === "lasso" && this.lassoVerts.length > 0) {
782
+ this.renderLassoOverlay(targetCtx);
783
+ }
784
+ }
785
+ /** A seed marker (small filled dot + ring) for point prompts. */
786
+ drawSeedMarker(ctx, x, y, fg) {
787
+ ctx.save();
788
+ const col = fg ? "rgba(120,255,180,0.95)" : "rgba(255,120,120,0.95)";
789
+ ctx.fillStyle = col;
790
+ ctx.strokeStyle = "rgba(0,0,0,0.55)";
791
+ ctx.lineWidth = 1.5;
792
+ ctx.beginPath();
793
+ ctx.arc(x, y, 3.5, 0, Math.PI * 2);
794
+ ctx.fill();
795
+ ctx.stroke();
796
+ ctx.restore();
797
+ }
798
+ /** Render the lasso editing overlay (curve + fill + vertices + hover ✕). */
799
+ renderLassoOverlay(ctx) {
800
+ var _a;
801
+ const fg = this.lassoVerts[0].label === 1;
802
+ const stroke = fg ? "rgba(120,255,180,0.95)" : "rgba(255,120,120,0.95)";
803
+ const fill = fg ? "rgba(120,255,180,0.14)" : "rgba(255,120,120,0.14)";
804
+ // PATH: angularly-ordered vertices (simple, non-crossing loop) in screen space.
805
+ const ov = this.orderedLassoVerts().map((v) => { var _a; return (_a = this.voxelToScreen(v.vx, v.vy)) !== null && _a !== void 0 ? _a : { x: v.sx, y: v.sy }; });
806
+ const path = ov.length >= 3 ? this.sampleClosedSpline(ov, 16) : ov;
807
+ ctx.save();
808
+ if (path.length >= 2) {
809
+ ctx.beginPath();
810
+ ctx.moveTo(path[0].x, path[0].y);
811
+ for (let i = 1; i < path.length; i++)
812
+ ctx.lineTo(path[i].x, path[i].y);
813
+ ctx.closePath();
814
+ ctx.fillStyle = fill;
815
+ ctx.fill();
816
+ ctx.lineCap = "round";
817
+ ctx.lineJoin = "round";
818
+ ctx.lineWidth = 1.75;
819
+ ctx.strokeStyle = stroke;
820
+ ctx.stroke();
821
+ }
822
+ // Vertex handles — drawn from the ORIGINAL vertex order so lassoHoverIdx (an
823
+ // index into lassoVerts from the hit-test) marks the correct one for the ✕.
824
+ for (let i = 0; i < this.lassoVerts.length; i++) {
825
+ const v = this.lassoVerts[i];
826
+ const p = (_a = this.voxelToScreen(v.vx, v.vy)) !== null && _a !== void 0 ? _a : { x: v.sx, y: v.sy };
827
+ if (i === this.lassoHoverIdx) {
828
+ // Red ✕ — click to delete this vertex.
829
+ ctx.strokeStyle = "rgba(255,90,90,0.98)";
830
+ ctx.lineWidth = 2;
831
+ ctx.beginPath();
832
+ ctx.moveTo(p.x - 5, p.y - 5);
833
+ ctx.lineTo(p.x + 5, p.y + 5);
834
+ ctx.moveTo(p.x + 5, p.y - 5);
835
+ ctx.lineTo(p.x - 5, p.y + 5);
836
+ ctx.stroke();
837
+ }
838
+ else {
839
+ ctx.fillStyle = stroke;
840
+ ctx.strokeStyle = "rgba(0,0,0,0.55)";
841
+ ctx.lineWidth = 1.25;
842
+ ctx.beginPath();
843
+ ctx.arc(p.x, p.y, 3, 0, Math.PI * 2);
844
+ ctx.fill();
845
+ ctx.stroke();
846
+ }
847
+ }
848
+ ctx.restore();
468
849
  }
469
850
  }
851
+ /** Screen-pixel radius for hit-testing a hovered vertex. */
852
+ AiAssistTool.LASSO_HIT_R = 8;
470
853
  //# sourceMappingURL=AiAssistTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AiAssistTool.js","sourceRoot":"","sources":["../../../../src/Utils/segmentation/tools/AiAssistTool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AiAssistTool.js","sourceRoot":"","sources":["../../../../src/Utils/segmentation/tools/AiAssistTool.ts"],"names":[],"mappings":"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"}