UNPKG

@cornerstonejs/core

Version:
59 lines (58 loc) 2.43 kB
import cache from '../../../cache/cache.js'; import { loadAndCacheGeometry } from '../../../loaders/geometryLoader.js'; import { createAndCacheVolume } from '../../../loaders/volumeLoader.js'; import resolveViewportVolumeId from '../../helpers/resolveViewportVolumeId.js'; import { getGenericViewportImageDisplaySet, isGenericViewportImageDisplaySet, } from '../genericViewportDisplaySetAccess.js'; export class DefaultVolume3DDataProvider { async load(dataId, options) { if (!options) { throw new Error(`[VolumeViewport3D] No load options were provided for ${dataId}`); } const dataSet = this.getDataSet(dataId); if (options.renderMode === 'vtkVolume3d') { if (!dataSet?.imageIds?.length) { throw new Error(`[VolumeViewport3D] No registered volume dataset for ${dataId}`); } const volumeId = resolveViewportVolumeId(dataSet.volumeId ?? dataId); const imageVolume = await createAndCacheVolume(volumeId, { imageIds: dataSet.imageIds, }); imageVolume.load(); return { id: dataId, type: 'image', imageIds: imageVolume.imageIds || dataSet.imageIds, imageVolume, renderMode: 'vtkVolume3d', volumeId, }; } const geometryId = dataSet?.geometryId || dataId; const geometry = cache.getGeometry(geometryId) || (await loadAndCacheGeometry(geometryId, dataSet?.geometryLoadOptions)); return { id: dataId, type: 'geometry', geometry, geometryId, renderMode: 'vtkGeometry3d', }; } getDataSet(dataId) { const dataSet = getGenericViewportImageDisplaySet(dataId); if (!isVolume3DRegisteredDataSet(dataSet)) { return; } return dataSet; } } function isVolume3DRegisteredDataSet(value) { if (!isGenericViewportImageDisplaySet(value)) { return false; } return ((value.geometryId === undefined || typeof value.geometryId === 'string') && (value.volumeId === undefined || typeof value.volumeId === 'string') && (value.geometryLoadOptions === undefined || (typeof value.geometryLoadOptions === 'object' && !Array.isArray(value.geometryLoadOptions)))); }