1 | d3.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 | |
---|
78 | var d3_svg_arcOffset = -Math.PI / 2, |
---|
79 | d3_svg_arcMax = 2 * Math.PI - 1e-6; |
---|
80 | |
---|
81 | function d3_svg_arcInnerRadius(d) { |
---|
82 | return d.innerRadius; |
---|
83 | } |
---|
84 | |
---|
85 | function d3_svg_arcOuterRadius(d) { |
---|
86 | return d.outerRadius; |
---|
87 | } |
---|
88 | |
---|
89 | function d3_svg_arcStartAngle(d) { |
---|
90 | return d.startAngle; |
---|
91 | } |
---|
92 | |
---|
93 | function d3_svg_arcEndAngle(d) { |
---|
94 | return d.endAngle; |
---|
95 | } |
---|