1 // This is brl/bbas/bgui/bgui_vsol_camera_tableau.h 2 #ifndef bgui_vsol_camera_tableau_h_ 3 #define bgui_vsol_camera_tableau_h_ 4 //----------------------------------------------------------------------------- 5 //: 6 // \file 7 // \brief A tableau that knows how to project 3-d vsol objects with a camera 8 // \author 9 // J.L. Mundy 10 // 11 // \verbatim 12 // Created June 2, 2003 13 // Modifications: 14 // Peter Vanroose - 8 May 2004 - re-implemented add_vsol_box_3d() with a single polygon 15 // Now obsolete == do not use in new code === J.L. Mundy, March 1, 2008 16 // \endverbatim 17 //----------------------------------------------------------------------------- 18 #include <vector> 19 #include <iostream> 20 #include <map> 21 #ifdef _MSC_VER 22 # include <vcl_msvc_warnings.h> 23 #endif 24 #include <vgl/algo/vgl_p_matrix.h> 25 #include <vgui/vgui_style.h> 26 #include <vgl/vgl_point_2d.h> 27 #include <vsol/vsol_spatial_object_3d_sptr.h> 28 #include <vsol/vsol_point_3d_sptr.h> 29 #include <vsol/vsol_line_3d_sptr.h> 30 #include <vsol/vsol_polygon_3d_sptr.h> 31 #include <vsol/vsol_box_3d_sptr.h> 32 #include <vgui/vgui_tableau_sptr.h> 33 #include <vgui/vgui_style_sptr.h> 34 #include <vgui/vgui_image_tableau_sptr.h> 35 #include <vgui/vgui_easy2D_tableau.h> 36 37 #include "bgui_vsol_camera_tableau_sptr.h" 38 class bgui_vsol_soview2D_point; 39 class bgui_vsol_soview2D_line_seg; 40 class bgui_vsol_soview2D_polygon; 41 42 class bgui_vsol_camera_tableau : public vgui_easy2D_tableau 43 { 44 public: 45 bgui_vsol_camera_tableau(const char* n="unnamed"); 46 47 bgui_vsol_camera_tableau(vgui_image_tableau_sptr const& it, 48 const char* n="unnamed"); 49 50 bgui_vsol_camera_tableau(vgui_tableau_sptr const& t, 51 const char* n="unnamed"); 52 53 ~bgui_vsol_camera_tableau(); 54 55 //:virtual handle method for events 56 virtual bool handle(vgui_event const &); 57 58 //:the projection camera set_camera(vgl_p_matrix<double> const & camera)59 void set_camera(vgl_p_matrix<double> const& camera) { camera_=camera; } get_camera()60 vgl_p_matrix<double> get_camera() const { return camera_; } 61 62 //: display for projected vsol_point_3d 63 bgui_vsol_soview2D_point* 64 add_vsol_point_3d(vsol_point_3d_sptr const& point); 65 66 //: display for vsol_line_3d 67 bgui_vsol_soview2D_line_seg* 68 add_vsol_line_3d(vsol_line_3d_sptr const& line); 69 70 //: display for vsol_polygon_3d 71 bgui_vsol_soview2D_polygon* 72 add_vsol_polygon_3d(vsol_polygon_3d_sptr const& poly); 73 74 //:display for a 3D box 75 bgui_vsol_soview2D_polygon* 76 add_vsol_box_3d(vsol_box_3d_sptr const& box); 77 78 //: display for general spatial object 79 void add_spatial_object_3d(vsol_spatial_object_3d_sptr const& sos); 80 81 //: display methods for sets of objects 82 void add_spatial_objects_3d(std::vector<vsol_spatial_object_3d_sptr> const& sos); 83 84 void add_points_3d(std::vector<vsol_point_3d_sptr> const & lines); 85 86 void add_lines_3d(std::vector<vsol_line_3d_sptr> const & lines); 87 88 void add_polygons_3d(std::vector<vsol_polygon_3d_sptr> const & lines); 89 90 void add_boxes_3d(std::vector<vsol_box_3d_sptr> const & lines); 91 92 93 //: clear the tableau including the highlight map 94 void clear_all(); 95 96 //: Methods for getting mapped objects enable_highlight()97 void enable_highlight() { highlight_ = true; } disable_highlight()98 void disable_highlight() { highlight_ = false; } 99 100 //: Methods for changing the default style of displayable objects 101 102 void set_vsol_point_3d_style(const float r, const float g, const float b, 103 const float point_radius); 104 105 void set_vsol_line_3d_style(const float r, const float g, const float b, 106 const float line_width); 107 108 void set_vsol_polygon_3d_style(const float r, const float g, const float b, 109 const float line_width); 110 111 void set_vsol_box_3d_style(const float r, const float g, const float b, 112 const float line_width); 113 114 protected: 115 //internal methods 116 vgl_point_2d<double> project(vsol_point_3d_sptr const& p3d); 117 //members 118 bool highlight_; 119 void init(); 120 std::map<int, vsol_spatial_object_3d_sptr> obj_map_; 121 std::map<std::string, vgui_style_sptr> style_map_; 122 int old_id_; 123 vgui_style_sptr highlight_style_; 124 vgui_style_sptr old_style_; 125 vgl_p_matrix<double> camera_; 126 }; 127 128 //this stuff is needed to establish inheritance between tableau smart pointers 129 //cloned from xcv_image_tableau 130 struct bgui_vsol_camera_tableau_new : public bgui_vsol_camera_tableau_sptr 131 { 132 typedef bgui_vsol_camera_tableau_sptr base; 133 134 bgui_vsol_camera_tableau_new(const char* n="unnamed") : basebgui_vsol_camera_tableau_new135 base(new bgui_vsol_camera_tableau(n)) { } 136 bgui_vsol_camera_tableau_new(vgui_image_tableau_sptr const& it, 137 const char* n="unnamed") : basebgui_vsol_camera_tableau_new138 base(new bgui_vsol_camera_tableau(it,n)) { } 139 140 bgui_vsol_camera_tableau_new(vgui_tableau_sptr const& t, const char* n="unnamed") basebgui_vsol_camera_tableau_new141 : base(new bgui_vsol_camera_tableau(t, n)) { } 142 vgui_easy2D_tableau_sptrbgui_vsol_camera_tableau_new143 operator vgui_easy2D_tableau_sptr () const { vgui_easy2D_tableau_sptr tt; tt.vertical_cast(*this); return tt; } 144 }; 145 146 #endif // bgui_vsol_camera_tableau_h_ 147