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