test.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import { __read, __values } from "tslib";
  2. import { parseSeriesAttr, scale } from '../../../util';
  3. import { getLabelVector } from '../guides/utils';
  4. import { isAxisVertical } from '../guides/line';
  5. import { Bounds } from './bounds';
  6. import { contain } from './contain';
  7. import { intersect } from './intersect';
  8. /**
  9. * 创建副轴包围盒
  10. * @returns return false if no crossSize, else croseBBox
  11. */
  12. function createCrossBBox(attr, padding) {
  13. var type = attr.type, labelDirection = attr.labelDirection, crossSize = attr.crossSize;
  14. if (!crossSize)
  15. return false;
  16. if (type === 'arc') {
  17. var center = attr.center, radius = attr.radius;
  18. var _a = __read(center, 2), cx = _a[0], cy = _a[1];
  19. var size = labelDirection === 'negative' ? 0 : crossSize;
  20. var dMin = -radius - size;
  21. var dMax = radius + size;
  22. var _b = __read(parseSeriesAttr(padding), 4), top_1 = _b[0], right_1 = _b[1], bottom_1 = _b[2], left_1 = _b[3];
  23. // 假定始终为顺时针方向
  24. return new Bounds(cx + dMin - left_1, cy + dMin - top_1, cx + dMax + right_1, cy + dMax + bottom_1);
  25. }
  26. var _c = __read(attr.startPos, 2), sx = _c[0], sy = _c[1], _d = __read(attr.endPos, 2), ex = _d[0], ey = _d[1];
  27. // 水平时取左右,垂直时取上下
  28. var _e = __read(isAxisVertical(attr)
  29. ? [-padding, 0, padding, 0]
  30. : [0, padding, 0, -padding], 4), top = _e[0], right = _e[1], bottom = _e[2], left = _e[3];
  31. var labelVector = getLabelVector(0, attr);
  32. var diff = scale(labelVector, crossSize);
  33. var bbox = new Bounds(sx, sy, ex, ey);
  34. bbox.x1 += left;
  35. bbox.y1 += top;
  36. bbox.x2 += right + diff[0];
  37. bbox.y2 += bottom + diff[1];
  38. return bbox;
  39. }
  40. export function boundTest(items, attr, margin) {
  41. var e_1, _a;
  42. var crossPadding = attr.crossPadding;
  43. var resultSet = new Set();
  44. var prev = null;
  45. var crossBBox = createCrossBBox(attr, crossPadding);
  46. var testContain = function (item) {
  47. if (crossBBox)
  48. return contain(crossBBox, item);
  49. return true;
  50. };
  51. var testIntersect = function (prevItem, currItem) {
  52. if (!prevItem)
  53. return true;
  54. return !intersect(prevItem, currItem, parseSeriesAttr(margin));
  55. };
  56. try {
  57. for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {
  58. var curr = items_1_1.value;
  59. if (!testContain(curr)) {
  60. resultSet.add(curr);
  61. }
  62. else if (!prev || testIntersect(prev, curr)) {
  63. prev = curr;
  64. }
  65. else {
  66. resultSet.add(prev);
  67. resultSet.add(curr);
  68. }
  69. }
  70. }
  71. catch (e_1_1) { e_1 = { error: e_1_1 }; }
  72. finally {
  73. try {
  74. if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);
  75. }
  76. finally { if (e_1) throw e_1.error; }
  77. }
  78. return Array.from(resultSet);
  79. }
  80. //# sourceMappingURL=test.js.map