00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __TOOLS_LASERGUI_LASER_DRAWING_AREA_H_
00024 #define __TOOLS_LASERGUI_LASER_DRAWING_AREA_H_
00025
00026 #include <gtkmm.h>
00027 #ifdef HAVE_GLADEMM
00028 # include <libglademm/xml.h>
00029 #endif
00030 #include <list>
00031 #include <interfaces/Position2DTrackInterface.h>
00032 #include <interfaces/SwitchInterface.h>
00033
00034 namespace fawkes {
00035 class Laser360Interface;
00036 class Laser720Interface;
00037 class ObjectPositionInterface;
00038 class CairoRobotDrawer;
00039 class LegtrackerTrackinterface;
00040 class SwitchInterface;
00041 class VisualDisplay2DInterface;
00042 }
00043
00044 class VisualDisplay2D;
00045
00046 class LaserDrawingArea
00047 : public Gtk::DrawingArea
00048 {
00049 public:
00050
00051 typedef enum {
00052 MODE_LINES,
00053 MODE_POINTS,
00054 MODE_HULL
00055 } draw_mode_t;
00056
00057 LaserDrawingArea();
00058 #ifdef HAVE_GLADEMM
00059 LaserDrawingArea(BaseObjectType* cobject,
00060 const Glib::RefPtr<Gnome::Glade::Xml>& refxml);
00061 #endif
00062 ~LaserDrawingArea();
00063
00064 void set_laser360_if(fawkes::Laser360Interface *laser_if);
00065 void set_laser720_if(fawkes::Laser720Interface *laser_if);
00066 void reset_laser_ifs();
00067 void set_objpos_if(std::list<fawkes::ObjectPositionInterface*>* l_objpos_if_persons,
00068 std::list<fawkes::ObjectPositionInterface*>* l_objpos_if_legs,
00069 std::list<fawkes::ObjectPositionInterface*>* l_objpos_if_misc,
00070 fawkes::Laser720Interface* laser_segmentation_if,
00071 std::list<fawkes::Position2DTrackInterface*>* l_track_if,
00072 fawkes::ObjectPositionInterface* target_if,
00073 fawkes::SwitchInterface* switch_if);
00074 void set_line_if(fawkes::ObjectPositionInterface *line_if);
00075 void set_visdisp_if(fawkes::VisualDisplay2DInterface *visdisp_if);
00076 void set_robot_drawer(fawkes::CairoRobotDrawer *robot_drawer);
00077 void set_resolution(unsigned int resolution);
00078
00079 void zoom_in();
00080 void zoom_out();
00081
00082 void set_rotation(float rot_rad);
00083 void set_draw_mode(draw_mode_t mode);
00084
00085 void toggle_break_drawing();
00086
00087 protected:
00088 virtual bool on_expose_event(GdkEventExpose* event);
00089 virtual bool on_scroll_event(GdkEventScroll *event);
00090 virtual bool on_motion_notify_event(GdkEventMotion *event);
00091 virtual bool on_button_press_event(GdkEventButton *event);
00092
00093 void draw_beams(Glib::RefPtr<Gdk::Window> &window,
00094 Cairo::RefPtr<Cairo::Context> &cr);
00095 void draw_segments(Glib::RefPtr<Gdk::Window> &window,
00096 Cairo::RefPtr<Cairo::Context> &cr);
00097 void draw_scalebox(Glib::RefPtr<Gdk::Window> &window,
00098 Cairo::RefPtr<Cairo::Context> &cr);
00099 void draw_persons_legs(Glib::RefPtr<Gdk::Window> &window,
00100 Cairo::RefPtr<Cairo::Context> &cr);
00101 std::pair<float,float> transform_coords_from_fawkes(float p_x, float p_y);
00102
00103
00104 private:
00105 fawkes::Laser360Interface *__laser360_if;
00106 fawkes::Laser720Interface *__laser720_if;
00107 fawkes::Laser720Interface *__laser_segmentation_if;
00108 fawkes::SwitchInterface *__switch_if;
00109 fawkes::ObjectPositionInterface *__target_if;
00110
00111 fawkes::ObjectPositionInterface *__line_if;
00112
00113 std::list<fawkes::ObjectPositionInterface*>* __l_objpos_if_persons;
00114 std::list<fawkes::ObjectPositionInterface*>* __l_objpos_if_legs;
00115 std::list<fawkes::ObjectPositionInterface*>* __l_objpos_if_misc;
00116 std::list<fawkes::Position2DTrackInterface*>* __l_track_if;
00117
00118 draw_mode_t __draw_mode;
00119
00120 float __zoom_factor;
00121 unsigned int __resolution;
00122 float __rotation;
00123 bool __break_drawing;
00124 bool __first_draw;
00125 double __last_mouse_x;
00126 double __last_mouse_y;
00127 double __xc;
00128 double __yc;
00129
00130 fawkes::CairoRobotDrawer *__robot_drawer;
00131
00132 VisualDisplay2D *__visdisp;
00133 fawkes::VisualDisplay2DInterface *__visdisp_if;
00134 };
00135
00136 #endif