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

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

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