All files / extensions/cornerstone/src/utils isMeasurementWithinViewport.ts

91.66% Statements 11/12
66.66% Branches 2/3
100% Functions 1/1
90.9% Lines 10/11

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                      197x 1x 1x     1x 1x       1x 1x 1x     1x 1x            
import { getCenterExtent } from './getCenterExtent';
 
/**
 * Determines if a measurement is within the current viewport extent.
 * Uses the measurement's bounding box extent to efficiently check if the entire
 * measurement fits within the viewport's visible area.
 *
 * @param {Object} viewport - The viewport object containing camera information
 * @param {Object} measurement - The measurement object containing points to check
 * @returns {boolean} True if the measurement extent is within the viewport, false otherwise
 */
export const isMeasurementWithinViewport = (viewport, measurement) => {
  const camera = viewport.getCamera();
  const { focalPoint, parallelScale } = camera;
 
  // Get the measurement's bounding box extent
  const { extent } = getCenterExtent(measurement);
  const { min, max } = extent;
 
  // Check if the entire bounding box fits within the viewport extent
  // We need to check both the min and max corners of the bounding box
  for (let i = 0; i < 3; i++) {
    const minDistance = Math.abs(min[i] - focalPoint[i]);
    const maxDistance = Math.abs(max[i] - focalPoint[i]);
 
    // If either the min or max point is outside the viewport extent, return false
    if (minDistance > parallelScale || maxDistance > parallelScale) {
      return false;
    }
  }
 
  return true; // The entire measurement extent is within the viewport
};