1 pv.SvgScene.wedge = function(scenes) { 2 var g = this.group(scenes); 3 for (var i = 0; i < scenes.length; i++) { 4 var s = scenes[i]; 5 6 /* visible */ 7 if (!s.visible) continue; 8 var fill = pv.color(s.fillStyle), stroke = pv.color(s.strokeStyle); 9 if (!fill.opacity && !stroke.opacity) continue; 10 11 /* points */ 12 var r1 = s.innerRadius, r2 = s.outerRadius, a = Math.abs(s.angle), p; 13 if (a >= 2 * Math.PI) { 14 if (r1) { 15 p = "M0," + r2 16 + "A" + r2 + "," + r2 + " 0 1,1 0," + (-r2) 17 + "A" + r2 + "," + r2 + " 0 1,1 0," + r2 18 + "M0," + r1 19 + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1) 20 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 21 + "Z"; 22 } else { 23 p = "M0," + r2 24 + "A" + r2 + "," + r2 + " 0 1,1 0," + (-r2) 25 + "A" + r2 + "," + r2 + " 0 1,1 0," + r2 26 + "Z"; 27 } 28 } else { 29 var sa = Math.min(s.startAngle, s.endAngle), 30 ea = Math.max(s.startAngle, s.endAngle), 31 c1 = Math.cos(sa), c2 = Math.cos(ea), 32 s1 = Math.sin(sa), s2 = Math.sin(ea); 33 if (r1) { 34 p = "M" + r2 * c1 + "," + r2 * s1 35 + "A" + r2 + "," + r2 + " 0 " 36 + ((a < Math.PI) ? "0" : "1") + ",1 " 37 + r2 * c2 + "," + r2 * s2 38 + "L" + r1 * c2 + "," + r1 * s2 39 + "A" + r1 + "," + r1 + " 0 " 40 + ((a < Math.PI) ? "0" : "1") + ",0 " 41 + r1 * c1 + "," + r1 * s1 + "Z"; 42 } else { 43 p = "M" + r2 * c1 + "," + r2 * s1 44 + "A" + r2 + "," + r2 + " 0 " 45 + ((a < Math.PI) ? "0" : "1") + ",1 " 46 + r2 * c2 + "," + r2 * s2 + "L0,0Z"; 47 } 48 } 49 50 var path = this.cache(s, "path", "wedge"); 51 path.setAttribute("fill-rule", "evenodd"); 52 path.setAttribute("cursor", s.cursor); 53 path.setAttribute("transform", "translate(" + s.left + "," + s.top + ")"); 54 path.setAttribute("d", p); 55 path.setAttribute("fill", fill.color); 56 path.setAttribute("fill-opacity", fill.opacity); 57 path.setAttribute("stroke", stroke.color); 58 path.setAttribute("stroke-opacity", stroke.opacity); 59 path.setAttribute("stroke-width", s.lineWidth); 60 g.appendChild(this.title(path, s)); 61 this.listen(path, scenes, i); 62 } 63 }; 64