feat(4D): Add 4D dynamic volume rendering and new pre-clinical 4d pt/ct mode (#3664)

Co-authored-by: Alireza <ar.sedghi@gmail.com>
Co-authored-by: Neil <neil.a.macphee@gmail.com>
This commit is contained in:
authored and GitHub committed 2024-04-09 23:57:34 -04:00
1 parent dc0b183dd4
commit d57e8bc157
200 files changed
+9589 -2178

No files matched your search

+60 -2
View File
@@ -1,6 +1,60 @@
import { cache } from '@cornerstonejs/core';
import { utilities } from '@cornerstonejs/tools';
function initCineService(cineService) {
function _getVolumesFromViewport(viewport) {
return viewport ? viewport.getActors().map(actor => cache.getVolume(actor.uid)) : [];
}
function _getVolumeFromViewport(viewport) {
const volumes = _getVolumesFromViewport(viewport);
const dynamicVolume = volumes.find(volume => volume.isDynamicVolume());
return dynamicVolume ?? volumes[0];
}
/**
* Return all viewports that needs to be synchronized with the source
* viewport passed as parameter when cine is updated.
* @param servicesManager ServiceManager
* @param srcViewportIndex Source viewport index
* @returns array with viewport information.
*/
function _getSyncedViewports(servicesManager, srcViewportId) {
const { viewportGridService, cornerstoneViewportService } = servicesManager.services;
const { viewports: viewportsStates } = viewportGridService.getState();
const srcViewportState = viewportsStates.get(srcViewportId);
if (srcViewportState?.viewportOptions?.viewportType !== 'volume') {
return [];
}
const srcViewport = cornerstoneViewportService.getCornerstoneViewport(srcViewportId);
const srcVolume = srcViewport ? _getVolumeFromViewport(srcViewport) : null;
if (!srcVolume?.isDynamicVolume()) {
return [];
}
const { volumeId: srcVolumeId } = srcVolume;
return Array.from(viewportsStates.values())
.filter(({ viewportId }) => {
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
return viewportId !== srcViewportId && viewport?.hasVolumeId(srcVolumeId);
})
.map(({ viewportId }) => ({ viewportId }));
}
function initCineService(servicesManager) {
const { cineService } = servicesManager.services;
const getSyncedViewports = viewportId => {
return _getSyncedViewports(servicesManager, viewportId);
};
const playClip = (element, playClipOptions) => {
return utilities.cine.playClip(element, playClipOptions);
};
@@ -9,7 +63,11 @@ function initCineService(cineService) {
return utilities.cine.stopClip(element);
};
cineService.setServiceImplementation({ playClip, stopClip });
cineService.setServiceImplementation({
getSyncedViewports,
playClip,
stopClip,
});
}
export default initCineService;