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