in web/servicemix-web-console/src/main/webapp/js/plotkit/SVG.js [232:302]
PlotKit.SVGRenderer.prototype._renderPieChart = function() {
var colorCount = this.options.colorScheme.length;
var slices = this.layout.slices;
var centerx = this.area.x + this.area.w * 0.5;
var centery = this.area.y + this.area.h * 0.5;
var radius = Math.min(this.area.w * this.options.pieRadius,
this.area.h * this.options.pieRadius);
// NOTE NOTE!! Canvas Tag draws the circle clockwise from the y = 0, x = 1
// so we have to subtract 90 degrees to make it start at y = 1, x = 0
// workaround if we only have 1 slice of 100%
if (slices.length == 1 && (Math.abs(slices[0].startAngle) - Math.abs(slices[0].endAngle) < 0.1)) {
var attrs = {"cx": centerx , "cy": centery , "r": radius };
var color = this.options.colorScheme[0];
if (this.options.shouldFill)
attrs["fill"] = color.toRGBString();
else
attrs["fill"] = "none";
if (this.options.shouldStroke &&
(this.options.strokeColor || this.options.strokeColorTransform)) {
if (this.options.strokeColor)
attrs["stroke"] = this.options.strokeColor.toRGBString();
else if (this.options.strokeColorTransform)
attrs["stroke"] = color[this.options.strokeColorTransform]().toRGBString();
attrs["style"] = "stroke-width: " + this.options.strokeWidth;
}
this.root.appendChild(this.createSVGElement("circle", attrs));
return;
}
for (var i = 0; i < slices.length; i++) {
var attrs = new Array();
var color = this.options.colorScheme[i%colorCount];
if (this.options.shouldFill)
attrs["fill"] = color.toRGBString();
else
attrs["fill"] = "none";
if (this.options.shouldStroke &&
(this.options.strokeColor || this.options.strokeColorTransform)) {
if (this.options.strokeColor)
attrs["stroke"] = this.options.strokeColor.toRGBString();
else if (this.options.strokeColorTransform)
attrs["stroke"] = color[this.options.strokeColorTransform]().toRGBString();
attrs["style"] = "stroke-width:" + this.options.strokeWidth;
}
var largearc = 0;
if (Math.abs(slices[i].endAngle - slices[i].startAngle) > Math.PI)
largearc = 1;
var x1 = Math.cos(slices[i].startAngle - Math.PI/2) * radius;
var y1 = Math.sin(slices[i].startAngle - Math.PI/2) * radius;
var x2 = Math.cos(slices[i].endAngle - Math.PI/2) * radius;
var y2 = Math.sin(slices[i].endAngle - Math.PI/2) * radius;
var rx = x2 - x1;
var ry = y2 - y1;
var pathString = "M" + centerx + "," + centery + " ";
pathString += "l" + x1 + "," + y1 + " ";
pathString += "a" + radius + "," + radius + " 0 " + largearc + ",1 " + rx + "," + ry + " z";
attrs["d"] = pathString;
var elem = this.createSVGElement("path", attrs);
this.root.appendChild(elem);
}
};