1 // This is brl/bbas/bxml/bsvg/pro/processes/bsvg_plot_bar_processes.cxx
2 #include <bprb/bprb_func_process.h>
3 //:
4 // \file
5 // \brief Processes for plotting bar graphs
6 //
7 // \author Ozge Can Ozcanli
8 // \date July 15, 2009
9 //
10 // \verbatim
11 // Modifications
12 // none yet
13 // \endverbatim
14
15 #include <brdb/brdb_value.h>
16 #include <bprb/bprb_parameters.h>
17
18 #include <bxml/bsvg/bsvg_plot.h>
19 #include <bxml/bxml_write.h>
20
21 //: Constructor
22 // initialize a bar plot with no bars, new bars will be added by the add_bar process
bsvg_bar_plot_initialize_process_cons(bprb_func_process & pro)23 bool bsvg_bar_plot_initialize_process_cons(bprb_func_process& pro)
24 {
25 //inputs
26 bool ok=false;
27 std::vector<std::string> input_types;
28 input_types.emplace_back("float"); // width of the drawing region in the svg file
29 input_types.emplace_back("float"); // height
30 input_types.emplace_back("vcl_string"); // title of the plot
31 ok = pro.set_input_types(input_types);
32 if (!ok) return ok;
33
34 //output
35 std::vector<std::string> output_types;
36 output_types.emplace_back("bxml_document_sptr");
37 ok = pro.set_output_types(output_types);
38 return ok;
39 }
40
bsvg_bar_plot_initialize_process(bprb_func_process & pro)41 bool bsvg_bar_plot_initialize_process(bprb_func_process& pro)
42 {
43 // Sanity check
44 if (pro.n_inputs() < 3) {
45 std::cerr << "dbrec_image_parse_process - invalid inputs\n";
46 return false;
47 }
48
49 // get input
50 unsigned i = 0;
51 auto w = pro.get_input<float>(i++);
52 auto h = pro.get_input<float>(i++);
53 std::string title = pro.get_input<std::string>(i++);
54
55 auto* p = new bsvg_plot(w, h);
56 bxml_document_sptr pd = p;
57 p->set_margin(40);
58 p->set_font_size(15);
59 p->add_axes(0, 1, 0, 1);
60 p->add_title(title);
61 //p->add_x_increments(0.1f);
62 p->add_y_increments(0.1f);
63
64 pro.set_output_val<bxml_document_sptr>(0, pd);
65 return true;
66 }
67
68 //: Constructor
69 // Add a bar to the plot
bsvg_bar_plot_add_process_cons(bprb_func_process & pro)70 bool bsvg_bar_plot_add_process_cons(bprb_func_process& pro)
71 {
72 //inputs
73 bool ok=false;
74 std::vector<std::string> input_types;
75 input_types.emplace_back("bxml_document_sptr");
76 input_types.emplace_back("float"); // height
77 input_types.emplace_back("vcl_string"); // label
78 input_types.emplace_back("vcl_string"); // color
79 ok = pro.set_input_types(input_types);
80 if (!ok) return ok;
81
82 //output
83 std::vector<std::string> output_types;
84 ok = pro.set_output_types(output_types);
85 return ok;
86 }
87
bsvg_bar_plot_add_process(bprb_func_process & pro)88 bool bsvg_bar_plot_add_process(bprb_func_process& pro)
89 {
90 // Sanity check
91 if (pro.n_inputs() < 4) {
92 std::cerr << "dbrec_image_parse_process - invalid inputs\n";
93 return false;
94 }
95
96 // get input
97 unsigned i = 0;
98 bxml_document_sptr doc = pro.get_input<bxml_document_sptr>(i++);
99 auto h = pro.get_input<float>(i++);
100 std::string label = pro.get_input<std::string>(i++);
101 std::string color = pro.get_input<std::string>(i++);
102
103 auto* p = dynamic_cast<bsvg_plot*>(doc.ptr());
104 p->add_bar(h, label, true, color);
105 return true;
106 }
107
108 //: Constructor
bsvg_plot_write_process_cons(bprb_func_process & pro)109 bool bsvg_plot_write_process_cons(bprb_func_process& pro)
110 {
111 bool ok=false;
112 std::vector<std::string> input_types;
113 input_types.emplace_back("bxml_document_sptr");
114 input_types.emplace_back("vcl_string"); // out file
115 ok = pro.set_input_types(input_types);
116 if (!ok) return ok;
117 std::vector<std::string> output_types;
118 ok = pro.set_output_types(output_types);
119 return ok;
120 }
121
bsvg_plot_write_process(bprb_func_process & pro)122 bool bsvg_plot_write_process(bprb_func_process& pro)
123 {
124 if (pro.n_inputs() < 2) {
125 std::cerr << "dbrec_image_parse_process - invalid inputs\n";
126 return false;
127 }
128 unsigned i = 0;
129 bxml_document_sptr doc = pro.get_input<bxml_document_sptr>(i++);
130 std::string out_file = pro.get_input<std::string>(i++);
131
132 bxml_write(out_file, *doc);
133 return true;
134 }
135