position.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { isArray, isNil, each } from '@antv/util';
  2. import Base from './base';
  3. class Position extends Base {
  4. constructor(cfg) {
  5. super(cfg);
  6. this.names = ['x', 'y'];
  7. this.type = 'position';
  8. }
  9. mapping(x, y) {
  10. var scales = this.scales;
  11. var coord = this.coord;
  12. var scaleX = scales[0];
  13. var scaleY = scales[1];
  14. var rstX;
  15. var rstY;
  16. var obj;
  17. if (isNil(x) || isNil(y)) {
  18. return [];
  19. }
  20. if (isArray(y) && isArray(x)) {
  21. rstX = [];
  22. rstY = [];
  23. for (var i = 0, j = 0, xLen = x.length, yLen = y.length; i < xLen && j < yLen; i++, j++) {
  24. obj = coord.convertPoint({
  25. x: scaleX.scale(x[i]),
  26. y: scaleY.scale(y[j])
  27. });
  28. rstX.push(obj.x);
  29. rstY.push(obj.y);
  30. }
  31. } else if (isArray(y)) {
  32. x = scaleX.scale(x);
  33. rstY = [];
  34. each(y, function (yVal) {
  35. yVal = scaleY.scale(yVal);
  36. obj = coord.convertPoint({
  37. x,
  38. y: yVal
  39. });
  40. if (rstX && rstX !== obj.x) {
  41. if (!isArray(rstX)) {
  42. rstX = [rstX];
  43. }
  44. rstX.push(obj.x);
  45. } else {
  46. rstX = obj.x;
  47. }
  48. rstY.push(obj.y);
  49. });
  50. } else if (isArray(x)) {
  51. y = scaleY.scale(y);
  52. rstX = [];
  53. each(x, function (xVal) {
  54. xVal = scaleX.scale(xVal);
  55. obj = coord.convertPoint({
  56. x: xVal,
  57. y
  58. });
  59. if (rstY && rstY !== obj.y) {
  60. if (!isArray(rstY)) {
  61. rstY = [rstY];
  62. }
  63. rstY.push(obj.y);
  64. } else {
  65. rstY = obj.y;
  66. }
  67. rstX.push(obj.x);
  68. });
  69. } else {
  70. x = scaleX.scale(x);
  71. y = scaleY.scale(y);
  72. var point = coord.convertPoint({
  73. x,
  74. y
  75. });
  76. rstX = point.x;
  77. rstY = point.y;
  78. }
  79. return [rstX, rstY];
  80. }
  81. }
  82. export default Position;