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.
- package/dist/Loader/copperNrrdLoader.js +1 -1
- package/dist/Loader/copperNrrdLoader.js.map +1 -1
- package/dist/Scene/copperScene.d.ts +4 -4
- package/dist/Scene/copperScene.js +4 -4
- package/dist/Scene/copperScene.js.map +1 -1
- package/dist/Utils/segmentation/NrrdTools.d.ts +41 -2
- package/dist/Utils/segmentation/NrrdTools.js +30 -2
- package/dist/Utils/segmentation/NrrdTools.js.map +1 -1
- package/dist/Utils/segmentation/tools/AiAssistTool.d.ts +108 -5
- package/dist/Utils/segmentation/tools/AiAssistTool.js +408 -25
- package/dist/Utils/segmentation/tools/AiAssistTool.js.map +1 -1
- package/dist/Utils/surfaceAnnotation/MeshGraph.d.ts +12 -10
- package/dist/Utils/surfaceAnnotation/MeshGraph.js +14 -12
- package/dist/Utils/surfaceAnnotation/MeshGraph.js.map +1 -1
- package/dist/Utils/surfaceAnnotation/SurfaceAnnotator.d.ts +48 -28
- package/dist/Utils/surfaceAnnotation/SurfaceAnnotator.js +76 -50
- package/dist/Utils/surfaceAnnotation/SurfaceAnnotator.js.map +1 -1
- package/dist/Utils/surfaceAnnotation/annotationStore.d.ts +4 -4
- package/dist/Utils/surfaceAnnotation/annotationStore.js +4 -4
- package/dist/Utils/surfaceAnnotation/annotationStore.js.map +1 -1
- package/dist/Utils/surfaceAnnotation/contourRender.d.ts +1 -1
- package/dist/Utils/surfaceAnnotation/contourRender.js +16 -11
- package/dist/Utils/surfaceAnnotation/contourRender.js.map +1 -1
- package/dist/Utils/surfaceAnnotation/geodesicContour.d.ts +11 -10
- package/dist/Utils/surfaceAnnotation/geodesicContour.js +16 -15
- package/dist/Utils/surfaceAnnotation/geodesicContour.js.map +1 -1
- package/dist/Utils/surfaceAnnotation/pointMarkers.d.ts +3 -2
- package/dist/Utils/surfaceAnnotation/pointMarkers.js +6 -2
- package/dist/Utils/surfaceAnnotation/pointMarkers.js.map +1 -1
- package/dist/Utils/surfaceAnnotation/raycastSurface.d.ts +3 -2
- package/dist/Utils/surfaceAnnotation/raycastSurface.js +71 -5
- package/dist/Utils/surfaceAnnotation/raycastSurface.js.map +1 -1
- package/dist/Utils/surfaceAnnotation/strokeContour.d.ts +9 -6
- package/dist/Utils/surfaceAnnotation/strokeContour.js +15 -10
- package/dist/Utils/surfaceAnnotation/strokeContour.js.map +1 -1
- package/dist/Utils/surfaceAnnotation/types.d.ts +5 -5
- package/dist/Utils/surfaceAnnotation/types.js +2 -2
- package/dist/Utils/surfaceAnnotation/types.js.map +1 -1
- package/dist/Utils/texture2d.js +4 -2
- package/dist/Utils/texture2d.js.map +1 -1
- package/dist/Utils/workers/reformatSaveDataWorker.js +2 -2
- package/dist/Utils/workers/reformatSaveDataWorker.js.map +1 -1
- package/dist/bundle.esm.js +684 -157
- package/dist/bundle.umd.js +684 -157
- package/dist/index.d.ts +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/three-vignette.js +8 -2
- package/dist/lib/three-vignette.js.map +1 -1
- package/dist/types/Scene/copperScene.d.ts +4 -4
- package/dist/types/Utils/segmentation/NrrdTools.d.ts +41 -2
- package/dist/types/Utils/segmentation/tools/AiAssistTool.d.ts +108 -5
- package/dist/types/Utils/surfaceAnnotation/MeshGraph.d.ts +12 -10
- package/dist/types/Utils/surfaceAnnotation/SurfaceAnnotator.d.ts +48 -28
- package/dist/types/Utils/surfaceAnnotation/annotationStore.d.ts +4 -4
- package/dist/types/Utils/surfaceAnnotation/contourRender.d.ts +1 -1
- package/dist/types/Utils/surfaceAnnotation/geodesicContour.d.ts +11 -10
- package/dist/types/Utils/surfaceAnnotation/pointMarkers.d.ts +3 -2
- package/dist/types/Utils/surfaceAnnotation/raycastSurface.d.ts +3 -2
- package/dist/types/Utils/surfaceAnnotation/strokeContour.d.ts +9 -6
- package/dist/types/Utils/surfaceAnnotation/types.d.ts +5 -5
- package/dist/types/index.d.ts +1 -1
- 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
|
|
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
|
-
/**
|
|
42
|
-
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
if (c !== this.
|
|
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.
|
|
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
|
-
//
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
|
|
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
|
|
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.
|
|
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)
|
|
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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"}
|