1 #ifndef bwm_observer_fiducial_h_ 2 #define bwm_observer_fiducial_h_ 3 //: 4 // \file 5 6 #include <iostream> 7 #include "bwm_observer_vgui.h" 8 #include "bwm_observer_img.h" 9 #include "bwm_observable_sptr.h" 10 #include <vgui/vgui_style.h> 11 #ifdef _MSC_VER 12 # include <vcl_msvc_warnings.h> 13 #endif 14 15 #include <vgui/vgui_easy2D_tableau.h> 16 #include <vgui/vgui_viewer2D_tableau.h> 17 18 #include <vgl/vgl_point_2d.h> 19 #include <vgl/vgl_point_3d.h> 20 #include <vsol/vsol_point_2d_sptr.h> 21 #include <vsol/vsol_polygon_2d_sptr.h> 22 #include <vnl/vnl_math.h> 23 #include <vgui/vgui_event.h> 24 #include "algo/bwm_soview2D_cross.h" 25 #include "io/bwm_io_config_parser.h" 26 struct fiducial_corr { fiducial_corrfiducial_corr27 fiducial_corr() :soview_(nullptr), loc_(vgl_point_2d<double>(0.0, 0.0)) {} 28 vgl_point_2d<double> loc_; 29 bwm_soview2D_cross* soview_; 30 static float cross_radius_; 31 }; 32 class bwm_observer_fiducial : public bwm_observer_vgui 33 { 34 public: 35 36 typedef bwm_observer_vgui base; 37 38 bwm_observer_fiducial(bgui_image_tableau_sptr const& img, 39 std::string const& site_name, 40 std::string const& image_path, 41 std::string const& fid_path, 42 bool display_image_path); 43 44 virtual ~bwm_observer_fiducial(); 45 image_tableau()46 bgui_image_tableau_sptr image_tableau() { return img_tab_; } 47 48 bool handle(const vgui_event &e); 49 type_name()50 virtual std::string type_name() const { return "bwm_observer_fiducial"; } 51 void start_fid_corrs(); 52 void stop_fid_corrs(); 53 bool save_fiducial_corrs(std::string path); 54 bool read_fiducial_corrs(); 55 bool add_fiducial_corrs(bwm_io_config_parser* parser); 56 //: unused pure virtual functions =========== proj_poly(vsol_polygon_3d_sptr poly_3d,vsol_polygon_2d_sptr & poly_2d)57 virtual void proj_poly(vsol_polygon_3d_sptr poly_3d,vsol_polygon_2d_sptr& poly_2d){} proj_line(vsol_line_3d_sptr l3d,vsol_line_2d_sptr & l2d)58 virtual void proj_line(vsol_line_3d_sptr l3d, vsol_line_2d_sptr& l2d){} proj_point(vgl_point_3d<double> p3d,vgl_point_2d<double> & p2d)59 virtual void proj_point(vgl_point_3d<double> p3d, vgl_point_2d<double>& p2d){} backproj_poly(vsol_polygon_2d_sptr poly2d,vsol_polygon_3d_sptr & poly3d)60 virtual void backproj_poly(vsol_polygon_2d_sptr poly2d, 61 vsol_polygon_3d_sptr& poly3d){} 62 //================= 63 protected: 64 //: add a commited fiducial correspondence 65 void commit_pending(); 66 67 //: removes a committed fiducial correspondence 68 void remove_sel_committed(); 69 70 //: update a pending fiducial correspondence 71 void update_pending(vgl_point_2d<double> const& pt); 72 std::string mode_; 73 std::string type_; 74 fiducial_corr pending_corr_; 75 std::vector<fiducial_corr> committed_fid_corrs_; 76 std::string site_name_; 77 std::string composite_image_path_; 78 std::string fiducial_path_; 79 vgui_style_sptr COMMITED_STYLE; 80 }; 81 82 #endif 83