grid.js 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { __assign, __read } from "tslib";
  2. import { isFunction } from '@antv/util';
  3. import { degToRad, getCallbackValue, scale, subStyleProps } from '../../../util';
  4. import { Grid } from '../../grid';
  5. import { CLASS_NAMES } from '../constant';
  6. import { getValuePos } from './line';
  7. import { filterExec, getDirectionVector } from './utils';
  8. function getGridVector(value, attr) {
  9. return getDirectionVector(value, attr.gridDirection, attr);
  10. }
  11. function getGridCenter(attr) {
  12. var type = attr.type, gridCenter = attr.gridCenter;
  13. if (type === 'linear')
  14. return gridCenter;
  15. return gridCenter || attr.center;
  16. }
  17. function renderStraight(data, attr) {
  18. var gridLength = attr.gridLength;
  19. return data.map(function (_a, index) {
  20. var value = _a.value;
  21. var _b = __read(getValuePos(value, attr), 2), x = _b[0], y = _b[1];
  22. var _c = __read(scale(getGridVector(value, attr), gridLength), 2), dx = _c[0], dy = _c[1];
  23. return {
  24. id: index,
  25. points: [
  26. [x, y],
  27. [x + dx, y + dy],
  28. ],
  29. };
  30. });
  31. }
  32. function renderSurround(data, attr) {
  33. var controlAngles = attr.gridControlAngles;
  34. var center = getGridCenter(attr);
  35. if (!center)
  36. throw new Error('grid center is not provide');
  37. if (data.length < 2)
  38. throw new Error('Invalid grid data');
  39. if (!controlAngles || controlAngles.length === 0)
  40. throw new Error('Invalid gridControlAngles');
  41. var _a = __read(center, 2), cx = _a[0], cy = _a[1];
  42. return data.map(function (_a, index) {
  43. var value = _a.value;
  44. var _b = __read(getValuePos(value, attr), 2), sx = _b[0], sy = _b[1];
  45. var _c = __read([sx - cx, sy - cy], 2), dx = _c[0], dy = _c[1];
  46. var points = [];
  47. controlAngles.forEach(function (angle) {
  48. var angleInRad = degToRad(angle);
  49. var _a = __read([Math.cos(angleInRad), Math.sin(angleInRad)], 2), cosa = _a[0], sina = _a[1];
  50. var x = dx * cosa - dy * sina + cx;
  51. var y = dx * sina + dy * cosa + cy;
  52. points.push([x, y]);
  53. });
  54. return { points: points, id: index };
  55. });
  56. }
  57. export function renderGrid(container, data, attr, animate) {
  58. var gridAttr = subStyleProps(attr, 'grid');
  59. var type = gridAttr.type, areaFill = gridAttr.areaFill;
  60. var center = getGridCenter(attr);
  61. var finalData = filterExec(data, attr.gridFilter);
  62. var gridItems = type === 'segment' ? renderStraight(finalData, attr) : renderSurround(finalData, attr);
  63. var style = __assign(__assign({}, gridAttr), { center: center, areaFill: isFunction(areaFill)
  64. ? finalData.map(function (datum, index) { return getCallbackValue(areaFill, [datum, index, finalData]); })
  65. : areaFill, animate: animate, data: gridItems });
  66. return container
  67. .selectAll(CLASS_NAMES.grid.class)
  68. .data([1])
  69. .join(function (enter) { return enter.append(function () { return new Grid({ style: style }); }).attr('className', CLASS_NAMES.grid.name); }, function (update) {
  70. return update.transition(function () {
  71. return this.update(style);
  72. });
  73. }, function (exit) { return exit.remove(); })
  74. .transitions();
  75. }
  76. //# sourceMappingURL=grid.js.map