10 #ifndef EMP_D3_SVG_SHAPES_H 11 #define EMP_D3_SVG_SHAPES_H 18 #include "../js_utils.h" 39 template <
typename T,
size_t SIZE>
43 char * buffer = (
char *)EM_ASM_INT({
44 var result = js.objects[$0](emp_i.__incoming_array);
45 var buffer = Module._malloc(result.length+1);
46 Module.writeStringToMemory(result, buffer);
50 std::string result = std::string(buffer);
57 template <
typename T, std::
size_t SIZE>
70 var sel = js.objects[$0].attr(
"d", js.objects[$1](js.objects[$2]));
76 template <
typename T, std::
size_t SIZE, std::
size_t SIZE2>
80 for (
auto arr:
data) {
94 var new_line = d3.symbol();
95 js.objects[$0] = new_line;
105 return d3.symbolTypes.includes(Pointer_stringify($0)) ||
106 window[Pointer_stringify($0)] ===
"function" ||
107 window[
"d3"][Pointer_stringify($0)] ===
"function" ||
108 window[
"emp"][Pointer_stringify($0)] ===
"function";
116 template <typename T>
129 js.objects[$0].size($1);
135 void SetSize(std::string size){
139 template <typename T>
167 js.objects[$0].tension($1);
168 }, this->
id, tension);
178 template <typename T>
180 SetDefined(T defined){
191 var new_line = d3.line();
192 js.objects[$0] = new_line;
201 template <
typename X_SCALE_TYPE>
204 var scale = js.objects[$1];
205 var curr_x = js.objects[$0].x();
208 js.objects[$0].x(
function(d, i){
return scale(curr_x(d, i));});
209 }, this->
id, scale.GetID());
217 template <
typename Y_SCALE_TYPE>
220 var scale = js.objects[$1];
221 var curr_y = js.objects[$0].y();
224 js.objects[$0].y(
function(d, i){
return scale(curr_y(d, i));});
225 }, this->
id, scale.GetID());
260 template <typename T>
261 typename std::enable_if<std::is_fundamental<T>::value,
void>::type
263 EM_ASM_ARGS({js.objects[$0].x($1);}, this->
id, x);
267 template <
typename T>
308 template <typename T>
309 typename std::enable_if<std::is_fundamental<T>::value,
void>::type
311 EM_ASM_ARGS({js.objects[$0].y($1);}, this->
id, y);
315 template <
typename T>
328 if (type ==
"vertical") {
329 EM_ASM_ARGS({js.objects[$0] = d3.linkVertical();}, this->
id);
330 }
else if (type ==
"horizontal") {
331 EM_ASM_ARGS({js.objects[$0] = d3.linkHorizontal();}, this->
id);
333 std::cout <<
"WARNING: Invalid link type" <<
std::endl;
334 EM_ASM_ARGS({js.objects[$0] = d3.linkVertical();}, this->
id);
345 template <typename T>
346 typename std::enable_if<std::is_fundamental<T>::value,
void>::type
347 SetSource(T source) {
348 EM_ASM_ARGS({js.objects[$0].source($1);}, this->
id, source);
352 template <
typename T>
354 SetSource(T source) {
368 template <typename T>
369 typename std::enable_if<std::is_fundamental<T>::value,
void>::type
371 EM_ASM_ARGS({js.objects[$0].target($1);}, this->
id, target);
375 template <
typename T>
389 var new_line = d3.area();
390 js.objects[$0] = new_line;
395 template <
typename T>
397 EM_ASM_ARGS({js.objects[$0].x0($1);}, this->
id, x);
401 template <
typename T>
403 EM_ASM_ARGS({js.objects[$0].y0($1);}, this->
id, y);
417 template <typename T>
419 EM_ASM_ARGS({js.objects[$0].x1($1);}, this->
id, x);
423 template <
typename T>
425 EM_ASM_ARGS({js.objects[$0].y1($1);}, this->
id, y);
443 var new_line = d3.radialLine();
444 js.objects[$0] = new_line;
449 EM_ASM_ARGS({js.objects[$0].radius($1);}, this->
id, radius);
457 EM_ASM_ARGS({js.objects[$0].angle($1);}, this->
id, angle);
469 var new_line = d3.radialArea();
470 js.objects[$0] = new_line;
475 EM_ASM_ARGS({js.objects[$0].innerRadius($1);}, this->
id, radius);
483 EM_ASM_ARGS({js.objects[$0].outerRadius($1);}, this->
id, radius);
491 EM_ASM_ARGS({js.objects[$0].startAngle($1);}, this->
id, angle);
499 EM_ASM_ARGS({js.objects[$0].endAngle($1);}, this->
id, angle);
511 var new_line = d3.ribbon();
512 js.objects[$0] = new_line;
516 template <
typename T>
518 EM_ASM_ARGS({js.objects[$0].source($1);}, this->
id, source);
525 template <typename T>
527 EM_ASM_ARGS({js.objects[$0].target($1);}, this->
id, target);
539 var new_line = d3.arc();
540 js.objects[$0] = new_line;
545 EM_ASM_ARGS({js.objects[$0].cornerRadius($1);}, this->
id, radius);
553 EM_ASM_ARGS({js.objects[$0].padRadius($1);}, this->
id, radius);
561 EM_ASM_ARGS({js.objects[$0].padAngle($1);}, this->
id, angle);
void SetX0(std::string x)
Definition: svg_shapes.h:407
void SetTarget(std::string target)
Definition: svg_shapes.h:530
void SetPadRadius(float radius)
Definition: svg_shapes.h:552
void SetOuterRadius(std::string radius)
Definition: svg_shapes.h:486
void SetTarget(T target)
Definition: svg_shapes.h:526
void SetDefined(std::string defined)
Definition: svg_shapes.h:173
REAL_TYPE sfinae_decoy
Definition: meta.h:93
Selection DrawShape(Dataset data, Selection s)
DrawShape will also accept a D3::Dataset.
Definition: svg_shapes.h:65
void SetX1(std::string x)
Definition: svg_shapes.h:429
void SetX(std::string x)
Definition: svg_shapes.h:254
void SetStartAngle(std::string angle)
Definition: svg_shapes.h:494
void SetY1(T y)
Definition: svg_shapes.h:424
RadialAreaGenerator()
Definition: svg_shapes.h:467
ChordGenerator()
Definition: svg_shapes.h:509
void SetEndAngle(std::string angle)
Definition: svg_shapes.h:502
#define D3_CALLBACK_METHOD_CPP_FUNCTION_1_ARG(FUNC, CPP_FUN)
Definition: utils.h:132
void AddXScale(X_SCALE_TYPE &scale)
Definition: svg_shapes.h:202
DERIVED & SetAttr(std::string name, std::string value)
Definition: selection.h:208
Definition: svg_shapes.h:31
BaseLineGenerator()
Definition: svg_shapes.h:154
Definition: svg_shapes.h:439
data
A set of modifiers are available do describe DataNode.
Definition: DataNode.h:38
void SetTarget(std::string target)
Definition: svg_shapes.h:361
int id
Definition: d3_init.h:45
RadialLineGenerator()
Definition: svg_shapes.h:441
SymbolGenerator()
Definition: svg_shapes.h:92
Definition: svg_shapes.h:507
void SetInnerRadius(float radius)
Definition: svg_shapes.h:474
void SetX1(T x)
Definition: svg_shapes.h:418
Selection Select(std::string selector)
Definition: selection.h:1670
void SetPadAngle(std::string angle)
Definition: svg_shapes.h:564
Selection DrawShape(emp::array< emp::array< emp::array< T, 2 >, SIZE >, SIZE2 > &data)
If you pass a triple-nested array, it will be treated as an array of paths.
Definition: svg_shapes.h:77
void SetEndAngle(float angle)
Definition: svg_shapes.h:498
void SetSource(std::string source)
Definition: svg_shapes.h:339
LineGenerator()
Definition: svg_shapes.h:189
An area is defined by two lines, with the area in between shaded.
Definition: svg_shapes.h:385
static const PrintStr endl("<br>")
Pre-define emp::endl to insert a "<br>" and thus acting like a newline.
Tools for scaling graph axes in D3.
void SetCornerRadius(float radius)
Definition: svg_shapes.h:544
Definition: svg_shapes.h:325
LinkGenerator(std::string type)
Definition: svg_shapes.h:327
std::string Generate(emp::array< emp::array< T, 2 >, SIZE > &data)
Definition: svg_shapes.h:40
void SetY(std::string y)
Definition: svg_shapes.h:301
Generator for regular old (cartesian) lines.
Definition: svg_shapes.h:187
void SetSource(T source)
Definition: svg_shapes.h:517
Definition: selection.h:936
void AddYScale(Y_SCALE_TYPE &scale)
Definition: svg_shapes.h:218
void SetSource(std::string source)
Definition: svg_shapes.h:521
void SetY1(std::string y)
Definition: svg_shapes.h:434
void SetRadius(std::string radius)
Definition: svg_shapes.h:452
Definition: svg_shapes.h:90
void SetRadius(float radius)
Definition: svg_shapes.h:448
void SetAngle(std::string angle)
Definition: svg_shapes.h:460
void SetSize(int size)
Definition: svg_shapes.h:127
void SetType(std::string type)
Definition: svg_shapes.h:102
Definition: svg_shapes.h:535
ArcGenerator()
Definition: svg_shapes.h:537
void SetX0(T x)
Definition: svg_shapes.h:396
#define emp_assert(...)
Definition: assert.h:199
AreaGenerator()
Definition: svg_shapes.h:387
void SetStartAngle(float angle)
Definition: svg_shapes.h:490
#define D3_CALLBACK_METHOD_1_ARG(FUNC, ARG1)
Definition: utils.h:115
void SetOuterRadius(float radius)
Definition: svg_shapes.h:482
Definition: svg_shapes.h:152
SvgShapeGenerator()
Definition: svg_shapes.h:33
void SetInnerRadius(std::string radius)
Definition: svg_shapes.h:478
Definition: svg_shapes.h:465
void SetPadRadius(std::string radius)
Definition: svg_shapes.h:556
void SetY0(std::string y)
Definition: svg_shapes.h:412
void SetPadAngle(float angle)
Definition: svg_shapes.h:560
Selection Append(std::string name)
Append DOM element(s) of the type specified by [name] to this selection.
Definition: selection.h:1417
Selection DrawShape(emp::array< emp::array< T, 2 >, SIZE > &data, Selection &s)
Definition: svg_shapes.h:58
Tools to maintain data in D3.
int GetID() const
Definition: d3_init.h:96
void SetCurve(std::string curve)
Definition: svg_shapes.h:159
void pass_array_to_javascript(C values)
Definition: js_utils.h:212
void SetAngle(float angle)
Definition: svg_shapes.h:456
void SetCornerRadius(std::string radius)
Definition: svg_shapes.h:548
void SetTension(float tension)
Definition: svg_shapes.h:165
void SetY0(T y)
Definition: svg_shapes.h:402