abstract.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. "use strict";
  2. exports.__esModule = true;
  3. exports["default"] = void 0;
  4. var _common = require("../../util/common");
  5. var _global = _interopRequireDefault(require("../../global"));
  6. var _vector = _interopRequireDefault(require("../../graphic/util/vector2"));
  7. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
  8. var Abastract = /*#__PURE__*/function () {
  9. var _proto = Abastract.prototype;
  10. _proto._initDefaultCfg = function _initDefaultCfg() {
  11. /**
  12. * ticks
  13. * @type {Array}
  14. */
  15. this.ticks = [];
  16. /**
  17. * the configuration for tickLine
  18. * @type {Object}
  19. */
  20. this.tickLine = {};
  21. /**
  22. * the direction of ticks, 1 means clockwise
  23. * @type {Number}
  24. */
  25. this.offsetFactor = 1;
  26. /**
  27. * the top container
  28. * @type {container}
  29. */
  30. this.frontContainer = null;
  31. /**
  32. * the back container
  33. * @type {[type]}
  34. */
  35. this.backContainer = null;
  36. /**
  37. * points for draw grid line
  38. * @type {Array}
  39. */
  40. this.gridPoints = [];
  41. };
  42. function Abastract(cfg) {
  43. this._initDefaultCfg();
  44. (0, _common.mix)(this, cfg);
  45. this.draw();
  46. }
  47. _proto.draw = function draw() {
  48. var line = this.line,
  49. tickLine = this.tickLine,
  50. label = this.label,
  51. grid = this.grid;
  52. grid && this.drawGrid(grid); // draw the grid lines
  53. tickLine && this.drawTicks(tickLine); // draw the tickLine
  54. line && this.drawLine(line); // draw axis line
  55. label && this.drawLabels(); // draw ticks
  56. };
  57. _proto.drawTicks = function drawTicks(tickCfg) {
  58. var self = this;
  59. var ticks = self.ticks;
  60. var length = tickCfg.length;
  61. var container = self.getContainer(tickCfg.top);
  62. (0, _common.each)(ticks, function (tick) {
  63. var start = self.getOffsetPoint(tick.value);
  64. var end = self.getSidePoint(start, length);
  65. var shape = container.addShape('line', {
  66. className: 'axis-tick',
  67. attrs: (0, _common.mix)({
  68. x1: start.x,
  69. y1: start.y,
  70. x2: end.x,
  71. y2: end.y
  72. }, tickCfg)
  73. });
  74. shape._id = self._id + '-ticks';
  75. });
  76. };
  77. _proto.drawLabels = function drawLabels() {
  78. var self = this;
  79. var labelOffset = self.labelOffset;
  80. var labels = self.labels;
  81. (0, _common.each)(labels, function (labelShape) {
  82. var container = self.getContainer(labelShape.get('top'));
  83. var start = self.getOffsetPoint(labelShape.get('value'));
  84. var _self$getSidePoint = self.getSidePoint(start, labelOffset),
  85. x = _self$getSidePoint.x,
  86. y = _self$getSidePoint.y;
  87. labelShape.attr((0, _common.mix)({
  88. x: x,
  89. y: y
  90. }, self.getTextAlignInfo(start, labelOffset), labelShape.get('textStyle')));
  91. labelShape._id = self._id + '-' + labelShape.attr('text');
  92. container.add(labelShape);
  93. });
  94. };
  95. _proto.drawLine = function drawLine() {};
  96. _proto.drawGrid = function drawGrid(grid) {
  97. var self = this;
  98. var gridPoints = self.gridPoints,
  99. ticks = self.ticks;
  100. var gridCfg = grid;
  101. var count = gridPoints.length;
  102. (0, _common.each)(gridPoints, function (subPoints, index) {
  103. if ((0, _common.isFunction)(grid)) {
  104. var tick = ticks[index] || {};
  105. var executedGrid = grid(tick.text, index, count);
  106. gridCfg = executedGrid ? (0, _common.mix)({}, _global["default"]._defaultAxis.grid, executedGrid) : null;
  107. }
  108. if (gridCfg) {
  109. var type = gridCfg.type; // has two types: 'line' and 'arc'
  110. var points = subPoints.points;
  111. var container = self.getContainer(gridCfg.top);
  112. var shape;
  113. if (type === 'arc') {
  114. var center = self.center,
  115. startAngle = self.startAngle,
  116. endAngle = self.endAngle;
  117. var radius = _vector["default"].length([points[0].x - center.x, points[0].y - center.y]);
  118. shape = container.addShape('Arc', {
  119. className: 'axis-grid',
  120. attrs: (0, _common.mix)({
  121. x: center.x,
  122. y: center.y,
  123. startAngle: startAngle,
  124. endAngle: endAngle,
  125. r: radius
  126. }, gridCfg)
  127. });
  128. } else {
  129. shape = container.addShape('Polyline', {
  130. className: 'axis-grid',
  131. attrs: (0, _common.mix)({
  132. points: points
  133. }, gridCfg)
  134. });
  135. }
  136. shape._id = subPoints._id;
  137. }
  138. });
  139. };
  140. _proto.getOffsetPoint = function getOffsetPoint() {};
  141. _proto.getAxisVector = function getAxisVector() {};
  142. _proto.getOffsetVector = function getOffsetVector(point, offset) {
  143. var self = this;
  144. var axisVector = self.getAxisVector(point);
  145. var normal = _vector["default"].normalize([], axisVector);
  146. var factor = self.offsetFactor;
  147. var verticalVector = [normal[1] * -1 * factor, normal[0] * factor];
  148. return _vector["default"].scale([], verticalVector, offset);
  149. };
  150. _proto.getSidePoint = function getSidePoint(point, offset) {
  151. var self = this;
  152. var offsetVector = self.getOffsetVector(point, offset);
  153. return {
  154. x: point.x + offsetVector[0],
  155. y: point.y + offsetVector[1]
  156. };
  157. };
  158. _proto.getTextAlignInfo = function getTextAlignInfo(point, offset) {
  159. var self = this;
  160. var offsetVector = self.getOffsetVector(point, offset);
  161. var align;
  162. var baseLine;
  163. if (offsetVector[0] > 0) {
  164. align = 'left';
  165. } else if (offsetVector[0] < 0) {
  166. align = 'right';
  167. } else {
  168. align = 'center';
  169. }
  170. if (offsetVector[1] > 0) {
  171. baseLine = 'top';
  172. } else if (offsetVector[1] < 0) {
  173. baseLine = 'bottom';
  174. } else {
  175. baseLine = 'middle';
  176. }
  177. return {
  178. textAlign: align,
  179. textBaseline: baseLine
  180. };
  181. };
  182. _proto.getContainer = function getContainer(isTop) {
  183. var frontContainer = this.frontContainer,
  184. backContainer = this.backContainer;
  185. return isTop ? frontContainer : backContainer;
  186. };
  187. return Abastract;
  188. }();
  189. var _default = Abastract;
  190. exports["default"] = _default;