From 68e29090048a074f505c68bde82e6c0e62a2a24a Mon Sep 17 00:00:00 2001 From: Salim Kanoun Date: Mon, 18 Nov 2024 17:54:37 +0100 Subject: [PATCH 1/2] init investigation fusion api --- .../src/RenderingEngine/BaseVolumeViewport.ts | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/core/src/RenderingEngine/BaseVolumeViewport.ts b/packages/core/src/RenderingEngine/BaseVolumeViewport.ts index 1ffc52e1af..eadab7cded 100644 --- a/packages/core/src/RenderingEngine/BaseVolumeViewport.ts +++ b/packages/core/src/RenderingEngine/BaseVolumeViewport.ts @@ -2,6 +2,7 @@ import type vtkVolume from '@kitware/vtk.js/Rendering/Core/Volume'; import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'; import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps'; import vtkPiecewiseFunction from '@kitware/vtk.js/Common/DataModel/PiecewiseFunction'; +import vtkProxyManager from '@kitware/vtk.js/Proxy/Core/PiecewiseFunctionProxy'; import { vec2, vec3 } from 'gl-matrix'; import type { mat4 } from 'gl-matrix'; @@ -306,21 +307,26 @@ abstract class BaseVolumeViewport extends Viewport { } const { volumeActor } = applicableVolumeActorInfo; - const ofun = vtkPiecewiseFunction.newInstance(); if (typeof colormap.opacity === 'number') { - const range = volumeActor - .getProperty() - .getRGBTransferFunction(0) - .getRange(); - - ofun.addPoint(range[0], colormap.opacity); - ofun.addPoint(range[1], colormap.opacity); + const pwf = vtkProxyManager.newInstance(); + pwf.setMode(vtkProxyManager.Mode.Points); + pwf.setDataRange( + ...volumeActor.getProperty().getRGBTransferFunction(0).getRange() + ); + pwf.setPoints([[0, 1]]); // only slice mesh controls opacity + //pwf.setRescaleOnColorBy(false); + //pwf.setColorBy(arrayName, location); + volumeActor.getProperty().setOpacity(colormap.opacity); + volumeActor.getProperty().setRescaleOnColorBy(false); + //volumeActor.getProperty().setColorBy(arrayName, location); + volumeActor.getProperty().setScalarOpacity(0, ofun); } else { + const ofun = vtkPiecewiseFunction.newInstance(); colormap.opacity.forEach(({ opacity, value }) => { ofun.addPoint(value, opacity); }); + volumeActor.getProperty().setScalarOpacity(0, ofun); } - volumeActor.getProperty().setScalarOpacity(0, ofun); if (!this.viewportProperties.colormap) { this.viewportProperties.colormap = {}; From d6c3796896e853734ed9bc26b5c5de7bfe4b13ee Mon Sep 17 00:00:00 2001 From: Salim Kanoun Date: Mon, 18 Nov 2024 17:56:13 +0100 Subject: [PATCH 2/2] continue --- packages/core/src/RenderingEngine/BaseVolumeViewport.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/core/src/RenderingEngine/BaseVolumeViewport.ts b/packages/core/src/RenderingEngine/BaseVolumeViewport.ts index eadab7cded..bd31850e70 100644 --- a/packages/core/src/RenderingEngine/BaseVolumeViewport.ts +++ b/packages/core/src/RenderingEngine/BaseVolumeViewport.ts @@ -316,10 +316,7 @@ abstract class BaseVolumeViewport extends Viewport { pwf.setPoints([[0, 1]]); // only slice mesh controls opacity //pwf.setRescaleOnColorBy(false); //pwf.setColorBy(arrayName, location); - volumeActor.getProperty().setOpacity(colormap.opacity); - volumeActor.getProperty().setRescaleOnColorBy(false); - //volumeActor.getProperty().setColorBy(arrayName, location); - volumeActor.getProperty().setScalarOpacity(0, ofun); + volumeActor.getProperty().setScalarOpacity(0, pwf.getPiecewiseFunction()); } else { const ofun = vtkPiecewiseFunction.newInstance(); colormap.opacity.forEach(({ opacity, value }) => {