@cornerstonejs/core
Version:
Cornerstone3D Core
50 lines (49 loc) • 2.02 kB
JavaScript
import { setVolumesForViewports } from '../RenderingEngine/helpers/index.js';
import { createAndCacheVolume, getUnknownVolumeLoaderSchema, } from '../loaders/volumeLoader.js';
import { Events, ViewportType } from '../enums/index.js';
import uuidv4 from './uuidv4.js';
async function convertStackToVolumeViewport({ viewport, options = {}, }) {
const renderingEngine = viewport.getRenderingEngine();
let volumeId = options.volumeId || `${uuidv4()}`;
if (volumeId.split(':').length === 0) {
const schema = getUnknownVolumeLoaderSchema();
volumeId = `${schema}:${volumeId}`;
}
const { id, element } = viewport;
const viewportId = options.viewportId || id;
const imageIds = viewport.getImageIds();
const prevViewPresentation = viewport.getViewPresentation();
const prevViewReference = viewport.getViewReference();
renderingEngine.enableElement({
viewportId,
type: ViewportType.ORTHOGRAPHIC,
element,
defaultOptions: {
background: options.background,
orientation: options.orientation,
},
});
const volume = (await createAndCacheVolume(volumeId, {
imageIds,
}));
volume.load();
const volumeViewport = renderingEngine.getViewport(viewportId);
await setVolumesForViewports(renderingEngine, [
{
volumeId,
},
], [viewportId]);
const volumeViewportNewVolumeHandler = () => {
volumeViewport.render();
element.removeEventListener(Events.VOLUME_VIEWPORT_NEW_VOLUME, volumeViewportNewVolumeHandler);
};
const addVolumeViewportNewVolumeListener = () => {
element.addEventListener(Events.VOLUME_VIEWPORT_NEW_VOLUME, volumeViewportNewVolumeHandler);
};
addVolumeViewportNewVolumeListener();
volumeViewport.setViewPresentation(prevViewPresentation);
volumeViewport.setViewReference(prevViewReference);
volumeViewport.render();
return volumeViewport;
}
export { convertStackToVolumeViewport };