source: Dev/branches/jQueryUI/client/d3/examples/contour/contour.html @ 249

Last change on this file since 249 was 249, checked in by hendrikvanantwerpen, 13 years ago

This one's for Subversion, because it's so close...

First widget (stripped down sequencer).
Seperated client and server code in two direcotry trees.

File size: 2.6 KB
Line 
1<!DOCTYPE html>
2<html>
3  <head>
4    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
5    <title>Contour</title>
6    <script type="text/javascript" src="../../d3.js"></script>
7    <script type="text/javascript" src="../../d3.geom.js"></script>
8    <style type="text/css">
9svg {
10  border: solid 1px #aaa;
11}
12path {
13  stroke: red;
14  stroke-width: 2px;
15  fill: none;
16}
17rect {
18  fill: lightsteelblue;
19  stroke: #eee;
20  stroke-width: 2px;
21}
22rect.d1 {
23  fill: steelblue;
24}
25rect.d2 {
26  fill: darkblue;
27}
28    </style>
29  </head>
30  <body>
31    <script type="text/javascript">
32
33function grid0(x,y) {
34  if (x < 0 || y < 0 || x >= dw || y >= dh) return 0;
35  return data[y][x];
36}
37function grid1(x,y) {
38  if (x < 0 || y < 0 || x >= dw || y >= dh) return 0;
39  return data[y][x]==1;
40}
41function grid2(x,y) {
42  if (x < 0 || y < 0 || x >= dw || y >= dh) return 0;
43  return data[y][x]==2;
44}
45       
46var data = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
47            [0, 0, 0, 2, 2, 2, 0, 0, 0, 0],
48            [0, 0, 0, 2, 2, 2, 2, 0, 0, 0],
49            [0, 0, 2, 2, 2, 2, 2, 2, 0, 0],
50            [0, 0, 2, 2, 2, 2, 2, 2, 2, 0],
51            [0, 0, 2, 1, 0, 0, 2, 2, 2, 0],
52            [0, 0, 1, 1, 0, 0, 2, 2, 2, 0],
53            [0, 0, 0, 0, 1, 1, 2, 2, 0, 0],
54            [0, 0, 0, 0, 1, 2, 2, 2, 0, 0],
55            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
56    fn = [grid0, grid1, grid2],
57    dw = data[0].length,
58    dh = data.length;
59    sz = 30,
60    grid = grid0;
61
62function translateY(d, i) { return "translate(0,"+(i*sz)+")"; }
63function translateX(d, i) { return "translate("+(i*sz)+",0)"; }
64function scale(p) { return [p[0]*sz, p[1]*sz]; }
65
66var svg = d3.select("body")
67 .append("svg:svg")
68  .attr("width", dw*sz)
69  .attr("height", dh*sz);
70
71var g = svg.selectAll("g")
72  .data(data)
73 .enter().append("svg:g")
74  .attr("transform", translateY);
75
76g.selectAll("rect")
77  .data(function(d) { return d; })
78 .enter().append("svg:rect")
79  .attr("transform", translateX)
80  .attr("width", sz)
81  .attr("height", sz)
82  .attr("class", function(d) { return "d"+d; })
83  .on("mouseover", mouseover);
84
85contour(grid);
86
87function contour(grid, start) {
88  svg.selectAll("path")
89    .data([d3.geom.contour(grid, start).map(scale)])
90    .attr("d", function(d) { return "M" + d.join("L") + "Z"; })
91   .enter().append("svg:path")
92    .attr("d", function(d) { return "M" + d.join("L") + "Z"; });
93}
94
95function mouseover(d,i) {
96  var s = undefined;
97  grid = fn[d];
98  if (d > 0) {
99        // map mouse to grid coords, then find left edge
100    var p = d3.svg.mouse(svg[0][0]);
101    s = [Math.floor(p[0]/sz), Math.floor(p[1]/sz)];
102    while (grid(s[0]-1,s[1])) s[0]--;
103  }
104  contour(grid, s);
105}
106    </script>
107  </body>
108</html>
Note: See TracBrowser for help on using the repository browser.