/**
* @class Ext.chart.series.sprite.Radar
* @extends Ext.chart.series.sprite.Polar
*
* Radar series sprite.
*/
Ext.define('Ext.chart.series.sprite.Radar', {
alias: 'sprite.radar',
extend: 'Ext.chart.series.sprite.Polar',
getDataPointXY: function(index) {
var me = this,
attr = me.attr,
centerX = attr.centerX,
centerY = attr.centerY,
matrix = attr.matrix,
minX = attr.dataMinX,
maxX = attr.dataMaxX,
dataX = attr.dataX,
dataY = attr.dataY,
endRho = attr.endRho,
startRho = attr.startRho,
baseRotation = attr.baseRotation,
x, y, r, th, ox, oy, maxY;
if (attr.rangeY) {
maxY = attr.rangeY[1];
}
else {
maxY = attr.dataMaxY;
}
th = (dataX[index] - minX) / (maxX - minX + 1) * 2 * Math.PI + baseRotation;
r = dataY[index] / maxY * (endRho - startRho) + startRho;
// Original coordinates.
ox = centerX + Math.cos(th) * r;
oy = centerY + Math.sin(th) * r;
// Transformed coordinates.
x = matrix.x(ox, oy);
y = matrix.y(ox, oy);
return [x, y];
},
render: function(surface, ctx) {
var me = this,
attr = me.attr,
dataX = attr.dataX,
length = dataX.length,
surfaceMatrix = me.surfaceMatrix,
markerCfg = {},
i, x, y, xy;
ctx.beginPath();
for (i = 0; i < length; i++) {
xy = me.getDataPointXY(i);
x = xy[0];
y = xy[1];
if (i === 0) {
ctx.moveTo(x, y);
}
ctx.lineTo(x, y);
markerCfg.translationX = surfaceMatrix.x(x, y);
markerCfg.translationY = surfaceMatrix.y(x, y);
me.putMarker('markers', markerCfg, i, true);
}
ctx.closePath();
ctx.fillStroke(attr);
}
});