meter-gauge.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { registerShape, Util } from '@antv/g2';
  2. import { clamp } from '@antv/util';
  3. /**
  4. * 自定义 Shape 部分: 自定义米轨仪表盘
  5. * 定义 STEP, STEP_RATIO. 可绘制区域: 1 / (STEP + 1) * i -> 1 / (STEP + 1) * i + (STEP_RATIO / (STEP + 1))
  6. */
  7. registerShape('interval', 'meter-gauge', {
  8. draw: function (cfg, container) {
  9. // 使用 customInfo 传递参数
  10. var _a = cfg.customInfo.meter, meter = _a === void 0 ? {} : _a;
  11. var _b = meter.steps, STEP = _b === void 0 ? 50 : _b, _c = meter.stepRatio, STEP_RATIO = _c === void 0 ? 0.5 : _c;
  12. STEP = STEP < 1 ? 1 : STEP;
  13. // stepRatio 取值范围: (0, 1]
  14. STEP_RATIO = clamp(STEP_RATIO, 0, 1);
  15. var _d = this.coordinate, COORD_START_ANGLE = _d.startAngle, COORD_END_ANGLE = _d.endAngle;
  16. var GAP = 0;
  17. if (STEP_RATIO > 0 && STEP_RATIO < 1) {
  18. var TOTAL = COORD_END_ANGLE - COORD_START_ANGLE;
  19. GAP = TOTAL / STEP / (STEP_RATIO / (1 - STEP_RATIO) + 1 - 1 / STEP);
  20. }
  21. var INTERVAL = (GAP / (1 - STEP_RATIO)) * STEP_RATIO;
  22. var group = container.addGroup();
  23. // 绘制图形的时候,留下 gap
  24. var center = this.coordinate.getCenter();
  25. var radius = this.coordinate.getRadius();
  26. var _e = Util.getAngle(cfg, this.coordinate), START_ANGLE = _e.startAngle, END_ANGLE = _e.endAngle;
  27. for (var startAngle = START_ANGLE; startAngle < END_ANGLE;) {
  28. var endAngle = void 0;
  29. var r = (startAngle - COORD_START_ANGLE) % (INTERVAL + GAP);
  30. if (r < INTERVAL) {
  31. endAngle = startAngle + (INTERVAL - r);
  32. }
  33. else {
  34. startAngle += INTERVAL + GAP - r;
  35. endAngle = startAngle + INTERVAL;
  36. }
  37. var path = Util.getSectorPath(center.x, center.y, radius, startAngle, Math.min(endAngle, END_ANGLE), radius * this.coordinate.innerRadius);
  38. group.addShape('path', {
  39. name: 'meter-gauge',
  40. attrs: {
  41. path: path,
  42. fill: cfg.color,
  43. stroke: cfg.color,
  44. lineWidth: 0.5,
  45. },
  46. });
  47. startAngle = endAngle + GAP;
  48. }
  49. return group;
  50. },
  51. });
  52. //# sourceMappingURL=meter-gauge.js.map