@cornerstonejs/core
Version:
Cornerstone3D Core
55 lines (54 loc) • 2.15 kB
JavaScript
import vtkVolume from '@kitware/vtk.js/Rendering/Core/Volume.js';
import { loadVolume } from '../../loaders/volumeLoader.js';
import createVolumeMapper from './createVolumeMapper.js';
import triggerEvent from '../../utilities/triggerEvent.js';
import { Events } from '../../enums/index.js';
import setDefaultVolumeVOI from './setDefaultVolumeVOI.js';
import { getConfiguration } from '../../init.js';
async function createVolumeActor(props, element, viewportId, suppressEvents = false) {
const { volumeId, callback, blendMode } = props;
const imageVolume = await loadVolume(volumeId);
if (!imageVolume) {
throw new Error(`imageVolume with id: ${imageVolume.volumeId} does not exist`);
}
const { imageData, vtkOpenGLTexture } = imageVolume;
const volumeMapper = createVolumeMapper(imageData, vtkOpenGLTexture);
if (blendMode) {
volumeMapper.setBlendMode(blendMode);
}
const volumeActor = vtkVolume.newInstance();
volumeActor.setMapper(volumeMapper);
const { numberOfComponents } = imageData.get('numberOfComponents');
const volumeProperty = volumeActor.getProperty();
volumeProperty.set({ viewportId: viewportId }, true);
if (getConfiguration().rendering.preferSizeOverAccuracy) {
volumeProperty.setPreferSizeOverAccuracy(true);
}
if (numberOfComponents === 3) {
volumeActor.getProperty().setIndependentComponents(false);
}
await setDefaultVolumeVOI(volumeActor, imageVolume);
if (callback) {
callback({ volumeActor, volumeId });
}
if (!suppressEvents) {
triggerVOIModified(element, viewportId, volumeActor, volumeId);
}
return volumeActor;
}
function triggerVOIModified(element, viewportId, volumeActor, volumeId) {
const voiRange = volumeActor
.getProperty()
.getRGBTransferFunction(0)
.getRange();
const voiModifiedEventDetail = {
viewportId,
range: {
lower: voiRange[0],
upper: voiRange[1],
},
volumeId,
};
triggerEvent(element, Events.VOI_MODIFIED, voiModifiedEventDetail);
}
export default createVolumeActor;