From 0552fcfc4c4a673b288d81308f5c8a1633b55c91 Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Sat, 27 Jun 2026 14:12:02 -0400 Subject: [PATCH 1/3] feat(paint): add fill holes segmentation process Fill Holes fills enclosed background regions in a segment group on a slice. Options select current-slice vs whole-volume and all-segments vs the selected segment. Only background voxels are filled, so existing segments are never overwritten. Fill Holes is the default process. --- src/components/FillHolesParameterControls.vue | 96 ++++++++ .../GaussianSmoothParameterControls.vue | 2 +- src/components/PaintControls.vue | 19 +- src/components/ProcessControls.vue | 35 ++- src/components/ProcessTypeSelector.vue | 31 +-- src/components/ProcessWorkflow.vue | 21 +- src/components/processes.ts | 56 +++++ src/components/tools/paint/PaintTool.vue | 3 +- src/components/tools/paint/PaintWidget2D.vue | 3 +- .../tools/paint/__tests__/fillHoles.spec.ts | 209 ++++++++++++++++++ src/core/tools/paint/fillHoles.ts | 182 +++++++++++++++ src/core/tools/paint/fillHoles.worker.ts | 14 ++ src/store/__tests__/fillHoles.spec.ts | 174 +++++++++++++++ src/store/__tests__/paintProcess.spec.ts | 159 +++++++++++++ src/store/tools/fillHoles.ts | 134 +++++++++++ src/store/tools/paint.ts | 39 ++++ src/store/tools/paintProcess.ts | 122 +++++++--- tests/pageobjects/volview.page.ts | 81 +++++++ tests/specs/paint-fill-holes.e2e.ts | 76 +++++++ wdio.shared.conf.ts | 2 +- 20 files changed, 1353 insertions(+), 105 deletions(-) create mode 100644 src/components/FillHolesParameterControls.vue create mode 100644 src/components/processes.ts create mode 100644 src/core/tools/paint/__tests__/fillHoles.spec.ts create mode 100644 src/core/tools/paint/fillHoles.ts create mode 100644 src/core/tools/paint/fillHoles.worker.ts create mode 100644 src/store/__tests__/fillHoles.spec.ts create mode 100644 src/store/__tests__/paintProcess.spec.ts create mode 100644 src/store/tools/fillHoles.ts create mode 100644 tests/specs/paint-fill-holes.e2e.ts diff --git a/src/components/FillHolesParameterControls.vue b/src/components/FillHolesParameterControls.vue new file mode 100644 index 000000000..d44de6afa --- /dev/null +++ b/src/components/FillHolesParameterControls.vue @@ -0,0 +1,96 @@ + + + diff --git a/src/components/GaussianSmoothParameterControls.vue b/src/components/GaussianSmoothParameterControls.vue index e76426b98..3e1882b94 100644 --- a/src/components/GaussianSmoothParameterControls.vue +++ b/src/components/GaussianSmoothParameterControls.vue @@ -46,6 +46,6 @@ const gaussianSmoothStore = useGaussianSmoothStore(); const processStore = usePaintProcessStore(); const sigma = computed(() => gaussianSmoothStore.sigma); -const isDisabled = computed(() => processStore.processStep === 'previewing'); +const isDisabled = computed(() => processStore.processStep !== 'start'); const { setSigma } = gaussianSmoothStore; diff --git a/src/components/PaintControls.vue b/src/components/PaintControls.vue index 8bb591622..5576e8870 100644 --- a/src/components/PaintControls.vue +++ b/src/components/PaintControls.vue @@ -2,7 +2,7 @@ -