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