* @param {module:echarts/coord/Axis} axis * @return {module:zrender/core/BoundingRect} Be null/undefined if no labels.
(axis)
| 37897 | * @return {module:zrender/core/BoundingRect} Be null/undefined if no labels. |
| 37898 | */ |
| 37899 | function estimateLabelUnionRect(axis) { |
| 37900 | var axisModel = axis.model; |
| 37901 | var scale = axis.scale; |
| 37902 | |
| 37903 | if (!axisModel.get('axisLabel.show') || scale.isBlank()) { |
| 37904 | return; |
| 37905 | } |
| 37906 | |
| 37907 | var isCategory = axis.type === 'category'; |
| 37908 | |
| 37909 | var realNumberScaleTicks; |
| 37910 | var tickCount; |
| 37911 | var categoryScaleExtent = scale.getExtent(); |
| 37912 | |
| 37913 | // Optimize for large category data, avoid call `getTicks()`. |
| 37914 | if (isCategory) { |
| 37915 | tickCount = scale.count(); |
| 37916 | } |
| 37917 | else { |
| 37918 | realNumberScaleTicks = scale.getTicks(); |
| 37919 | tickCount = realNumberScaleTicks.length; |
| 37920 | } |
| 37921 | |
| 37922 | var axisLabelModel = axis.getLabelModel(); |
| 37923 | var labelFormatter = makeLabelFormatter(axis); |
| 37924 | |
| 37925 | var rect; |
| 37926 | var step = 1; |
| 37927 | // Simple optimization for large amount of labels |
| 37928 | if (tickCount > 40) { |
| 37929 | step = Math.ceil(tickCount / 40); |
| 37930 | } |
| 37931 | for (var i = 0; i < tickCount; i += step) { |
| 37932 | var tickValue = realNumberScaleTicks ? realNumberScaleTicks[i] : categoryScaleExtent[0] + i; |
| 37933 | var label = labelFormatter(tickValue); |
| 37934 | var unrotatedSingleRect = axisLabelModel.getTextRect(label); |
| 37935 | var singleRect = rotateTextRect(unrotatedSingleRect, axisLabelModel.get('rotate') || 0); |
| 37936 | |
| 37937 | rect ? rect.union(singleRect) : (rect = singleRect); |
| 37938 | } |
| 37939 | |
| 37940 | return rect; |
| 37941 | } |
| 37942 | |
| 37943 | function rotateTextRect(textRect, rotate) { |
| 37944 | var rotateRadians = rotate * Math.PI / 180; |
no test coverage detected