Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | import { getVolumeInfo, splitImageIdsBy4DTags } from './helpers'; import StreamingDynamicImageVolume from './StreamingDynamicImageVolume'; interface IVolumeLoader { promise: Promise<StreamingDynamicImageVolume>; cancel: () => void; decache: () => void; } function get4DVolumeInfo(imageIds: string[]) { const { imageIdsGroups, splittingTag } = splitImageIdsBy4DTags(imageIds); return { volumesInfo: imageIdsGroups.map((imageIds) => getVolumeInfo(imageIds)), splittingTag, }; } /** * It handles loading of a image by streaming in its imageIds. It will be the * volume loader if the schema for the volumeID is `cornerstoneStreamingImageVolume`. * This function returns a promise that resolves to the StreamingDynamicImageVolume instance. * * In order to use the cornerstoneStreamingDynamicImageVolumeLoader you should use * createAndCacheVolume helper from the cornerstone-core volumeLoader module. * * @param volumeId - The ID of the volume * @param options - options for loading, imageIds * @returns a promise that resolves to a StreamingDynamicImageVolume */ function cornerstoneStreamingDynamicImageVolumeLoader( volumeId: string, options: { imageIds: string[]; } ): IVolumeLoader { if (!options || !options.imageIds || !options.imageIds.length) { throw new Error( 'ImageIds must be provided to create a 4D streaming image volume' ); } const { imageIds } = options; const { volumesInfo, splittingTag } = get4DVolumeInfo(imageIds); const { metadata: volumeMetadata, dimensions, spacing, origin, direction, sizeInBytes, } = volumesInfo[0]; const sortedImageIdsArrays = []; const scalarDataArrays = []; volumesInfo.forEach((volumeInfo) => { sortedImageIdsArrays.push(volumeInfo.sortedImageIds); scalarDataArrays.push(volumeInfo.scalarData); }); const sortedImageIds = sortedImageIdsArrays.flat(); let streamingImageVolume = new StreamingDynamicImageVolume( // ImageVolume properties { volumeId, metadata: volumeMetadata, dimensions, spacing, origin, direction, scalarData: scalarDataArrays, sizeInBytes, imageIds: sortedImageIds, splittingTag, }, // Streaming properties { imageIds: sortedImageIds, loadStatus: { // todo: loading and loaded should be on ImageVolume loaded: false, loading: false, cancelled: false, cachedFrames: [], callbacks: [], }, } ); return { promise: Promise.resolve(streamingImageVolume), decache: () => { streamingImageVolume.destroy(); streamingImageVolume = null; }, cancel: () => { streamingImageVolume.cancelLoading(); }, }; } export default cornerstoneStreamingDynamicImageVolumeLoader; |