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

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

d3

File size: 2.1 KB
Line 
1d3.svg.chord = function() {
2  var source = d3_svg_chordSource,
3      target = d3_svg_chordTarget,
4      radius = d3_svg_chordRadius,
5      startAngle = d3_svg_arcStartAngle,
6      endAngle = d3_svg_arcEndAngle;
7
8  // TODO Allow control point to be customized.
9
10  function chord(d, i) {
11    var s = subgroup(this, source, d, i),
12        t = subgroup(this, target, d, i);
13    return "M" + s.p0
14      + arc(s.r, s.p1) + (equals(s, t)
15      ? curve(s.r, s.p1, s.r, s.p0)
16      : curve(s.r, s.p1, t.r, t.p0)
17      + arc(t.r, t.p1)
18      + curve(t.r, t.p1, s.r, s.p0))
19      + "Z";
20  }
21
22  function subgroup(self, f, d, i) {
23    var subgroup = f.call(self, d, i),
24        r = radius.call(self, subgroup, i),
25        a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset,
26        a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset;
27    return {
28      r: r,
29      a0: a0,
30      a1: a1,
31      p0: [r * Math.cos(a0), r * Math.sin(a0)],
32      p1: [r * Math.cos(a1), r * Math.sin(a1)]
33    };
34  }
35
36  function equals(a, b) {
37    return a.a0 == b.a0 && a.a1 == b.a1;
38  }
39
40  function arc(r, p) {
41    return "A" + r + "," + r + " 0 0,1 " + p;
42  }
43
44  function curve(r0, p0, r1, p1) {
45    return "Q 0,0 " + p1;
46  }
47
48  chord.radius = function(v) {
49    if (!arguments.length) return radius;
50    radius = d3.functor(v);
51    return chord;
52  };
53
54  chord.source = function(v) {
55    if (!arguments.length) return source;
56    source = d3.functor(v);
57    return chord;
58  };
59
60  chord.target = function(v) {
61    if (!arguments.length) return target;
62    target = d3.functor(v);
63    return chord;
64  };
65
66  chord.startAngle = function(v) {
67    if (!arguments.length) return startAngle;
68    startAngle = d3.functor(v);
69    return chord;
70  };
71
72  chord.endAngle = function(v) {
73    if (!arguments.length) return endAngle;
74    endAngle = d3.functor(v);
75    return chord;
76  };
77
78  return chord;
79};
80
81function d3_svg_chordSource(d) {
82  return d.source;
83}
84
85function d3_svg_chordTarget(d) {
86  return d.target;
87}
88
89function d3_svg_chordRadius(d) {
90  return d.radius;
91}
92
93function d3_svg_chordStartAngle(d) {
94  return d.startAngle;
95}
96
97function d3_svg_chordEndAngle(d) {
98  return d.endAngle;
99}
Note: See TracBrowser for help on using the repository browser.