contrib/gel/vifa/vifa_int_face_attr_common_params.cxx
Go to the documentation of this file.
00001 // This is gel/vifa/vifa_int_face_attr_common_params.cxx
00002 #include "vifa_int_face_attr_common_params.h"
00003 //:
00004 // \file
00005 
00006 #include <vcl_iostream.h>
00007 #include <vcl_sstream.h>
00008 
00009 //: Default constructor
00010 vifa_int_face_attr_common_params::
00011 vifa_int_face_attr_common_params(vdgl_fit_lines_params*    fitter_params,
00012                                  vifa_group_pgram_params*  gpp_s,
00013                                  vifa_group_pgram_params*  gpp_w,
00014                                  vifa_coll_lines_params*   cpp,
00015                                  vifa_norm_params*         np
00016                 )
00017 {
00018   init_params(fitter_params,
00019               gpp_s,
00020               gpp_w,
00021               cpp,
00022               np);
00023 }
00024 
00025 vifa_int_face_attr_common_params::
00026 vifa_int_face_attr_common_params(const vifa_int_face_attr_common_params&  ifap)
00027   : gevd_param_mixin(), vul_timestamp(), vbl_ref_count()
00028 {
00029   init_params(ifap.fitter_params_.ptr(),
00030               ifap.gpp_s_.ptr(),
00031               ifap.gpp_w_.ptr(),
00032               ifap.cpp_.ptr(),
00033               ifap.np_.ptr());
00034 }
00035 
00036 vifa_int_face_attr_common_params::
00037 ~vifa_int_face_attr_common_params()
00038 {
00039   // Smart-pointer parameter blocks self-destruct upon destruction
00040 }
00041 
00042 //: Publicly available setting of parameters
00043 void vifa_int_face_attr_common_params::
00044 set_params(const vifa_int_face_attr_common_params&  ifap)
00045 {
00046   init_params(ifap.fitter_params_.ptr(),
00047               ifap.gpp_s_.ptr(),
00048               ifap.gpp_w_.ptr(),
00049               ifap.cpp_.ptr(),
00050               ifap.np_.ptr());
00051 }
00052 
00053 //: Checks that parameters are within acceptable bounds
00054 bool vifa_int_face_attr_common_params::SanityCheck()
00055 {
00056   vcl_stringstream  msg;
00057   bool valid;
00058 
00059   if (!fitter_params_.ptr() ||
00060       !gpp_s_.ptr() ||
00061       !gpp_w_.ptr() ||
00062       !cpp_.ptr())
00063   {
00064     msg << "ERROR: {FitLines, GroupParallelogram, CollinearLines} params not set." << vcl_ends;
00065     valid = false;
00066   }
00067   else
00068   {
00069     // Result is result of contained parameters' SanityCheck()'s
00070     valid = fitter_params_->SanityCheck() &&
00071             gpp_s_->SanityCheck() &&
00072             gpp_w_->SanityCheck() &&
00073             cpp_->SanityCheck();
00074   }
00075 
00076   SetErrorMsg(msg.str().c_str());
00077   return valid;
00078 }
00079 
00080 void vifa_int_face_attr_common_params::
00081 print_info(void)
00082 {
00083   vcl_cout << "vifa_int_face_attr_common_params:\n"
00084            << "  line fitting params: ";
00085   if (fitter_params_.ptr())
00086     vcl_cout << *fitter_params_;
00087   else
00088     vcl_cout << "NULL\n";
00089   vcl_cout << "  strong group parallelogram params: ";
00090   if (gpp_s_.ptr())
00091     gpp_s_->print_info();
00092   else
00093     vcl_cout << "NULL\n";
00094   vcl_cout << "  weak group parallelogram params: ";
00095   if (gpp_w_.ptr())
00096     gpp_w_->print_info();
00097   else
00098     vcl_cout << "NULL\n";
00099   vcl_cout << "  collinear lines params: ";
00100   if (cpp_.ptr())
00101     cpp_->print_info();
00102   else
00103     vcl_cout << "NULL\n";
00104   vcl_cout << "  normalization params: ";
00105   if (np_.ptr())
00106     np_->print_info();
00107   else
00108     vcl_cout << "NULL\n";
00109 }
00110 
00111 //: Assign internal parameter blocks
00112 void vifa_int_face_attr_common_params::
00113 init_params(vdgl_fit_lines_params*    fitter_params,
00114             vifa_group_pgram_params*  gpp_s,
00115             vifa_group_pgram_params*  gpp_w,
00116             vifa_coll_lines_params*   cpp,
00117             vifa_norm_params*         np
00118            )
00119 {
00120   if (fitter_params)
00121     fitter_params_ = new vdgl_fit_lines_params(*fitter_params);
00122   else
00123     fitter_params_ = new vdgl_fit_lines_params(/*min_fit_length=*/ 6);
00124   if (gpp_s)
00125     gpp_s_ = new vifa_group_pgram_params(*gpp_s);
00126   else
00127     gpp_s_ = new vifa_group_pgram_params(/*angle_increment=*/ 5.0f);
00128   if (gpp_w)
00129     gpp_w_ = new vifa_group_pgram_params(*gpp_w);
00130   else
00131     gpp_w_ = new vifa_group_pgram_params(/*angle_increment=*/ 20.0f);
00132   if (cpp)
00133     cpp_ = new vifa_coll_lines_params(*cpp);
00134   else
00135     cpp_ = new vifa_coll_lines_params();
00136   if (np)
00137     np_ = new vifa_norm_params(*np);
00138   else
00139     np_ = new vifa_norm_params();
00140 }
00141 
00142 
00143 //: Assign internal parameter blocks
00144 void vifa_int_face_attr_common_params::
00145 init_params(const vdgl_fit_lines_params&   fitter_params,
00146             const vifa_group_pgram_params& gpp_s,
00147             const vifa_group_pgram_params& gpp_w,
00148             const vifa_coll_lines_params&  cpp,
00149             const vifa_norm_params&        np
00150            )
00151 {
00152   fitter_params_ = new vdgl_fit_lines_params(fitter_params);
00153   gpp_s_ = new vifa_group_pgram_params(gpp_s);
00154   gpp_w_ = new vifa_group_pgram_params(gpp_w);
00155   cpp_ = new vifa_coll_lines_params(cpp);
00156   np_ = new vifa_norm_params(np);
00157 }