pattern.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { __assign, __spreadArray } from "tslib";
  2. import { Util } from '@antv/g2';
  3. import { get } from '@antv/util';
  4. import { deepAssign } from '../utils';
  5. import { getCanvasPattern } from '../utils/pattern';
  6. /**
  7. * Pattern 通道,处理图案填充
  8. * 🚀 目前支持图表类型:饼图、柱状图、条形图、玉珏图等(不支持在多 view 图表中,后续按需扩展)
  9. *
  10. * @param key key of style property
  11. * @returns
  12. */
  13. export function pattern(key) {
  14. var _this = this;
  15. return function (params) {
  16. var _a;
  17. var options = params.options, chart = params.chart;
  18. var patternOption = options.pattern;
  19. // 没有 pattern 配置,则直接返回
  20. if (!patternOption) {
  21. return params;
  22. }
  23. /** ~~~~~~~ 进行贴图图案处理 ~~~~~~~ */
  24. var style = function (datum) {
  25. var _a, _b, _c;
  26. var args = [];
  27. for (var _i = 1; _i < arguments.length; _i++) {
  28. args[_i - 1] = arguments[_i];
  29. }
  30. var defaultColor = chart.getTheme().defaultColor;
  31. var color = defaultColor;
  32. var colorAttribute = (_b = (_a = chart.geometries) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.getAttribute('color');
  33. if (colorAttribute) {
  34. var colorField = colorAttribute.getFields()[0];
  35. var seriesValue = get(datum, colorField);
  36. color = Util.getMappingValue(colorAttribute, seriesValue, ((_c = colorAttribute.values) === null || _c === void 0 ? void 0 : _c[0]) || defaultColor);
  37. }
  38. var pattern = patternOption;
  39. // 1. 如果 patternOption 是一个回调,则获取回调结果。`(datum: Datum, color: string) => CanvasPattern`
  40. if (typeof patternOption === 'function') {
  41. pattern = patternOption.call(_this, datum, color);
  42. }
  43. // 2. 如果 pattern 不是 CanvasPattern,则进一步处理,否则直接赋予给 fill
  44. if (pattern instanceof CanvasPattern === false) {
  45. // 通过 createPattern(PatternStyle) 转换为 CanvasPattern
  46. pattern = getCanvasPattern(deepAssign({}, { cfg: { backgroundColor: color } }, pattern));
  47. }
  48. var styleOption = options[key];
  49. return __assign(__assign({}, (typeof styleOption === 'function' ? styleOption.call.apply(styleOption, __spreadArray([_this, datum], args, false)) : styleOption || {})), { fill: pattern || color });
  50. };
  51. return deepAssign({}, params, { options: (_a = {}, _a[key] = style, _a) });
  52. };
  53. }
  54. //# sourceMappingURL=pattern.js.map