-
Notifications
You must be signed in to change notification settings - Fork 2
/
flare.dart
107 lines (87 loc) · 2.57 KB
/
flare.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import 'dart:math' as Math;
import 'dart:html';
import 'package:d3dart/D3Dart.dart' as d3;
d3.Selection path;
var partition;
d3.Arc arc;
void main() {
num width = 960,
height = 700,
radius = Math.min(width, height) / 2;
d3.Ordinal color = d3.Scale.category20c;
d3.Selection svg = d3.select("body").append("svg")
..attr("width", width)
..attr("height", height);
svg = svg.append("g");
svg.attr("transform", "translate(${width / 2},${height * .52})");
partition = d3.Layout.partition();
partition.size = [2 * Math.PI, radius * radius];
partition.value = (Object d, int depth) => 1;
// .sort(null)
arc = new d3.Arc();
arc.startAngle = (Object d, int i) => (d as Map)["x"];
arc.endAngle = (Object d, int i) => (d as Map)["x"] + (d as Map)["dx"];
arc.innerRadius = (Object d, int i) => Math.sqrt((d as Map)["y"]);
arc.outerRadius = (Object d, int i) => Math.sqrt((d as Map)["y"] + (d as Map)["dy"]);
d3.json("flare.json").then((Object root) {
svg.datum = root;
var path1 = svg.selectAll("path").dataFunc(partition.nodes);
path = path1.enter.append("path");
path.attrFunc("display", (d, i) { // hide inner ring
if (d["depth"] > 0) {
return "";
}
return "none";
});
path.attrFunc("d", arc);
path.style.stroke = (d, i) => "#FFF";
path.style.fill = (Map d, i) {
if ((d["children"] == null) || (d["children"].isEmpty)) {
d = d["parent"];
}
return d3.colorToHex(color(d["name"]));
};
path.style.fillRule = (d, i) => "evenodd";
d3.Selection sel = d3.selectAll("input");
sel.onClick.listen(onChange);
});
}
void onChange(Event evt) {
var value;
if ((evt.target as InputElement).value == "count") {
value = (Object d, int depth) => 1;
} else {
value = (Object d, int depth) => (d as Map)["size"];
}
partition.value = value;
d3.BoundSelection bound = path.dataFunc(partition.nodes);
bound.attrFunc("d", arc);
/*
var value = this.value === "count"
? function() { return 1; }
: function(d) { return d.size; };
path
.data(partition.value(value).nodes)
.transition()
.duration(1500)
.attrTween("d", arcTween);
*/
}
/*
// Stash the old values for transition.
function stash(d) {
d.x0 = d.x;
d.dx0 = d.dx;
}
// Interpolate the arcs in data space.
function arcTween(a) {
var i = d3.interpolate({x: a.x0, dx: a.dx0}, a);
return function(t) {
var b = i(t);
a.x0 = b.x;
a.dx0 = b.dx;
return arc(b);
};
}
d3.select(self.frameElement).style("height", height + "px");
*/