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 | 68x 68x 68x 68x 16x 16x 16x 16x 14x 14x 68x | import type { Types } from '@cornerstonejs/core';
import {
ToolAnnotationPair,
ToolAnnotationsPair,
} from '../types/InternalToolTypes';
/**
* Filters an array of tools with annotations, returning the first annotation
* for each tool that is moveable and at the mouse location. It results in
* one annotation per tool.
*
*
* @param element - The HTML element
* @param ToolAndAnnotations - The input tool array.
* @param canvasCoords - The coordinates of the mouse position.
* @param interactionType - The type of interaction that is taking place.
* @returns The filtered array containing ToolAndAnnotation
*/
export default function filterMoveableAnnotationTools(
element: HTMLDivElement,
ToolAndAnnotations: ToolAnnotationsPair[],
canvasCoords: Types.Point2,
interactionType = 'mouse'
): ToolAnnotationPair[] {
const proximity = interactionType === 'touch' ? 36 : 6;
// TODO - This could get pretty expensive pretty quickly. We don't want to fetch the camera
// And do world to canvas on each coord.
// We want to produce a matrix from canvas to world for the viewport and just do a matrix operation on each handle.
// This could still be expensive for ROIs, but we probably shouldn't have "handles" for them anyway.
const moveableAnnotationTools = [];
ToolAndAnnotations.forEach(({ tool, annotations }) => {
for (const annotation of annotations) {
Iif (annotation.isLocked || !annotation.isVisible) {
continue;
}
const near = tool.isPointNearTool(
element,
annotation,
canvasCoords,
proximity,
interactionType
);
if (near) {
moveableAnnotationTools.push({
tool,
annotation,
});
break;
}
}
});
return moveableAnnotationTools;
}
|