@cornerstonejs/core
Version:
Cornerstone3D Core
59 lines (58 loc) • 2.43 kB
JavaScript
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))));
}