MCPcopy
hub / github.com/apache/echarts / limitTurnAngle

Function limitTurnAngle

src/label/labelGuideHelper.ts:411–461  ·  view source on GitHub ↗
(linePoints: number[][], minTurnAngle: number)

Source from the content-addressed store, hash-verified

409 * @param minTurnAngle Radian of minimum turn angle. 0 - 180
410 */
411export function limitTurnAngle(linePoints: number[][], minTurnAngle: number) {
412 if (!(minTurnAngle <= 180 && minTurnAngle > 0)) {
413 return;
414 }
415 minTurnAngle = minTurnAngle / 180 * Math.PI;
416 // The line points can be
417 // /pt1----pt2 (label)
418 // /
419 // pt0/
420 pt0.fromArray(linePoints[0]);
421 pt1.fromArray(linePoints[1]);
422 pt2.fromArray(linePoints[2]);
423
424 Point.sub(dir, pt0, pt1);
425 Point.sub(dir2, pt2, pt1);
426
427 const len1 = dir.len();
428 const len2 = dir2.len();
429 if (len1 < 1e-3 || len2 < 1e-3) {
430 return;
431 }
432
433 dir.scale(1 / len1);
434 dir2.scale(1 / len2);
435
436 const angleCos = dir.dot(dir2);
437 const minTurnAngleCos = Math.cos(minTurnAngle);
438 if (minTurnAngleCos < angleCos) { // Smaller than minTurnAngle
439 // Calculate project point of pt0 on pt1-pt2
440 const d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);
441 tmpProjPoint.fromArray(tmpArr);
442 // Calculate new projected length with limited minTurnAngle and get the new connect point
443 tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI - minTurnAngle));
444 // Limit the new calculated connect point between pt1 and pt2.
445 const t = pt2.x !== pt1.x
446 ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x)
447 : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);
448 if (isNaN(t)) {
449 return;
450 }
451
452 if (t < 0) {
453 Point.copy(tmpProjPoint, pt1);
454 }
455 else if (t > 1) {
456 Point.copy(tmpProjPoint, pt2);
457 }
458
459 tmpProjPoint.toArray(linePoints[1]);
460 }
461}
462
463/**
464 * Limit the angle of line and the surface

Callers 2

pieLabelLayoutFunction · 0.90
updateLabelLinePointsFunction · 0.85

Calls 2

projectPointToLineFunction · 0.85
scaleMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…