1
d3.svg.symbol = function() {
2
var type = d3_svg_symbolType,
3
size = d3_svg_symbolSize;
5
function symbol(d, i) {
6
return (d3_svg_symbols.get(type.call(this, d, i))
7
|| d3_svg_symbolCircle)
8
(size.call(this, d, i));
11
symbol.type = function(x) {
12
if (!arguments.length) return type;
17
// size of symbol in square pixels
18
symbol.size = function(x) {
19
if (!arguments.length) return size;
27
function d3_svg_symbolSize() {
31
function d3_svg_symbolType() {
35
function d3_svg_symbolCircle(size) {
36
var r = Math.sqrt(size / Math.PI);
38
+ "A" + r + "," + r + " 0 1,1 0," + (-r)
39
+ "A" + r + "," + r + " 0 1,1 0," + r
43
// TODO cross-diagonal?
44
var d3_svg_symbols = d3.map({
45
"circle": d3_svg_symbolCircle,
46
"cross": function(size) {
47
var r = Math.sqrt(size / 5) / 2;
48
return "M" + -3 * r + "," + -r
62
"diamond": function(size) {
63
var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)),
64
rx = ry * d3_svg_symbolTan30;
71
"square": function(size) {
72
var r = Math.sqrt(size) / 2;
73
return "M" + -r + "," + -r
79
"triangle-down": function(size) {
80
var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
81
ry = rx * d3_svg_symbolSqrt3 / 2;
84
+ " " + -rx + "," + -ry
87
"triangle-up": function(size) {
88
var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
89
ry = rx * d3_svg_symbolSqrt3 / 2;
92
+ " " + -rx + "," + ry
97
d3.svg.symbolTypes = d3_svg_symbols.keys();
99
var d3_svg_symbolSqrt3 = Math.sqrt(3),
100
d3_svg_symbolTan30 = Math.tan(30 * Math.PI / 180);