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