1 // This is brl/bbas/bxml/bsvg/tests/test_svg.cxx
2 //:
3 // \file
4 // \brief Various tests for SVG library
5 // \author Ozge C. Ozcanli (Brown)
6 // \date April 21, 2009
7 //
8 #include "testlib/testlib_test.h"
9 #include <bxml/bsvg/bsvg_document.h>
10 #include <bxml/bsvg/bsvg_element.h>
11 #include <bxml/bsvg/bsvg_plot.h>
12 #include <bxml/bxml_find.h>
13 #include <bxml/bxml_write.h>
14
make_simple_doc()15 bsvg_document make_simple_doc()
16 {
17 bsvg_document doc(200, 200);
18 doc.add_description("test SVG");
19
20 bsvg_text* t = new bsvg_text("some message");
21 t->set_font_size(15);
22 t->set_location(10, 10);
23 t->set_rotation(90);
24
25 doc.add_element(t);
26
27 auto* g = new bsvg_group();
28 g->set_fill_color("red");
29 g->set_stroke_color("black");
30 //g->set_rotation(90);
31
32 auto* e1 = new bsvg_ellipse(25, 10);
33 e1->set_location(50, 20);
34 e1->set_rotation(45);
35 auto* e2 = new bsvg_ellipse(25, 10);
36 e2->set_location(100, 20);
37 e2->set_rotation(90);
38
39 auto* e3 = new bsvg_ellipse(25, 25);
40 e3->set_location(150, 20);
41
42 g->add_element(e1);
43 g->add_element(e2);
44 g->add_element(e3);
45
46 doc.add_element(g);
47
48 auto* l = new bsvg_line(90, 115, 125, 115);
49 l->set_stroke_color("black");
50 l->set_stroke_width(10);
51
52 doc.add_element(l);
53
54 auto* r = new bsvg_rectangle(100, 100, 15, 30);
55 r->set_fill_color("blue");
56 r->set_stroke_color("black");
57 r->set_fill_opacity(0.5f);
58
59 doc.add_element(r);
60
61 return doc;
62 }
63
make_simple_plot()64 bsvg_plot make_simple_plot()
65 {
66 bsvg_plot p(1200, 600);
67 p.set_margin(40);
68 p.set_font_size(30);
69 //bsvg_plot p(600, 300, 0, 0, 300, 150);
70 p.add_axes(0, 1, 0, 1);
71 p.add_title("ROC Plot");
72 //p.add_x_increments(0.1f);
73 p.add_y_increments(0.1f);
74
75 float fpr[] = {0.1f, 0.2f, 0.4f, 0.8f};
76 float tpr[] = {0.4f, 0.8f, 0.9f, 0.99f};
77
78 std::vector<float> xs, ys;
79 for (unsigned i = 0; i < 4; i++) {
80 xs.push_back(fpr[i]); ys.push_back(tpr[i]);
81 }
82
83 p.add_line(xs, ys, "red");
84 return p;
85 }
86
make_simple_histogram()87 bsvg_plot make_simple_histogram()
88 {
89 bsvg_plot p(1200, 600);
90 p.set_margin(40);
91 p.set_font_size(30);
92 //bsvg_plot p(600, 300, 0, 0, 300, 150);
93 p.add_axes(0, 1, 0, 1);
94 p.add_title("Bar Plot");
95 p.add_y_increments(0.1f);
96
97 float heights[] = {0.1f, 0.2f, 0.0f, 0.8f, 0.9f, 0.0f, 0.3f};
98
99 std::vector<float> hs; std::vector<float> labels;
100 for (unsigned i = 0; i < 7; i++) {
101 hs.push_back(heights[i]);
102 labels.push_back(float(i));
103 }
104 p.add_bars(hs, labels, true, "red");
105 return p;
106 }
107
make_simple_pie_chart()108 bsvg_plot make_simple_pie_chart()
109 {
110 bsvg_plot p(500, 500);
111 p.set_margin(40);
112 p.set_font_size(30);
113 double pi = 3.14;
114 p.add_splice(200.0f, 200.0f, 180.0f, 0.0f, (float)(pi*(80.0/180.0)), "red");
115 p.add_splice(200.0f, 200.0f, 180.0f, (float)(pi*(100.0/180.0)), (float)(pi*(150.0/180.0)), "blue");
116 p.add_splice(200.0f, 200.0f, 180.0f, (float)(pi*(200.0/180.0)), (float)(pi*(270.0/180.0)), 255, 255, 0);
117 p.add_splice(200.0f, 200.0f, 90.0f, (float)(pi*(200.0/180.0)), (float)(pi*(270.0/180.0)), 255, 255, 200);
118 p.add_splice(200.0f, 200.0f, 90.0f, (float)(pi*(-180.0/180.0)), (float)(pi*(-160.0/180.0)), 255, 100, 200);
119 return p;
120 }
121
test_svg()122 static void test_svg()
123 {
124 bsvg_document doc = make_simple_doc();
125 std::string out_file = "./test.svg";
126 bxml_write(out_file, doc);
127
128 bsvg_plot p = make_simple_plot();
129 out_file = "./test_plot.svg";
130 bxml_write(out_file, p);
131
132 bsvg_plot h = make_simple_histogram();
133 out_file = "./test_histogram.svg";
134 bxml_write(out_file, h);
135 TEST("testing number of bars", h.number_of_bars(), 7);
136
137 bsvg_plot pie = make_simple_pie_chart();
138 out_file = "./test_pie_chart.svg";
139 bxml_write(out_file, pie);
140 }
141
142 TESTMAIN( test_svg );
143