laser_drawing_area.h
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 #include <libglademm/xml.h>
00028 #include <list>
00029 #include <interfaces/Position2DTrackInterface.h>
00030 #include <interfaces/SwitchInterface.h>
00031
00032 namespace fawkes {
00033 class Laser360Interface;
00034 class Laser720Interface;
00035 class ObjectPositionInterface;
00036 class CairoRobotDrawer;
00037 class LegtrackerTrackinterface;
00038 class SwitchInterface;
00039 }
00040
00041 class LaserDrawingArea
00042 : public Gtk::DrawingArea
00043 {
00044 public:
00045
00046 typedef enum {
00047 MODE_LINES,
00048 MODE_POINTS,
00049 MODE_HULL
00050 } draw_mode_t;
00051
00052 LaserDrawingArea();
00053 LaserDrawingArea(BaseObjectType* cobject,
00054 const Glib::RefPtr<Gnome::Glade::Xml>& refxml);
00055
00056 void set_laser360_if(fawkes::Laser360Interface *laser_if);
00057 void set_laser720_if(fawkes::Laser720Interface *laser_if);
00058 void reset_laser_ifs();
00059 void set_objpos_if(std::list<fawkes::ObjectPositionInterface*>* l_objpos_if_persons,
00060 std::list<fawkes::ObjectPositionInterface*>* l_objpos_if_legs,
00061 std::list<fawkes::ObjectPositionInterface*>* l_objpos_if_misc,
00062 fawkes::Laser720Interface* laser_segmentation_if,
00063 std::list<fawkes::Position2DTrackInterface*>* l_track_if,
00064 fawkes::ObjectPositionInterface* target_if,
00065 fawkes::SwitchInterface* switch_if);
00066 void set_line_if(fawkes::ObjectPositionInterface *line_if);
00067 void set_robot_drawer(fawkes::CairoRobotDrawer *robot_drawer);
00068 void set_resolution(unsigned int resolution);
00069
00070 void zoom_in();
00071 void zoom_out();
00072
00073 void set_rotation(float rot_rad);
00074 void set_draw_mode(draw_mode_t mode);
00075
00076 void toggle_break_drawing();
00077
00078 protected:
00079 virtual bool on_expose_event(GdkEventExpose* event);
00080 virtual bool on_scroll_event(GdkEventScroll *event);
00081 virtual bool on_motion_notify_event(GdkEventMotion *event);
00082 virtual bool on_button_press_event(GdkEventButton *event);
00083
00084 void draw_beams(Glib::RefPtr<Gdk::Window> &window,
00085 Cairo::RefPtr<Cairo::Context> &cr);
00086 void draw_segments(Glib::RefPtr<Gdk::Window> &window,
00087 Cairo::RefPtr<Cairo::Context> &cr);
00088 void draw_scalebox(Glib::RefPtr<Gdk::Window> &window,
00089 Cairo::RefPtr<Cairo::Context> &cr);
00090 void draw_persons_legs(Glib::RefPtr<Gdk::Window> &window,
00091 Cairo::RefPtr<Cairo::Context> &cr);
00092 std::pair<float,float> transform_coords_from_fawkes(float p_x, float p_y);
00093
00094
00095 private:
00096 fawkes::Laser360Interface *__laser360_if;
00097 fawkes::Laser720Interface *__laser720_if;
00098 fawkes::Laser720Interface *__laser_segmentation_if;
00099 fawkes::SwitchInterface *__switch_if;
00100 fawkes::ObjectPositionInterface *__target_if;
00101
00102 fawkes::ObjectPositionInterface *__line_if;
00103
00104 std::list<fawkes::ObjectPositionInterface*>* __l_objpos_if_persons;
00105 std::list<fawkes::ObjectPositionInterface*>* __l_objpos_if_legs;
00106 std::list<fawkes::ObjectPositionInterface*>* __l_objpos_if_misc;
00107 std::list<fawkes::Position2DTrackInterface*>* __l_track_if;
00108
00109 draw_mode_t __draw_mode;
00110
00111 float __zoom_factor;
00112 unsigned int __resolution;
00113 float __rotation;
00114 bool __break_drawing;
00115 bool __first_draw;
00116 double __last_mouse_x;
00117 double __last_mouse_y;
00118 double __xc;
00119 double __yc;
00120
00121 fawkes::CairoRobotDrawer *__robot_drawer;
00122 };
00123
00124 #endif