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

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

d3

File size: 2.2 KB
Line 
1d3.svg.symbol = function() {
2  var type = d3_svg_symbolType,
3      size = d3_svg_symbolSize;
4
5  function symbol(d, i) {
6    return (d3_svg_symbols[type.call(this, d, i)]
7        || d3_svg_symbols.circle)
8        (size.call(this, d, i));
9  }
10
11  symbol.type = function(x) {
12    if (!arguments.length) return type;
13    type = d3.functor(x);
14    return symbol;
15  };
16
17  // size of symbol in square pixels
18  symbol.size = function(x) {
19    if (!arguments.length) return size;
20    size = d3.functor(x);
21    return symbol;
22  };
23
24  return symbol;
25};
26
27function d3_svg_symbolSize() {
28  return 64;
29}
30
31function d3_svg_symbolType() {
32  return "circle";
33}
34
35// TODO cross-diagonal?
36var d3_svg_symbols = {
37  "circle": function(size) {
38    var r = Math.sqrt(size / Math.PI);
39    return "M0," + r
40        + "A" + r + "," + r + " 0 1,1 0," + (-r)
41        + "A" + r + "," + r + " 0 1,1 0," + r
42        + "Z";
43  },
44  "cross": function(size) {
45    var r = Math.sqrt(size / 5) / 2;
46    return "M" + -3 * r + "," + -r
47        + "H" + -r
48        + "V" + -3 * r
49        + "H" + r
50        + "V" + -r
51        + "H" + 3 * r
52        + "V" + r
53        + "H" + r
54        + "V" + 3 * r
55        + "H" + -r
56        + "V" + r
57        + "H" + -3 * r
58        + "Z";
59  },
60  "diamond": function(size) {
61    var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)),
62        rx = ry * d3_svg_symbolTan30;
63    return "M0," + -ry
64        + "L" + rx + ",0"
65        + " 0," + ry
66        + " " + -rx + ",0"
67        + "Z";
68  },
69  "square": function(size) {
70    var r = Math.sqrt(size) / 2;
71    return "M" + -r + "," + -r
72        + "L" + r + "," + -r
73        + " " + r + "," + r
74        + " " + -r + "," + r
75        + "Z";
76  },
77  "triangle-down": function(size) {
78    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
79        ry = rx * d3_svg_symbolSqrt3 / 2;
80    return "M0," + ry
81        + "L" + rx +"," + -ry
82        + " " + -rx + "," + -ry
83        + "Z";
84  },
85  "triangle-up": function(size) {
86    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
87        ry = rx * d3_svg_symbolSqrt3 / 2;
88    return "M0," + -ry
89        + "L" + rx +"," + ry
90        + " " + -rx + "," + ry
91        + "Z";
92  }
93};
94
95d3.svg.symbolTypes = d3.keys(d3_svg_symbols);
96
97var d3_svg_symbolSqrt3 = Math.sqrt(3),
98    d3_svg_symbolTan30 = Math.tan(30 * Math.PI / 180);
Note: See TracBrowser for help on using the repository browser.