Anyone able to solve this issue? I can draw the circle based on the functions we are using but I can’t seem to figure out how to dynamically set the labels in the center of the arc.
///Functions:
function polarToCartesian(centerX, centerY, radius, angleInDegrees){
var angleInRadians = (angleInDegrees-90) * Math.PI / 180.0;
return {x: centerX + (radius * Math.cos(angleInRadians)),
y: centerY + (radius * Math.sin(angleInRadians)) };}
function describeArc(x, y, radius, startAngle, endAngle){
var endAngleOriginal = endAngle;
if(endAngleOriginal - startAngle === 360){endAngle = 359; }
var start = polarToCartesian(x, y, radius, endAngle);
var end = polarToCartesian(x, y, radius, startAngle);
var arcSweep = endAngle - startAngle <= 180 ? “0” : “1”;
if(endAngleOriginal - startAngle === 360){
var d = [
“M”, start.x, start.y,
“A”, radius, radius, 0, arcSweep, 0, end.x, end.y, “z”
].join(" “);
}
else{
var d = [
“M”, start.x, start.y,
“A”, radius, radius, 0, arcSweep, 0, end.x, end.y
].join(” ");
}
return d ;
}
function between(x,a, b) {
return (x >= a && x <=b);
}
function setLabel(label, top, left){
query('#'+ label).attr('anchor','');
query('#'+ label).css('position','absolute');
query('#'+ label).css('left',Number(left) + "px");
query('#'+ label).css('top',Number(top) +"px");
}
var Total =Number(r.SXPRIN01) + Number(r.SXINTR01) + Number(r.SXESCP) + Number(r.SXOTHP) ;
var Prin =Number((Number(r.SXPRIN01)/Total) * 360);
var Int =Number((Number(r.SXINTR01)/Total) * 360);
var Esc =Number((Number(r.SXESCP)/Total) * 360);
var Oth=Number((Number(r.SXOTHP)/Total) * 360);
/* Examples on setting the values…
Total =360;
Prin =90;
Int =90;
Esc =90;
Oth =90;
*/
query(“#donutChart #arc1”).attr(“d”, describeArc(180, 120, 80, 0, Prin));
query(“#donutChart #arc2”).attr(“d”, describeArc(180, 120, 80, Prin, (Prin + Int)));
query(“#donutChart #arc3”).attr(“d”, describeArc(180, 120, 80, (Prin + Int), (Prin + Int + Esc)));
query(“#donutChart #arc4”).attr(“d”, describeArc(180, 120, 80, (Prin + Int + Esc), Prin + Int + Esc + Oth));
How to go about setting the labels dynamically ?
Example of hard coded label setting
setLabel(‘label1’,50,275);