UNPKG

@cornerstonejs/core

Version:
55 lines (54 loc) 2.15 kB
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;