From 3c54e3a0bd93d09999bc3c46181cc49c9083de95 Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Wed, 28 Oct 2026 20:08:20 -0400 Subject: [PATCH] feat: add adaptive volume rendering defaults and reset controls --- patches/@kitware+vtk.js+38.0.4.patch | 12 + src/components/VolumePresets.vue | 85 ++-- src/components/VolumeProperties.vue | 30 +- src/components/VolumeRendering.vue | 342 ++++++++++---- src/components/VolumeViewer.vue | 7 +- .../vtk/VtkBaseVolumeRepresentation.vue | 12 +- .../__tests__/usePiecewiseHistogram.spec.ts | 241 ++++++++++ .../__tests__/useVolumeColoringConfig.spec.ts | 134 ++++++ .../__tests__/useVolumeThumbnailing.spec.ts | 96 +++- src/composables/usePiecewiseHistogram.ts | 105 +++++ src/composables/useVolumeColoringConfig.ts | 22 + .../useVolumeColoringInitializer.ts | 31 +- src/composables/useVolumeThumbnailing.ts | 118 ++--- src/config.ts | 2 +- src/core/thumbnailers/volume-thumbnailer.ts | 73 ++- src/core/vtk/__tests__/useVtkComputed.spec.ts | 74 +++ src/core/vtk/useVtkComputed.ts | 32 +- src/store/image-stats.ts | 41 +- .../view-configs/volume-coloring.test.ts | 175 ++++++++ src/store/view-configs/volume-coloring.ts | 337 ++++++++++++-- .../__tests__/adaptiveVolumePreset.spec.ts | 155 +++++++ src/utils/__tests__/histogram.spec.ts | 19 + src/utils/adaptiveVolumePreset.ts | 206 +++++++++ src/utils/adaptiveVolumePresets.ts | 39 ++ src/utils/createHistogramWorker.ts | 20 + src/utils/dataArrayRange.ts | 12 + src/utils/defaultVolumePreset.ts | 96 ++++ src/utils/histogram.ts | 20 + src/utils/histogram.worker.ts | 5 +- src/utils/volumeProperties.ts | 7 +- src/vtk/ColorMaps.ts | 7 + src/vtk/PiecewiseWidget/index.js | 6 + tests/fixtures/label-outline/server.mjs | 27 +- tests/fixtures/volume-texture/index.html | 10 + tests/fixtures/volume-texture/scene.ts | 96 ++++ tests/fixtures/volume-texture/server.mjs | 5 + tests/fixtures/vtkFixtureServer.mjs | 25 ++ tests/rootHooks.ts | 1 + tests/specs/adaptive-sparse-volumes.e2e.ts | 132 ++++++ tests/specs/adaptive-volume-presets.e2e.ts | 421 ++++++++++++++++++ tests/specs/adaptiveCtCheck.ts | 162 +++++++ tests/specs/pet-ct-sample.e2e.ts | 36 +- tests/specs/progressive-volume-presets.e2e.ts | 261 +++++++++++ tests/specs/utils.ts | 21 +- tests/specs/volume-default-presets.e2e.ts | 259 +++++++++++ tests/specs/volume-texture-updates.e2e.ts | 40 ++ tests/specs/volume-thumbnail-layout.e2e.ts | 37 +- tests/specs/volumeHistogramTestUtils.ts | 123 +++++ tests/specs/volumeRenderingTestUtils.ts | 210 +++++++++ wdio.chrome.conf.ts | 1 + wdio.shared.conf.ts | 9 +- 51 files changed, 4023 insertions(+), 414 deletions(-) create mode 100644 src/composables/__tests__/usePiecewiseHistogram.spec.ts create mode 100644 src/composables/__tests__/useVolumeColoringConfig.spec.ts create mode 100644 src/composables/usePiecewiseHistogram.ts create mode 100644 src/composables/useVolumeColoringConfig.ts create mode 100644 src/core/vtk/__tests__/useVtkComputed.spec.ts create mode 100644 src/store/view-configs/volume-coloring.test.ts create mode 100644 src/utils/__tests__/adaptiveVolumePreset.spec.ts create mode 100644 src/utils/__tests__/histogram.spec.ts create mode 100644 src/utils/adaptiveVolumePreset.ts create mode 100644 src/utils/adaptiveVolumePresets.ts create mode 100644 src/utils/createHistogramWorker.ts create mode 100644 src/utils/dataArrayRange.ts create mode 100644 src/utils/defaultVolumePreset.ts create mode 100644 tests/fixtures/volume-texture/index.html create mode 100644 tests/fixtures/volume-texture/scene.ts create mode 100644 tests/fixtures/volume-texture/server.mjs create mode 100644 tests/fixtures/vtkFixtureServer.mjs create mode 100644 tests/specs/adaptive-sparse-volumes.e2e.ts create mode 100644 tests/specs/adaptive-volume-presets.e2e.ts create mode 100644 tests/specs/adaptiveCtCheck.ts create mode 100644 tests/specs/progressive-volume-presets.e2e.ts create mode 100644 tests/specs/volume-default-presets.e2e.ts create mode 100644 tests/specs/volume-texture-updates.e2e.ts create mode 100644 tests/specs/volumeHistogramTestUtils.ts create mode 100644 tests/specs/volumeRenderingTestUtils.ts diff --git a/patches/@kitware+vtk.js+38.0.4.patch b/patches/@kitware+vtk.js+38.0.4.patch index a5f898acc..746d58b1f 100644 --- a/patches/@kitware+vtk.js+38.0.4.patch +++ b/patches/@kitware+vtk.js+38.0.4.patch @@ -11,3 +11,15 @@ index ba92841..a59d269 100644 const background = model.renderable.getBackgroundByReference(); gl.clearColor(background[0], background[1], background[2], background[3]); clearMask |= gl.COLOR_BUFFER_BIT; +diff --git a/node_modules/@kitware/vtk.js/Rendering/OpenGL/VolumeMapper.js b/node_modules/@kitware/vtk.js/Rendering/OpenGL/VolumeMapper.js +--- a/node_modules/@kitware/vtk.js/Rendering/OpenGL/VolumeMapper.js ++++ b/node_modules/@kitware/vtk.js/Rendering/OpenGL/VolumeMapper.js +@@ -868,7 +868,7 @@ + const reBuildTex = !tex?.oglObject?.getHandle() || tex?.hash !== scalarsHash; + const updatedExtents = volumeProperty.getUpdatedExtents(); + const hasUpdatedExtents = !!updatedExtents.length; +- if (reBuildTex && !hasUpdatedExtents) { ++ if (reBuildTex && (!hasUpdatedExtents || !tex?.oglObject?.getHandle())) { + const newScalarTexture = Texture_default.newInstance(); + newScalarTexture.setOpenGLRenderWindow(model._openGLRenderWindow); + const dims = imageData.getDimensions(); diff --git a/src/components/VolumePresets.vue b/src/components/VolumePresets.vue index d5f78d978..f09db7176 100644 --- a/src/components/VolumePresets.vue +++ b/src/components/VolumePresets.vue @@ -1,15 +1,19 @@