All files / packages/core/src/utilities getVolumeViewportsContainingSameVolumes.ts

0% Statements 0/21
0% Branches 0/8
0% Functions 0/5
0% Lines 0/16

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                                                                                                                     
import { IVolumeViewport } from '../types';
import {
  getRenderingEngines,
  getRenderingEngine,
} from '../RenderingEngine/getRenderingEngine';
 
/**
 * Returns the viewports containing the same volume actors (all actors) the same
 * as the target viewport. If renderingEngineId is provided, it will only return
 * viewports that are associated with the renderingEngineId; otherwise, it will
 * return search in all rendering engines.
 *
 * This method is useful for finding viewports that are associated with the same
 * volume (e.g., for tools that share state between viewports).
 *
 * @param viewport - target viewport
 * @returns array of viewports that have the same volume actor as the target viewport
 */
function getVolumeViewportsContainingSameVolumes(
  targetViewport: IVolumeViewport,
  renderingEngineId?: string
): Array<IVolumeViewport> {
  // If rendering engine is not provided, use all rendering engines
  let renderingEngines;
  if (renderingEngineId) {
    renderingEngines = [getRenderingEngine(renderingEngineId)];
  } else {
    renderingEngines = getRenderingEngines();
  }
 
  const sameVolumesViewports = [];
 
  renderingEngines.forEach((renderingEngine) => {
    const targetActors = targetViewport.getActors();
    const viewports = renderingEngine.getVolumeViewports();
 
    for (const vp of viewports) {
      const vpActors = vp.getActors();
 
      if (vpActors.length !== targetActors.length) {
        continue;
      }
 
      // every targetActors should be in the vpActors
      const sameVolumes = targetActors.every(({ uid }) =>
        vpActors.find((vpActor) => uid === vpActor.uid)
      );
 
      if (sameVolumes) {
        sameVolumesViewports.push(vp);
      }
    }
  });
 
  return sameVolumesViewports;
}
 
export default getVolumeViewportsContainingSameVolumes;