Spaces:
Sleeping
Sleeping
| import "../arrays/map"; | |
| import "../core/functor"; | |
| import "../math/trigonometry"; | |
| import "svg"; | |
| d3.svg.symbol = function() { | |
| var type = d3_svg_symbolType, | |
| size = d3_svg_symbolSize; | |
| function symbol(d, i) { | |
| return (d3_svg_symbols.get(type.call(this, d, i)) | |
| || d3_svg_symbolCircle) | |
| (size.call(this, d, i)); | |
| } | |
| symbol.type = function(x) { | |
| if (!arguments.length) return type; | |
| type = d3_functor(x); | |
| return symbol; | |
| }; | |
| // size of symbol in square pixels | |
| symbol.size = function(x) { | |
| if (!arguments.length) return size; | |
| size = d3_functor(x); | |
| return symbol; | |
| }; | |
| return symbol; | |
| }; | |
| function d3_svg_symbolSize() { | |
| return 64; | |
| } | |
| function d3_svg_symbolType() { | |
| return "circle"; | |
| } | |
| function d3_svg_symbolCircle(size) { | |
| var r = Math.sqrt(size / π); | |
| return "M0," + r | |
| + "A" + r + "," + r + " 0 1,1 0," + (-r) | |
| + "A" + r + "," + r + " 0 1,1 0," + r | |
| + "Z"; | |
| } | |
| // TODO cross-diagonal? | |
| var d3_svg_symbols = d3.map({ | |
| "circle": d3_svg_symbolCircle, | |
| "cross": function(size) { | |
| var r = Math.sqrt(size / 5) / 2; | |
| return "M" + -3 * r + "," + -r | |
| + "H" + -r | |
| + "V" + -3 * r | |
| + "H" + r | |
| + "V" + -r | |
| + "H" + 3 * r | |
| + "V" + r | |
| + "H" + r | |
| + "V" + 3 * r | |
| + "H" + -r | |
| + "V" + r | |
| + "H" + -3 * r | |
| + "Z"; | |
| }, | |
| "diamond": function(size) { | |
| var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), | |
| rx = ry * d3_svg_symbolTan30; | |
| return "M0," + -ry | |
| + "L" + rx + ",0" | |
| + " 0," + ry | |
| + " " + -rx + ",0" | |
| + "Z"; | |
| }, | |
| "square": function(size) { | |
| var r = Math.sqrt(size) / 2; | |
| return "M" + -r + "," + -r | |
| + "L" + r + "," + -r | |
| + " " + r + "," + r | |
| + " " + -r + "," + r | |
| + "Z"; | |
| }, | |
| "triangle-down": function(size) { | |
| var rx = Math.sqrt(size / d3_svg_symbolSqrt3), | |
| ry = rx * d3_svg_symbolSqrt3 / 2; | |
| return "M0," + ry | |
| + "L" + rx +"," + -ry | |
| + " " + -rx + "," + -ry | |
| + "Z"; | |
| }, | |
| "triangle-up": function(size) { | |
| var rx = Math.sqrt(size / d3_svg_symbolSqrt3), | |
| ry = rx * d3_svg_symbolSqrt3 / 2; | |
| return "M0," + -ry | |
| + "L" + rx +"," + ry | |
| + " " + -rx + "," + ry | |
| + "Z"; | |
| } | |
| }); | |
| d3.svg.symbolTypes = d3_svg_symbols.keys(); | |
| var d3_svg_symbolSqrt3 = Math.sqrt(3), | |
| d3_svg_symbolTan30 = Math.tan(30 * d3_radians); | |