source: Dev/trunk/d3/src/svg/arc.js @ 76

Last change on this file since 76 was 76, checked in by fpvanagthoven, 14 years ago

d3

File size: 2.5 KB
RevLine 
[76]1d3.svg.arc = function() {
2  var innerRadius = d3_svg_arcInnerRadius,
3      outerRadius = d3_svg_arcOuterRadius,
4      startAngle = d3_svg_arcStartAngle,
5      endAngle = d3_svg_arcEndAngle;
6
7  function arc() {
8    var r0 = innerRadius.apply(this, arguments),
9        r1 = outerRadius.apply(this, arguments),
10        a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset,
11        a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset,
12        da = a1 - a0,
13        df = da < Math.PI ? "0" : "1",
14        c0 = Math.cos(a0),
15        s0 = Math.sin(a0),
16        c1 = Math.cos(a1),
17        s1 = Math.sin(a1);
18    return da >= d3_svg_arcMax
19      ? (r0
20      ? "M0," + r1
21      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
22      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
23      + "M0," + r0
24      + "A" + r0 + "," + r0 + " 0 1,1 0," + (-r0)
25      + "A" + r0 + "," + r0 + " 0 1,1 0," + r0
26      + "Z"
27      : "M0," + r1
28      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
29      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
30      + "Z")
31      : (r0
32      ? "M" + r1 * c0 + "," + r1 * s0
33      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
34      + "L" + r0 * c1 + "," + r0 * s1
35      + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0
36      + "Z"
37      : "M" + r1 * c0 + "," + r1 * s0
38      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
39      + "L0,0"
40      + "Z");
41  }
42
43  arc.innerRadius = function(v) {
44    if (!arguments.length) return innerRadius;
45    innerRadius = d3.functor(v);
46    return arc;
47  };
48
49  arc.outerRadius = function(v) {
50    if (!arguments.length) return outerRadius;
51    outerRadius = d3.functor(v);
52    return arc;
53  };
54
55  arc.startAngle = function(v) {
56    if (!arguments.length) return startAngle;
57    startAngle = d3.functor(v);
58    return arc;
59  };
60
61  arc.endAngle = function(v) {
62    if (!arguments.length) return endAngle;
63    endAngle = d3.functor(v);
64    return arc;
65  };
66
67  arc.centroid = function() {
68    var r = (innerRadius.apply(this, arguments)
69        + outerRadius.apply(this, arguments)) / 2,
70        a = (startAngle.apply(this, arguments)
71        + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
72    return [Math.cos(a) * r, Math.sin(a) * r];
73  };
74
75  return arc;
76};
77
78var d3_svg_arcOffset = -Math.PI / 2,
79    d3_svg_arcMax = 2 * Math.PI - 1e-6;
80
81function d3_svg_arcInnerRadius(d) {
82  return d.innerRadius;
83}
84
85function d3_svg_arcOuterRadius(d) {
86  return d.outerRadius;
87}
88
89function d3_svg_arcStartAngle(d) {
90  return d.startAngle;
91}
92
93function d3_svg_arcEndAngle(d) {
94  return d.endAngle;
95}
Note: See TracBrowser for help on using the repository browser.