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