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 | import type { Types } from '@cornerstonejs/core';
import { SVGDrawingHelper } from '../types';
import drawLine from './drawLine';
export default function drawArrow(
svgDrawingHelper: SVGDrawingHelper,
annotationUID: string,
arrowUID: string,
start: Types.Point2,
end: Types.Point2,
options = {}
): void {
// if length is NaN return
if (isNaN(start[0]) || isNaN(start[1]) || isNaN(end[0]) || isNaN(end[1])) {
return;
}
const { color, width, lineWidth, lineDash } = Object.assign(
{
color: 'rgb(0, 255, 0)',
width: '2',
lineWidth: undefined,
lineDash: undefined,
},
options
);
// The line itself
drawLine(svgDrawingHelper, annotationUID, arrowUID, start, end, {
color,
width,
lineWidth,
lineDash,
});
// Drawing the head arrow with two lines
// Variables to be used when creating the arrow
const headLength = 10;
const angle = Math.atan2(end[1] - start[1], end[0] - start[0]);
const firstLine = {
start: [
end[0] - headLength * Math.cos(angle - Math.PI / 7),
end[1] - headLength * Math.sin(angle - Math.PI / 7),
] as Types.Point2,
end: end,
};
const secondLine = {
start: [
end[0] - headLength * Math.cos(angle + Math.PI / 7),
end[1] - headLength * Math.sin(angle + Math.PI / 7),
] as Types.Point2,
end: end,
};
drawLine(
svgDrawingHelper,
annotationUID,
'2',
firstLine.start,
firstLine.end,
{
color,
width,
lineWidth,
}
);
drawLine(
svgDrawingHelper,
annotationUID,
'3',
secondLine.start,
secondLine.end,
{
color,
width,
lineWidth,
}
);
}
|