Empirical
visual_elements.h
Go to the documentation of this file.
1 #ifndef VISUALIZATION_ELEMENTS_H
2 #define VISUALIZATION_ELEMENTS_H
3 
4 #include "selection.h"
5 #include "../../base/vector.h"
6 #include "../JSWrap.h"
7 
8 
9 namespace D3 {
10 
11 struct LocNode {
12  EMP_BUILD_INTROSPECTIVE_TUPLE( int, loc)
13 };
14 
15 template <typename NODE = LocNode>
16 class TileGrid {
17 public:
18 
21  int cell_size;
23 
24  emp::vector<NODE> data = emp::vector<NODE>(grid_width*grid_height);
25 
26  std::function<int(NODE)> GetX = [this](NODE n) {
27  return cell_size*(n.loc() % grid_width);
28  };
29 
30  std::function<int(NODE)> GetY = [this](NODE n) {
31  return cell_size*(n.loc() / grid_width);
32  };
33 
34  void SetCellSize(int size) {
35  cell_size = size;
36  svg.SetAttr("width", cell_size*grid_width).SetAttr("height", cell_size*grid_height);
37  svg.SelectAll("rect").SetAttr("width", cell_size).SetAttr("height", cell_size);
38  }
39 
40  TileGrid(int width, int height, int cell_size, D3::Selection& svg) :
41  grid_width(width), grid_height(height), cell_size(cell_size), svg(svg) {
42 
43  emp::JSWrap(GetX, emp::to_string(svg.GetID())+"get_x");
44  emp::JSWrap(GetY, emp::to_string(svg.GetID())+"get_y");
45 
46  svg.SetAttr("width", cell_size*grid_width).SetAttr("height", cell_size*grid_height);
47  for (int i = 0; i < grid_width*grid_height; ++i) {
48  data[i].loc(i);
49  }
50 
51  svg.SelectAll("rect").Data(data)
52  .EnterAppend("rect")
53  .SetStyle("fill", "black")
54  .SetStyle("stroke", "white")
55  .SetStyle("stroke-width", 1)
56  .SetAttr("width", cell_size)
57  .SetAttr("height", cell_size)
58  .SetAttr("x", emp::to_string(svg.GetID())+"get_x")
59  .SetAttr("y", emp::to_string(svg.GetID())+"get_y");
60  }
61 
62  TileGrid(int width, int height, int cell_size = 15) :
63  TileGrid(width, height, cell_size, D3::Select("body").Append("svg")){}
64 
65 };
66 
67 }
68 
69 #endif
Definition: visual_elements.h:11
DERIVED SelectAll(std::string selector) const
Definition: selection.h:60
std::string to_string(ALL_TYPES &&...all_values)
Definition: string_utils.h:511
DERIVED & SetStyle(std::string name, std::string value, bool priority=false)
Definition: selection.h:284
void SetCellSize(int size)
Definition: visual_elements.h:34
DERIVED & SetAttr(std::string name, std::string value)
Definition: selection.h:208
D3::Selection svg
Definition: visual_elements.h:22
data
A set of modifiers are available do describe DataNode.
Definition: DataNode.h:38
Selection Select(std::string selector)
Definition: selection.h:1670
Selection EnterAppend(std::string type)
Definition: selection.h:1147
Definition: selection.h:936
TileGrid(int width, int height, int cell_size, D3::Selection &svg)
Definition: visual_elements.h:40
int grid_height
Definition: visual_elements.h:20
Definition: axis.h:20
Selection Data(Dataset &values, std::string key="")
Definition: selection.h:1008
TileGrid(int width, int height, int cell_size=15)
Definition: visual_elements.h:62
int GetID() const
Definition: d3_init.h:96
int grid_width
Definition: visual_elements.h:19
Definition: visual_elements.h:16
int cell_size
Definition: visual_elements.h:21