1 // This is gel/vifa/vifa_int_face_attr_common_params.cxx
2 #include <iostream>
3 #include <sstream>
4 #include "vifa_int_face_attr_common_params.h"
5 //:
6 // \file
7 
8 #ifdef _MSC_VER
9 #  include "vcl_msvc_warnings.h"
10 #endif
11 
12 //: Default constructor
13 vifa_int_face_attr_common_params::
vifa_int_face_attr_common_params(vdgl_fit_lines_params * fitter_params,vifa_group_pgram_params * gpp_s,vifa_group_pgram_params * gpp_w,vifa_coll_lines_params * cpp,vifa_norm_params * np)14 vifa_int_face_attr_common_params(vdgl_fit_lines_params*    fitter_params,
15                                  vifa_group_pgram_params*  gpp_s,
16                                  vifa_group_pgram_params*  gpp_w,
17                                  vifa_coll_lines_params*   cpp,
18                                  vifa_norm_params*         np)
19 {
20   init_params(fitter_params,
21               gpp_s,
22               gpp_w,
23               cpp,
24               np);
25 }
26 
27 vifa_int_face_attr_common_params::
vifa_int_face_attr_common_params(const vifa_int_face_attr_common_params & ifap)28 vifa_int_face_attr_common_params(const vifa_int_face_attr_common_params&  ifap)
29   : gevd_param_mixin(), vul_timestamp(), vbl_ref_count()
30 {
31   init_params(ifap.fitter_params_.ptr(),
32               ifap.gpp_s_.ptr(),
33               ifap.gpp_w_.ptr(),
34               ifap.cpp_.ptr(),
35               ifap.np_.ptr());
36 }
37 
38 vifa_int_face_attr_common_params::
~vifa_int_face_attr_common_params()39 ~vifa_int_face_attr_common_params()
40 {
41   // Smart-pointer parameter blocks self-destruct upon destruction
42 }
43 
44 //: Publicly available setting of parameters
45 void vifa_int_face_attr_common_params::
set_params(const vifa_int_face_attr_common_params & ifap)46 set_params(const vifa_int_face_attr_common_params&  ifap)
47 {
48   init_params(ifap.fitter_params_.ptr(),
49               ifap.gpp_s_.ptr(),
50               ifap.gpp_w_.ptr(),
51               ifap.cpp_.ptr(),
52               ifap.np_.ptr());
53 }
54 
55 //: Checks that parameters are within acceptable bounds
SanityCheck()56 bool vifa_int_face_attr_common_params::SanityCheck()
57 {
58   std::stringstream  msg;
59   bool valid;
60 
61   if (!fitter_params_.ptr() ||
62       !gpp_s_.ptr() ||
63       !gpp_w_.ptr() ||
64       !cpp_.ptr())
65   {
66     msg << "ERROR: {FitLines, GroupParallelogram, CollinearLines} params not set." << std::ends;
67     valid = false;
68   }
69   else
70   {
71     // Result is result of contained parameters' SanityCheck()'s
72     valid = fitter_params_->SanityCheck() &&
73             gpp_s_->SanityCheck() &&
74             gpp_w_->SanityCheck() &&
75             cpp_->SanityCheck();
76   }
77 
78   SetErrorMsg(msg.str().c_str());
79   return valid;
80 }
81 
print_info()82 void vifa_int_face_attr_common_params::print_info() {
83   std::cout << "vifa_int_face_attr_common_params:\n"
84            << "  line fitting params: ";
85   if (fitter_params_.ptr())
86     std::cout << *fitter_params_;
87   else
88     std::cout << "NULL\n";
89   std::cout << "  strong group parallellogram params: ";
90   if (gpp_s_.ptr())
91     gpp_s_->print_info();
92   else
93     std::cout << "NULL\n";
94   std::cout << "  weak group parallellogram params: ";
95   if (gpp_w_.ptr())
96     gpp_w_->print_info();
97   else
98     std::cout << "NULL\n";
99   std::cout << "  collinear lines params: ";
100   if (cpp_.ptr())
101     cpp_->print_info();
102   else
103     std::cout << "NULL\n";
104   std::cout << "  normalization params: ";
105   if (np_.ptr())
106     np_->print_info();
107   else
108     std::cout << "NULL\n";
109 }
110 
111 //: Assign internal parameter blocks
112 void vifa_int_face_attr_common_params::
init_params(vdgl_fit_lines_params * fitter_params,vifa_group_pgram_params * gpp_s,vifa_group_pgram_params * gpp_w,vifa_coll_lines_params * cpp,vifa_norm_params * np)113 init_params(vdgl_fit_lines_params*    fitter_params,
114             vifa_group_pgram_params*  gpp_s,
115             vifa_group_pgram_params*  gpp_w,
116             vifa_coll_lines_params*   cpp,
117             vifa_norm_params*         np
118            )
119 {
120   if (fitter_params)
121     fitter_params_ = new vdgl_fit_lines_params(*fitter_params);
122   else
123     fitter_params_ = new vdgl_fit_lines_params(/*min_fit_length=*/ 6);
124   if (gpp_s)
125     gpp_s_ = new vifa_group_pgram_params(*gpp_s);
126   else
127     gpp_s_ = new vifa_group_pgram_params(/*angle_increment=*/ 5.0f);
128   if (gpp_w)
129     gpp_w_ = new vifa_group_pgram_params(*gpp_w);
130   else
131     gpp_w_ = new vifa_group_pgram_params(/*angle_increment=*/ 20.0f);
132   if (cpp)
133     cpp_ = new vifa_coll_lines_params(*cpp);
134   else
135     cpp_ = new vifa_coll_lines_params();
136   if (np)
137     np_ = new vifa_norm_params(*np);
138   else
139     np_ = new vifa_norm_params();
140 }
141 
142 
143 //: Assign internal parameter blocks
144 void vifa_int_face_attr_common_params::
init_params(const vdgl_fit_lines_params & fitter_params,const vifa_group_pgram_params & gpp_s,const vifa_group_pgram_params & gpp_w,const vifa_coll_lines_params & cpp,const vifa_norm_params & np)145 init_params(const vdgl_fit_lines_params&   fitter_params,
146             const vifa_group_pgram_params& gpp_s,
147             const vifa_group_pgram_params& gpp_w,
148             const vifa_coll_lines_params&  cpp,
149             const vifa_norm_params&        np
150            )
151 {
152   fitter_params_ = new vdgl_fit_lines_params(fitter_params);
153   gpp_s_ = new vifa_group_pgram_params(gpp_s);
154   gpp_w_ = new vifa_group_pgram_params(gpp_w);
155   cpp_ = new vifa_coll_lines_params(cpp);
156   np_ = new vifa_norm_params(np);
157 }
158