abstract.js 5.6 KB

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