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 | import type { Types } from '@cornerstonejs/core'; import areLineSegmentsIntersecting from './areLineSegmentsIntersecting'; /** * Get all intersections between a polyline and a line segment. * @param polyline - Polyline points * @param p1 - Start point of line segment * @param q1 - End point of line segment * @param closed - Test the intersection against the line segment that connects * the last to the first point when set to true * @returns Start/end point indexes of all line segments that intersect (p1, q1) */ export default function getLineSegmentIntersectionsIndexes( polyline: Types.Point2[], p1: Types.Point2, q1: Types.Point2, closed = true ): Types.Point2[] { const intersections: Types.Point2[] = []; const numPoints = polyline.length; const maxI = numPoints - (closed ? 1 : 2); for (let i = 0; i <= maxI; i++) { const p2 = polyline[i]; // Do not use % operator for better performance const j = i === numPoints - 1 ? 0 : i + 1; const q2 = polyline[j]; if (areLineSegmentsIntersecting(p1, q1, p2, q2)) { intersections.push([i, j]); } } return intersections; } |