test.js 3.2 KB

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