提交 320ffed9 编写于 作者: L lang

Global#eachSeriesAll, Global#eachSeriesByTypeAll, Pie label position center

上级 3008b023
......@@ -81,7 +81,7 @@ define(function(require) {
legendHoverLink: true,
// 默认全局居中
center: ['50%', '50%'],
radius: [0, '75%'],
radius: [0, '40%'],
// 默认顺时针
clockWise: true,
startAngle: 90,
......@@ -101,6 +101,7 @@ define(function(require) {
borderWidth: 1,
label: {
show: true,
// 'outer', 'inside', 'center'
position: 'outer'
// formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调
// textStyle: null // 默认使用全局文本样式,详见TEXTSTYLE
......
......@@ -13,14 +13,14 @@ define(function (require) {
var labelLineLen = labelLineModel.get('length');
var labelLineLen2 = labelLineModel.get('length2');
var isLabelInside = labelModel.get('position') === 'inside';
var avoidLabelOverlap = seriesModel.get('avoidLabelOverlap');
data.each(function (idx) {
var layout = data.getItemLayout(idx);
var itemModel = data.getItemModel(idx);
var font = itemModel.getModel('itemStyle.normal.label.textStyle').getFont();
var labelModel = itemModel.getModel('itemStyle.normal.label');
var font = labelModel.getModel('textStyle').getFont();
var labelPosition = labelModel.get('position');
var midAngle = (layout.startAngle + layout.endAngle) / 2;
var dx = Math.cos(midAngle);
......@@ -28,25 +28,37 @@ define(function (require) {
var r = layout.r;
var x1 = (isLabelInside ? r / 2 * dx : r * dx) + layout.cx;
var y1 = (isLabelInside ? r / 2 * dy : r * dy) + layout.cy;
var textX = x1 + dx * 3;
var textY = y1 + dy * 3;
var textX;
var textY;
var linePoints;
var textAlign;
if (labelPosition === 'center') {
textX = layout.cx;
textY = layout.cy;
textAlign = 'center';
}
else {
var isLabelInside = labelPosition === 'inside';
var x1 = (isLabelInside ? r / 2 * dx : r * dx) + layout.cx;
var y1 = (isLabelInside ? r / 2 * dy : r * dy) + layout.cy;
textX = x1 + dx * 3;
textY = y1 + dy * 3;
if (!isLabelInside) {
var x2 = x1 + dx * labelLineLen;
var y2 = y1 + dy * labelLineLen;
var x3 = x2 + ((dx < 0 ? -1 : 1) * labelLineLen2);
var y3 = y2;
if (!isLabelInside) {
var x2 = x1 + dx * labelLineLen;
var y2 = y1 + dy * labelLineLen;
var x3 = x2 + ((dx < 0 ? -1 : 1) * labelLineLen2);
var y3 = y2;
textX = x3 + (dx < 0 ? -5 : 5);
textY = y3;
linePoints = [[x1, y1], [x2, y2], [x3, y3]];
}
textX = x3 + (dx < 0 ? -5 : 5);
textY = y3;
linePoints = [[x1, y1], [x2, y2], [x3, y3]];
textAlign = isLabelInside ? 'center' : (dx > 0 ? 'left' : 'right');
}
var textAlign = isLabelInside ? 'center' : (dx > 0 ? 'left' : 'right');
var textBaseline = 'middle';
layout.label = {
......
......@@ -16,8 +16,8 @@ define(function (require) {
var size = Math.min(width, height);
var cx = parsePercent(center[0], width);
var cy = parsePercent(center[1], height);
var r0 = parsePercent(radius[0], size) / 2;
var r = parsePercent(radius[1], size) / 2;
var r0 = parsePercent(radius[0], size);
var r = parsePercent(radius[1], size);
var data = seriesModel.getData();
......
define(function (require) {
return function (ecModel) {
ecModel.eachSeriesByType('pie', function (seriesModel) {
var colorList = ecModel.get('color');
var data = seriesModel.getData();
var dataAll = seriesModel.getDataAll();
data.each(function (idx) {
var itemModel = data.getItemModel(idx);
var rawIdx = data.getRawIndex(idx);
var color = itemModel.get('itemStyle.normal.color')
|| colorList[rawIdx % colorList.length];
// Legend use the visual info in data before processed
dataAll.setItemVisual(rawIdx, 'color', color);
data.setItemVisual(idx, 'color', color);
});
var offset = 0;
var colorList = ecModel.get('color');
ecModel.eachSeriesByTypeAll('pie', function (seriesModel) {
if (!ecModel.isSeriesFiltered(seriesModel)) {
var data = seriesModel.getData();
var dataAll = seriesModel.getDataAll();
data.each(function (idx) {
var itemModel = data.getItemModel(idx);
var rawIdx = data.getRawIndex(idx);
var color = itemModel.get('itemStyle.normal.color')
|| colorList[(offset + rawIdx) % colorList.length];
// Legend use the visual info in data before processed
dataAll.setItemVisual(rawIdx, 'color', color);
data.setItemVisual(idx, 'color', color);
});
}
offset += dataAll.count();
});
}
});
\ No newline at end of file
......@@ -25,7 +25,7 @@ define(function(require) {
return new Model(dataItem, this);
}, this);
var availableNames = zrUtil.map(ecModel.getSeriesAll(), function (series) {
var availableNames = zrUtil.map(ecModel.getSeries(), function (series) {
return series.name;
});
ecModel.eachSeries(function (seriesModel) {
......
......@@ -11,6 +11,7 @@ define(function (require) {
var zrUtil = require('zrender/core/util');
var Model = require('./Model');
var each = zrUtil.each;
var ComponentModel = require('./Component');
......@@ -52,10 +53,11 @@ define(function (require) {
this._componentsIdMap = {};
/**
* All components before processing
* @type {Object.<string, module:echarts/model/Model>}
* @private
*/
this._componentsMapBeforeProcessing = {};
this._componentsMapAll = {};
/**
* @type {module:echarts/model/Model}
......@@ -99,7 +101,7 @@ define(function (require) {
var newCptTypes = [];
// 如果不存在对应的 component model 则直接 merge
zrUtil.each(newOption, function (componentOption, componentType) {
each(newOption, function (componentOption, componentType) {
if (!ComponentModel.hasClass(componentType)) {
if (componentOption && typeof componentOption === 'object') {
option[componentType] = option[componentType] == null
......@@ -163,8 +165,8 @@ define(function (require) {
}
// Backup data
zrUtil.each(componentsMap, function (components, componentType) {
this._componentsMapBeforeProcessing[componentType] = components.slice();
each(componentsMap, function (components, componentType) {
this._componentsMapAll[componentType] = components.slice();
}, this);
},
......@@ -193,7 +195,7 @@ define(function (require) {
var existComponents = (this._componentsMap[componentType] || []).slice();
// Mapping by name if specified.
zrUtil.each(newComponentOptionList, function (componentOption, index) {
each(newComponentOptionList, function (componentOption, index) {
if (!componentOption.name) {
return;
}
......@@ -206,7 +208,7 @@ define(function (require) {
});
// Otherwise mapping by index.
zrUtil.each(newComponentOptionList, function (componentOption, index) {
each(newComponentOptionList, function (componentOption, index) {
if (!result[index] && existComponents[index]) {
result[index] = existComponents[index];
}
......@@ -260,14 +262,14 @@ define(function (require) {
if (typeof type === 'function') {
context = cb;
cb = type;
zrUtil.each(this._componentsMap, function (components, componentType) {
zrUtil.each(components, function (component, index) {
each(this._componentsMap, function (components, componentType) {
each(components, function (component, index) {
cb.call(this, componentType, component, index);
}, this);
}, context);
}
else {
zrUtil.each(this._componentsMap[type], cb, context);
each(this._componentsMap[type], cb, context);
}
},
......@@ -295,9 +297,7 @@ define(function (require) {
* @return {module:echarts/model/Series}
*/
getSeriesByName: function (name, beforeProcessing) {
var series = beforeProcessing
? this._componentsMapBeforeProcessing.series
: this._componentsMap.series;
var series = this['_componentsMap' + (beforeProcessing ? 'All' : '')].series;
for (var i = 0, len = series.length; i < len; i++) {
// name should be unique.
if (series[i].name === name) {
......@@ -314,9 +314,7 @@ define(function (require) {
*/
getSeriesByIndex: function (seriesIndex, beforeProcessing) {
// return this._componentsMap.series[seriesIndex];
var series = beforeProcessing
? this._componentsMapBeforeProcessing.series
: this._componentsMap.series;
var series = this['_componentsMap' + (beforeProcessing ? 'All' : '')].series;
for (var i = 0, len = series.length; i < len; i++) {
// name should be unique.
if (series[i].seriesIndex === seriesIndex) {
......@@ -327,18 +325,20 @@ define(function (require) {
/**
* @param {string} type
* @param {boolean} beforeProcessing
* @return {Array.<module:echarts/model/Series>}
*/
getSeriesByType: function (type) {
return zrUtil.filter(this._componentsMap.series, function (series) {
return ComponentModel.parseComponentType(series.type).sub === type;
getSeriesByType: function (type, beforeProcessing) {
var series = this['_componentsMap' + (beforeProcessing ? 'All' : '')].series;
return zrUtil.filter(series, function (oneSeries) {
return ComponentModel.parseComponentType(oneSeries.type).sub === type;
});
},
/**
* @return {Array.<module:echarts/model/Series>}
*/
getSeriesAll: function () {
getSeries: function () {
return this._componentsMap.series.slice();
},
......@@ -347,7 +347,16 @@ define(function (require) {
* @param {*} context
*/
eachSeries: function (cb, context) {
zrUtil.each(this._componentsMap.series, cb, context);
each(this._componentsMap.series, cb, context);
},
/**
* Iterate all series before filtered
* @param {Function} cb
* @param {*} context
*/
eachSeriesAll: function (cb, context) {
each(this._componentsMapAll.series, cb, context);
},
/**
......@@ -356,7 +365,24 @@ define(function (require) {
* @param {*} context
*/
eachSeriesByType: function (type, cb, context) {
return zrUtil.each(this.getSeriesByType(type), cb, context);
return each(this.getSeriesByType(type), cb, context);
},
/**
* Iterate all series before filtered of given type
* @parma {string} type
* @param {Function} cb
* @param {*} context
*/
eachSeriesByTypeAll: function (type, cb, context) {
return each(this.getSeriesByType(type, true), cb, context);
},
/**
* @param {}
*/
isSeriesFiltered: function (seriesModel) {
return zrUtil.indexOf(this._componentsMap.series, seriesModel) < 0;
},
/**
......@@ -385,7 +411,7 @@ define(function (require) {
var componentsMap = this._componentsMap;
var componentTypes = [];
zrUtil.each(this._componentsMapBeforeProcessing, function (components, componentType) {
each(this._componentsMapAll, function (components, componentType) {
componentsMap[componentType] = components.slice();
componentTypes.push(componentType);
});
......@@ -394,7 +420,7 @@ define(function (require) {
componentTypes,
ComponentModel.getAllClassMainTypes(),
function (componentType, dependencies) {
zrUtil.each(componentsMap[componentType], function (component) {
each(componentsMap[componentType], function (component) {
component.restoreData();
});
}
......@@ -412,7 +438,7 @@ define(function (require) {
}
var ret = {};
zrUtil.each(types, function (type) {
each(types, function (type) {
ret[type] = (this._componentsMap[type] || []).slice();
}, this);
......
......@@ -4,8 +4,8 @@ define({
return [
this.get('fontStyle'),
this.get('fontWeight'),
this.get('fontSize') + 'px',
this.get('fontFamily')
(this.get('fontSize') || 12) + 'px',
this.get('fontFamily') || 'sans-serif'
].join(' ');
},
......
define(function (require) {
return function (ecModel) {
ecModel.eachSeries(function (seriesModel) {
ecModel.eachSeriesAll(function (seriesModel) {
var colorList = ecModel.get('color');
var data = seriesModel.getData();
var color = seriesModel.get('itemStyle.normal.color') // Set in itemStyle
......
define(function (require) {
return function (seriesType, defaultSymbolType, legendSymbol, ecModel, api) {
ecModel.eachSeriesByType(seriesType, function (seriesModel) {
ecModel.eachSeriesByTypeAll(seriesType, function (seriesModel) {
var data = seriesModel.getData();
var symbolType = seriesModel.get('symbol') || defaultSymbolType;
......@@ -13,23 +13,26 @@ define(function (require) {
symbolSize: symbolSize
});
if (typeof symbolSize === 'function') {
// Only visible series has each data be visual encoded
if (!ecModel.isSeriesFiltered(seriesModel)) {
if (typeof symbolSize === 'function') {
data.each(function (idx) {
var rawValue = data.getRawValue(idx);
data.setItemVisual(idx, 'symbolSize', symbolSize(rawValue))
});
}
data.each(function (idx) {
var rawValue = data.getRawValue(idx);
data.setItemVisual(idx, 'symbolSize', symbolSize(rawValue))
var itemModel = data.getItemModel(idx);
var symbolType = itemModel.get('symbol', true);
var symbolSize = itemModel.get('symbolSize', true);
if (symbolType != null && symbolType !== 'none') {
data.setItemVisual(idx, 'symbol', symbolType);
if (symbolSize != null) {
data.setItemVisual(idx, 'symbolSize', symbolSize);
}
}
});
}
data.each(function (idx) {
var itemModel = data.getItemModel(idx);
var symbolType = itemModel.get('symbol', true);
var symbolSize = itemModel.get('symbolSize', true);
if (symbolType != null && symbolType !== 'none') {
data.setItemVisual(idx, 'symbol', symbolType);
if (symbolSize != null) {
data.setItemVisual(idx, 'symbolSize', symbolSize);
}
}
});
});
};
});
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册