base.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. "use strict";
  2. exports.__esModule = true;
  3. exports["default"] = void 0;
  4. var _util = require("@antv/util");
  5. /**
  6. * @fileOverview the Attribute base class
  7. */
  8. function toScaleString(scale, value) {
  9. if ((0, _util.isString)(value)) {
  10. return value;
  11. }
  12. return scale.invert(scale.scale(value));
  13. }
  14. /**
  15. * 所有视觉通道属性的基类
  16. * @class Attr
  17. */
  18. var AttributeBase = /*#__PURE__*/function () {
  19. function AttributeBase(cfg) {
  20. var _this = this;
  21. /**
  22. * 属性的类型
  23. * @type {String}
  24. */
  25. this.type = 'base';
  26. /**
  27. * 属性的名称
  28. * @type {String}
  29. */
  30. this.name = null;
  31. /**
  32. * 回调函数
  33. * @type {Function}
  34. */
  35. this.method = null;
  36. /**
  37. * 备选的值数组
  38. * @type {Array}
  39. */
  40. this.values = [];
  41. /**
  42. * 属性内部的度量
  43. * @type {Array}
  44. */
  45. this.scales = [];
  46. /**
  47. * 是否通过线性取值, 如果未指定,则根据数值的类型判定
  48. * @type {Boolean}
  49. */
  50. this.linear = null;
  51. /**
  52. * 当用户设置的 callback 返回 null 时, 应该返回默认 callback 中的值
  53. */
  54. var mixedCallback = null;
  55. var defaultCallback = this.callback;
  56. if (cfg.callback) {
  57. var userCallback = cfg.callback;
  58. mixedCallback = function mixedCallback() {
  59. for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {
  60. params[_key] = arguments[_key];
  61. }
  62. var ret = userCallback.apply(void 0, params);
  63. if ((0, _util.isNil)(ret)) {
  64. ret = defaultCallback.apply(_this, params);
  65. }
  66. return ret;
  67. };
  68. }
  69. (0, _util.mix)(this, cfg);
  70. if (mixedCallback) {
  71. (0, _util.mix)(this, {
  72. callback: mixedCallback
  73. });
  74. }
  75. } // 获取属性值,将值映射到视觉通道
  76. var _proto = AttributeBase.prototype;
  77. _proto._getAttrValue = function _getAttrValue(scale, value) {
  78. var values = this.values;
  79. if (scale.isCategory && !this.linear) {
  80. var index = scale.translate(value);
  81. return values[index % values.length];
  82. }
  83. var percent = scale.scale(value);
  84. return this.getLinearValue(percent);
  85. }
  86. /**
  87. * 如果进行线性映射,返回对应的映射值
  88. * @protected
  89. * @param {Number} percent 百分比
  90. * @return {*} 颜色值、形状、大小等
  91. */
  92. ;
  93. _proto.getLinearValue = function getLinearValue(percent) {
  94. var values = this.values;
  95. var steps = values.length - 1;
  96. var step = Math.floor(steps * percent);
  97. var leftPercent = steps * percent - step;
  98. var start = values[step];
  99. var end = step === steps ? start : values[step + 1];
  100. var rstValue = start + (end - start) * leftPercent;
  101. return rstValue;
  102. }
  103. /**
  104. * 默认的回调函数
  105. * @param {*} value 回调函数的值
  106. * @type {Function}
  107. * @return {Array} 返回映射后的值
  108. */
  109. ;
  110. _proto.callback = function callback(value) {
  111. var self = this;
  112. var scale = self.scales[0];
  113. var rstValue = null;
  114. if (scale.type === 'identity') {
  115. rstValue = scale.value;
  116. } else {
  117. rstValue = self._getAttrValue(scale, value);
  118. }
  119. return rstValue;
  120. }
  121. /**
  122. * 根据度量获取属性名
  123. * @return {Array} dims of this Attribute
  124. */
  125. ;
  126. _proto.getNames = function getNames() {
  127. var scales = this.scales;
  128. var names = this.names;
  129. var length = Math.min(scales.length, names.length);
  130. var rst = [];
  131. for (var i = 0; i < length; i++) {
  132. rst.push(names[i]);
  133. }
  134. return rst;
  135. }
  136. /**
  137. * 根据度量获取维度名
  138. * @return {Array} dims of this Attribute
  139. */
  140. ;
  141. _proto.getFields = function getFields() {
  142. var scales = this.scales;
  143. var rst = [];
  144. (0, _util.each)(scales, function (scale) {
  145. rst.push(scale.field);
  146. });
  147. return rst;
  148. }
  149. /**
  150. * 根据名称获取度量
  151. * @param {String} name the name of scale
  152. * @return {Scale} scale
  153. */
  154. ;
  155. _proto.getScale = function getScale(name) {
  156. var scales = this.scales;
  157. var names = this.names;
  158. var index = names.indexOf(name);
  159. return scales[index];
  160. }
  161. /**
  162. * 映射数据
  163. * @param {*} param1...paramn 多个数值
  164. * @return {Array} 映射的值组成的数组
  165. */
  166. ;
  167. _proto.mapping = function mapping() {
  168. var scales = this.scales;
  169. var callback = this.callback;
  170. for (var _len2 = arguments.length, params = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
  171. params[_key2] = arguments[_key2];
  172. }
  173. var values = params;
  174. if (callback) {
  175. for (var i = 0, len = params.length; i < len; i++) {
  176. params[i] = this._toOriginParam(params[i], scales[i]);
  177. }
  178. values = callback.apply(this, params);
  179. }
  180. values = [].concat(values);
  181. return values;
  182. } // 原始的参数
  183. ;
  184. _proto._toOriginParam = function _toOriginParam(param, scale) {
  185. var rst = param;
  186. if (!scale.isLinear) {
  187. if ((0, _util.isArray)(param)) {
  188. rst = [];
  189. for (var i = 0, len = param.length; i < len; i++) {
  190. rst.push(toScaleString(scale, param[i]));
  191. }
  192. } else {
  193. rst = toScaleString(scale, param);
  194. }
  195. }
  196. return rst;
  197. };
  198. return AttributeBase;
  199. }();
  200. var _default = AttributeBase;
  201. exports["default"] = _default;