base.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950
  1. "use strict";
  2. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
  3. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  4. var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
  5. var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
  6. var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
  7. var Attr = _interopRequireWildcard(require("../attr/index"));
  8. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  9. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  10. var Util = require('../util/common');
  11. var Base = require('../base');
  12. var GROUP_ATTRS = ['color', 'size', 'shape'];
  13. var FIELD_ORIGIN = '_origin';
  14. var FIELD_ORIGIN_Y = '_originY';
  15. var Global = require('../global');
  16. var GeometryShape = require('./shape/shape');
  17. var Adjust = require('@antv/adjust/lib/base');
  18. function parseFields(field) {
  19. if (Util.isArray(field)) {
  20. return field;
  21. }
  22. if (Util.isString(field)) {
  23. return field.split('*');
  24. }
  25. return [field];
  26. }
  27. /**
  28. * The parent class for Geometry
  29. * @class Geom
  30. */
  31. var Geom = /*#__PURE__*/function (_Base) {
  32. (0, _inheritsLoose2["default"])(Geom, _Base);
  33. var _super = _createSuper(Geom);
  34. function Geom() {
  35. return _Base.apply(this, arguments) || this;
  36. }
  37. var _proto = Geom.prototype;
  38. _proto.getDefaultCfg = function getDefaultCfg() {
  39. return {
  40. /**
  41. * geometry type
  42. * @type {String}
  43. */
  44. type: null,
  45. /**
  46. * the data of geometry
  47. * @type {Array}
  48. */
  49. data: null,
  50. /**
  51. * the attrs of geo,etry
  52. * @type {Object}
  53. */
  54. attrs: {},
  55. scales: {},
  56. /**
  57. * group for storing the shapes
  58. * @type {Canvas}
  59. */
  60. container: null,
  61. /**
  62. * style options
  63. * @type {Object}
  64. */
  65. styleOptions: null,
  66. chart: null,
  67. shapeType: '',
  68. /**
  69. * wether to generate key points for each shape
  70. * @protected
  71. * @type {Boolean}
  72. */
  73. generatePoints: false,
  74. attrOptions: {},
  75. sortable: false,
  76. startOnZero: true,
  77. visible: true,
  78. connectNulls: false,
  79. // 是否丢弃没有值的分组。
  80. ignoreEmptyGroup: false
  81. };
  82. };
  83. _proto.init = function init() {
  84. var self = this;
  85. self._initAttrs();
  86. self._processData();
  87. };
  88. _proto._getGroupScales = function _getGroupScales() {
  89. var self = this;
  90. var scales = [];
  91. Util.each(GROUP_ATTRS, function (attrName) {
  92. var attr = self.getAttr(attrName);
  93. if (attr) {
  94. var attrScales = attr.scales;
  95. Util.each(attrScales, function (scale) {
  96. if (scale && scale.isCategory && scales.indexOf(scale) === -1) {
  97. scales.push(scale);
  98. }
  99. });
  100. }
  101. });
  102. return scales;
  103. };
  104. _proto._groupData = function _groupData(data) {
  105. var self = this;
  106. var colDefs = self.get('colDefs');
  107. var groupScales = self._getGroupScales();
  108. if (groupScales.length) {
  109. var appendConditions = {};
  110. var names = [];
  111. Util.each(groupScales, function (scale) {
  112. var field = scale.field;
  113. names.push(field);
  114. if (colDefs && colDefs[field] && colDefs[field].values) {
  115. // users have defined
  116. appendConditions[scale.field] = colDefs[field].values;
  117. }
  118. });
  119. return Util.Array.group(data, names, appendConditions);
  120. }
  121. return [data];
  122. };
  123. _proto._setAttrOptions = function _setAttrOptions(attrName, attrCfg) {
  124. var options = this.get('attrOptions');
  125. options[attrName] = attrCfg;
  126. var attrs = this.get('attrs'); // 说明已经初始化过了
  127. if (Object.keys(attrs).length) {
  128. this._createAttr(attrName, attrCfg);
  129. }
  130. };
  131. _proto._createAttrOption = function _createAttrOption(attrName, field, cfg, defaultValues) {
  132. var attrCfg = {};
  133. attrCfg.field = field;
  134. if (cfg) {
  135. if (Util.isFunction(cfg)) {
  136. attrCfg.callback = cfg;
  137. } else {
  138. attrCfg.values = cfg;
  139. }
  140. } else {
  141. attrCfg.values = defaultValues;
  142. }
  143. this._setAttrOptions(attrName, attrCfg);
  144. };
  145. _proto._createAttr = function _createAttr(type, option) {
  146. var self = this;
  147. var attrs = self.get('attrs');
  148. var coord = self.get('coord');
  149. var className = Util.upperFirst(type);
  150. var fields = parseFields(option.field);
  151. if (type === 'position') {
  152. option.coord = coord;
  153. }
  154. var scales = [];
  155. for (var i = 0, len = fields.length; i < len; i++) {
  156. var field = fields[i];
  157. var scale = self._createScale(field);
  158. scales.push(scale);
  159. }
  160. if (type === 'position') {
  161. var yScale = scales[1]; // 饼图的处理,但是还不知道为啥
  162. if (coord.type === 'polar' && coord.transposed && self.hasAdjust('stack')) {
  163. if (yScale.values.length) {
  164. yScale.change({
  165. nice: false,
  166. min: 0,
  167. max: Math.max.apply(null, yScale.values)
  168. });
  169. }
  170. }
  171. }
  172. option.scales = scales;
  173. var attr = new Attr[className](option);
  174. attrs[type] = attr;
  175. return attr;
  176. };
  177. _proto._initAttrs = function _initAttrs() {
  178. var self = this;
  179. var attrOptions = self.get('attrOptions');
  180. for (var type in attrOptions) {
  181. if (attrOptions.hasOwnProperty(type)) {
  182. this._createAttr(type, attrOptions[type]);
  183. }
  184. }
  185. };
  186. _proto._createScale = function _createScale(field) {
  187. var scales = this.get('scales');
  188. var scale = scales[field];
  189. if (!scale) {
  190. scale = this.get('chart').createScale(field);
  191. scales[field] = scale;
  192. }
  193. return scale;
  194. };
  195. _proto._processData = function _processData() {
  196. var self = this;
  197. var data = this.get('data');
  198. var dataArray = [];
  199. var groupedArray = this._groupData(data);
  200. if (this.get('ignoreEmptyGroup')) {
  201. var yScale = this.getYScale();
  202. groupedArray = groupedArray.filter(function (group) {
  203. return group.some(function (item) {
  204. return typeof item[yScale.field] !== 'undefined';
  205. });
  206. });
  207. }
  208. for (var i = 0, len = groupedArray.length; i < len; i++) {
  209. var subData = groupedArray[i];
  210. var tempData = self._saveOrigin(subData);
  211. if (this.hasAdjust('dodge')) {
  212. self._numberic(tempData);
  213. }
  214. dataArray.push(tempData);
  215. }
  216. if (self.get('adjust')) {
  217. self._adjustData(dataArray);
  218. }
  219. if (self.get('sortable')) {
  220. self._sort(dataArray);
  221. }
  222. self.set('dataArray', dataArray);
  223. return dataArray;
  224. };
  225. _proto._saveOrigin = function _saveOrigin(data) {
  226. var rst = [];
  227. for (var i = 0, len = data.length; i < len; i++) {
  228. var origin = data[i];
  229. var obj = {};
  230. for (var k in origin) {
  231. obj[k] = origin[k];
  232. }
  233. obj[FIELD_ORIGIN] = origin;
  234. rst.push(obj);
  235. }
  236. return rst;
  237. };
  238. _proto._numberic = function _numberic(data) {
  239. var positionAttr = this.getAttr('position');
  240. var scales = positionAttr.scales;
  241. for (var j = 0, len = data.length; j < len; j++) {
  242. var obj = data[j];
  243. var count = Math.min(2, scales.length);
  244. for (var i = 0; i < count; i++) {
  245. var scale = scales[i];
  246. if (scale.isCategory) {
  247. var field = scale.field;
  248. obj[field] = scale.translate(obj[field]);
  249. }
  250. }
  251. }
  252. };
  253. _proto._adjustData = function _adjustData(dataArray) {
  254. var self = this;
  255. var adjust = self.get('adjust');
  256. if (adjust) {
  257. var adjustType = Util.upperFirst(adjust.type);
  258. if (!Adjust[adjustType]) {
  259. throw new Error('not support such adjust : ' + adjust);
  260. }
  261. var xScale = self.getXScale();
  262. var yScale = self.getYScale();
  263. var cfg = Util.mix({
  264. xField: xScale.field,
  265. yField: yScale.field
  266. }, adjust);
  267. var adjustObject = new Adjust[adjustType](cfg);
  268. adjustObject.processAdjust(dataArray);
  269. if (adjustType === 'Stack') {
  270. self._updateStackRange(yScale.field, yScale, dataArray);
  271. }
  272. }
  273. };
  274. _proto._updateStackRange = function _updateStackRange(field, scale, dataArray) {
  275. var mergeArray = Util.Array.merge(dataArray);
  276. var min = scale.min;
  277. var max = scale.max;
  278. for (var i = 0, len = mergeArray.length; i < len; i++) {
  279. var obj = mergeArray[i];
  280. var tmpMin = Math.min.apply(null, obj[field]);
  281. var tmpMax = Math.max.apply(null, obj[field]);
  282. if (tmpMin < min) {
  283. min = tmpMin;
  284. }
  285. if (tmpMax > max) {
  286. max = tmpMax;
  287. }
  288. }
  289. if (min < scale.min || max > scale.max) {
  290. scale.change({
  291. min: min,
  292. max: max
  293. });
  294. }
  295. };
  296. _proto._sort = function _sort(mappedArray) {
  297. var self = this;
  298. var xScale = self.getXScale();
  299. var field = xScale.field,
  300. type = xScale.type;
  301. if (type !== 'identity' && xScale.values.length > 1) {
  302. Util.each(mappedArray, function (itemArr) {
  303. itemArr.sort(function (obj1, obj2) {
  304. if (type === 'timeCat') {
  305. return xScale._toTimeStamp(obj1[FIELD_ORIGIN][field]) - xScale._toTimeStamp(obj2[FIELD_ORIGIN][field]);
  306. }
  307. return xScale.translate(obj1[FIELD_ORIGIN][field]) - xScale.translate(obj2[FIELD_ORIGIN][field]);
  308. });
  309. });
  310. }
  311. self.set('hasSorted', true);
  312. self.set('dataArray', mappedArray);
  313. };
  314. _proto.paint = function paint() {
  315. var self = this;
  316. var dataArray = self.get('dataArray');
  317. var mappedArray = [];
  318. var shapeFactory = self.getShapeFactory();
  319. shapeFactory.setCoord(self.get('coord'));
  320. self._beforeMapping(dataArray);
  321. for (var i = 0, len = dataArray.length; i < len; i++) {
  322. var data = dataArray[i];
  323. if (data.length) {
  324. data = self._mapping(data);
  325. mappedArray.push(data);
  326. self.draw(data, shapeFactory);
  327. }
  328. }
  329. self.set('dataArray', mappedArray);
  330. };
  331. _proto.getShapeFactory = function getShapeFactory() {
  332. var shapeFactory = this.get('shapeFactory');
  333. if (!shapeFactory) {
  334. var shapeType = this.get('shapeType');
  335. shapeFactory = GeometryShape.getShapeFactory(shapeType);
  336. this.set('shapeFactory', shapeFactory);
  337. }
  338. return shapeFactory;
  339. };
  340. _proto._mapping = function _mapping(data) {
  341. var self = this;
  342. var attrs = self.get('attrs');
  343. var yField = self.getYScale().field; // 用来缓存转换的值,减少mapping耗时
  344. var mappedCache = {};
  345. for (var k in attrs) {
  346. if (attrs.hasOwnProperty(k)) {
  347. var attr = attrs[k];
  348. var names = attr.names;
  349. var scales = attr.scales;
  350. for (var i = 0, len = data.length; i < len; i++) {
  351. var record = data[i];
  352. record[FIELD_ORIGIN_Y] = record[yField]; // 获取视觉属性对应的value值
  353. // 位置的缓存命中率低,还是每次单独计算
  354. if (attr.type === 'position') {
  355. var values = self._getAttrValues(attr, record);
  356. for (var j = 0, _len = values.length; j < _len; j++) {
  357. var val = values[j];
  358. var name = names[j];
  359. record[name] = Util.isArray(val) && val.length === 1 ? val[0] : val;
  360. }
  361. } else {
  362. // 除了position其他都只有一项
  363. var _name = names[0];
  364. var field = scales[0].field;
  365. var value = record[field];
  366. var key = "" + _name + value;
  367. var _values = mappedCache[key];
  368. if (!_values) {
  369. _values = self._getAttrValues(attr, record);
  370. mappedCache[key] = _values;
  371. }
  372. record[_name] = _values[0];
  373. }
  374. }
  375. }
  376. }
  377. return data;
  378. };
  379. _proto._getAttrValues = function _getAttrValues(attr, record) {
  380. var scales = attr.scales;
  381. var params = [];
  382. for (var i = 0, len = scales.length; i < len; i++) {
  383. var scale = scales[i];
  384. var field = scale.field;
  385. if (scale.type === 'identity') {
  386. params.push(scale.value);
  387. } else {
  388. params.push(record[field]);
  389. }
  390. }
  391. var values = attr.mapping.apply(attr, params);
  392. return values;
  393. };
  394. _proto.getAttrValue = function getAttrValue(attrName, record) {
  395. var attr = this.getAttr(attrName);
  396. var rst = null;
  397. if (attr) {
  398. var values = this._getAttrValues(attr, record);
  399. rst = values[0];
  400. }
  401. return rst;
  402. };
  403. _proto._beforeMapping = function _beforeMapping(dataArray) {
  404. var self = this;
  405. if (self.get('generatePoints')) {
  406. self._generatePoints(dataArray);
  407. }
  408. };
  409. _proto.isInCircle = function isInCircle() {
  410. var coord = this.get('coord');
  411. return coord && coord.isPolar;
  412. };
  413. _proto.getCallbackCfg = function getCallbackCfg(fields, cfg, origin) {
  414. if (!fields) {
  415. return cfg;
  416. }
  417. var tmpCfg = {};
  418. var params = fields.map(function (field) {
  419. return origin[field];
  420. });
  421. Util.each(cfg, function (v, k) {
  422. if (Util.isFunction(v)) {
  423. tmpCfg[k] = v.apply(null, params);
  424. } else {
  425. tmpCfg[k] = v;
  426. }
  427. });
  428. return tmpCfg;
  429. };
  430. _proto.getDrawCfg = function getDrawCfg(obj) {
  431. var self = this;
  432. var isInCircle = self.isInCircle();
  433. var cfg = {
  434. origin: obj,
  435. x: obj.x,
  436. y: obj.y,
  437. color: obj.color,
  438. size: obj.size,
  439. shape: obj.shape,
  440. isInCircle: isInCircle,
  441. opacity: obj.opacity
  442. };
  443. var styleOptions = self.get('styleOptions');
  444. if (styleOptions && styleOptions.style) {
  445. cfg.style = self.getCallbackCfg(styleOptions.fields, styleOptions.style, obj[FIELD_ORIGIN]);
  446. }
  447. if (self.get('generatePoints')) {
  448. cfg.points = obj.points;
  449. cfg.nextPoints = obj.nextPoints;
  450. }
  451. if (isInCircle) {
  452. cfg.center = self.get('coord').center;
  453. }
  454. return cfg;
  455. };
  456. _proto.draw = function draw(data, shapeFactory) {
  457. var self = this;
  458. var container = self.get('container');
  459. var yScale = self.getYScale();
  460. Util.each(data, function (obj, index) {
  461. if (yScale && Util.isNil(obj._origin[yScale.field])) {
  462. return;
  463. }
  464. obj.index = index;
  465. var cfg = self.getDrawCfg(obj);
  466. var shape = obj.shape;
  467. self.drawShape(shape, obj, cfg, container, shapeFactory);
  468. });
  469. };
  470. _proto.drawShape = function drawShape(shape, shapeData, cfg, container, shapeFactory) {
  471. var gShape = shapeFactory.drawShape(shape, cfg, container);
  472. if (gShape) {
  473. Util.each([].concat(gShape), function (s) {
  474. s.set('origin', shapeData);
  475. });
  476. }
  477. };
  478. _proto._generatePoints = function _generatePoints(dataArray) {
  479. var self = this;
  480. var shapeFactory = self.getShapeFactory();
  481. var shapeAttr = self.getAttr('shape');
  482. Util.each(dataArray, function (data) {
  483. for (var i = 0, len = data.length; i < len; i++) {
  484. var obj = data[i];
  485. var cfg = self.createShapePointsCfg(obj);
  486. var shape = shapeAttr ? self._getAttrValues(shapeAttr, obj) : null;
  487. var points = shapeFactory.getShapePoints(shape, cfg);
  488. obj.points = points;
  489. }
  490. }); // 添加nextPoints
  491. Util.each(dataArray, function (data, index) {
  492. var nextData = dataArray[index + 1];
  493. if (nextData) {
  494. data[0].nextPoints = nextData[0].points;
  495. }
  496. });
  497. }
  498. /**
  499. * get the info of each shape
  500. * @protected
  501. * @param {Object} obj the data item
  502. * @return {Object} cfg return the result
  503. */
  504. ;
  505. _proto.createShapePointsCfg = function createShapePointsCfg(obj) {
  506. var xScale = this.getXScale();
  507. var yScale = this.getYScale();
  508. var x = this._normalizeValues(obj[xScale.field], xScale);
  509. var y;
  510. if (yScale) {
  511. y = this._normalizeValues(obj[yScale.field], yScale);
  512. } else {
  513. y = obj.y ? obj.y : 0.1;
  514. }
  515. return {
  516. x: x,
  517. y: y,
  518. y0: yScale ? yScale.scale(this.getYMinValue()) : undefined
  519. };
  520. };
  521. _proto.getYMinValue = function getYMinValue() {
  522. var yScale = this.getYScale();
  523. var min = yScale.min,
  524. max = yScale.max;
  525. var value;
  526. if (this.get('startOnZero')) {
  527. if (max <= 0 && min <= 0) {
  528. value = max;
  529. } else {
  530. value = min >= 0 ? min : 0;
  531. }
  532. } else {
  533. value = min;
  534. }
  535. return value;
  536. };
  537. _proto._normalizeValues = function _normalizeValues(values, scale) {
  538. var rst = [];
  539. if (Util.isArray(values)) {
  540. for (var i = 0, len = values.length; i < len; i++) {
  541. var v = values[i];
  542. rst.push(scale.scale(v));
  543. }
  544. } else {
  545. rst = scale.scale(values);
  546. }
  547. return rst;
  548. };
  549. _proto.getAttr = function getAttr(name) {
  550. return this.get('attrs')[name];
  551. };
  552. _proto.getXScale = function getXScale() {
  553. return this.getAttr('position').scales[0];
  554. };
  555. _proto.getYScale = function getYScale() {
  556. return this.getAttr('position').scales[1];
  557. };
  558. _proto.hasAdjust = function hasAdjust(adjust) {
  559. return this.get('adjust') && this.get('adjust').type === adjust;
  560. };
  561. _proto._getSnap = function _getSnap(scale, item, arr) {
  562. var i = 0;
  563. var values;
  564. var yField = this.getYScale().field; // 叠加的维度
  565. if (this.hasAdjust('stack') && scale.field === yField) {
  566. values = [];
  567. arr.forEach(function (obj) {
  568. values.push(obj[FIELD_ORIGIN_Y]);
  569. });
  570. for (var len = values.length; i < len; i++) {
  571. if (values[0][0] > item) {
  572. break;
  573. }
  574. if (values[values.length - 1][1] <= item) {
  575. i = values.length - 1;
  576. break;
  577. }
  578. if (values[i][0] <= item && values[i][1] > item) {
  579. break;
  580. }
  581. }
  582. } else {
  583. values = scale.values;
  584. values.sort(function (a, b) {
  585. return a - b;
  586. });
  587. for (var _len2 = values.length; i < _len2; i++) {
  588. // 如果只有1个点直接返回第1个点
  589. if (_len2 <= 1) {
  590. break;
  591. } // 第1个点和第2个点之间
  592. if ((values[0] + values[1]) / 2 > item) {
  593. break;
  594. } // 中间的点
  595. if ((values[i - 1] + values[i]) / 2 <= item && (values[i + 1] + values[i]) / 2 > item) {
  596. break;
  597. } // 最后2个点
  598. if ((values[values.length - 2] + values[values.length - 1]) / 2 <= item) {
  599. i = values.length - 1;
  600. break;
  601. }
  602. }
  603. }
  604. var result = values[i];
  605. return result;
  606. };
  607. _proto.getSnapRecords = function getSnapRecords(point) {
  608. var self = this;
  609. var coord = self.get('coord');
  610. var xScale = self.getXScale();
  611. var yScale = self.getYScale();
  612. var xfield = xScale.field;
  613. var dataArray = self.get('dataArray');
  614. if (!this.get('hasSorted')) {
  615. this._sort(dataArray);
  616. }
  617. var rst = [];
  618. var invertPoint = coord.invertPoint(point);
  619. var invertPointX = invertPoint.x;
  620. if (self.isInCircle() && !coord.transposed && invertPointX > (1 + xScale.rangeMax()) / 2) {
  621. invertPointX = xScale.rangeMin();
  622. }
  623. var xValue = xScale.invert(invertPointX);
  624. if (!xScale.isCategory) {
  625. xValue = self._getSnap(xScale, xValue);
  626. }
  627. var tmp = [];
  628. dataArray.forEach(function (data) {
  629. data.forEach(function (obj) {
  630. var originValue = Util.isNil(obj[FIELD_ORIGIN]) ? obj[xfield] : obj[FIELD_ORIGIN][xfield];
  631. if (self._isEqual(originValue, xValue, xScale)) {
  632. tmp.push(obj);
  633. }
  634. });
  635. }); // special for pie chart
  636. if (this.hasAdjust('stack') && coord.isPolar && coord.transposed) {
  637. if (invertPointX >= 0 && invertPointX <= 1) {
  638. var yValue = yScale.invert(invertPoint.y);
  639. yValue = self._getSnap(yScale, yValue, tmp);
  640. tmp.forEach(function (obj) {
  641. if (Util.isArray(yValue) ? obj[FIELD_ORIGIN_Y].toString() === yValue.toString() : obj[FIELD_ORIGIN_Y] === yValue) {
  642. rst.push(obj);
  643. }
  644. });
  645. }
  646. } else {
  647. rst = tmp;
  648. }
  649. return rst;
  650. };
  651. _proto._isEqual = function _isEqual(originValue, value, scale) {
  652. if (scale.type === 'timeCat') {
  653. return scale._toTimeStamp(originValue) === value;
  654. }
  655. return value === originValue;
  656. };
  657. _proto.position = function position(field) {
  658. this._setAttrOptions('position', {
  659. field: field
  660. });
  661. return this;
  662. };
  663. _proto.color = function color(field, values) {
  664. this._createAttrOption('color', field, values, Global.colors);
  665. return this;
  666. };
  667. _proto.size = function size(field, values) {
  668. this._createAttrOption('size', field, values, Global.sizes);
  669. return this;
  670. };
  671. _proto.shape = function shape(field, values) {
  672. var type = this.get('type');
  673. var shapes = Global.shapes[type] || [];
  674. this._createAttrOption('shape', field, values, shapes);
  675. return this;
  676. };
  677. _proto.style = function style(field, cfg) {
  678. var styleOptions = this.get('styleOptions');
  679. if (!styleOptions) {
  680. styleOptions = {};
  681. this.set('styleOptions', styleOptions);
  682. }
  683. if (Util.isObject(field)) {
  684. cfg = field;
  685. field = null;
  686. }
  687. var fields;
  688. if (field) {
  689. fields = parseFields(field);
  690. }
  691. styleOptions.fields = fields;
  692. styleOptions.style = cfg;
  693. return this;
  694. };
  695. _proto.adjust = function adjust(type) {
  696. if (Util.isString(type)) {
  697. type = {
  698. type: type
  699. };
  700. }
  701. this.set('adjust', type);
  702. return this;
  703. };
  704. _proto.animate = function animate(cfg) {
  705. this.set('animateCfg', cfg);
  706. return this;
  707. };
  708. _proto.changeData = function changeData(data) {
  709. this.set('data', data); // 改变数据后,情况度量,因为需要重新实例化
  710. this.set('scales', {});
  711. this.init();
  712. };
  713. _proto.clearInner = function clearInner() {
  714. var container = this.get('container');
  715. if (container) {
  716. container.clear(); // container.setMatrix([ 1, 0, 0, 1, 0, 0 ]);
  717. }
  718. };
  719. _proto.reset = function reset() {
  720. this.set('attrs', {});
  721. this.set('attrOptions', {});
  722. this.set('adjust', null);
  723. this.clearInner();
  724. };
  725. _proto.clear = function clear() {
  726. this.clearInner();
  727. };
  728. _proto.destroy = function destroy() {
  729. this.clear();
  730. _Base.prototype.destroy.call(this);
  731. };
  732. _proto._display = function _display(visible) {
  733. this.set('visible', visible);
  734. var container = this.get('container');
  735. var canvas = container.get('canvas');
  736. container.set('visible', visible);
  737. canvas.draw();
  738. };
  739. _proto.show = function show() {
  740. this._display(true);
  741. };
  742. _proto.hide = function hide() {
  743. this._display(false);
  744. };
  745. return Geom;
  746. }(Base);
  747. module.exports = Geom;