Fawkes API Fawkes Development Version
|
00001 00002 /*************************************************************************** 00003 * laser_drawing_area.h - Laser drawing area derived from Gtk::DrawingArea 00004 * 00005 * Created: Thu Oct 09 18:19:54 2008 00006 * Copyright 2008 Tim Niemueller [www.niemueller.de] 00007 * 00008 ****************************************************************************/ 00009 00010 /* This program is free software; you can redistribute it and/or modify 00011 * it under the terms of the GNU General Public License as published by 00012 * the Free Software Foundation; either version 2 of the License, or 00013 * (at your option) any later version. 00014 * 00015 * This program is distributed in the hope that it will be useful, 00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 * GNU Library General Public License for more details. 00019 * 00020 * Read the full text in the LICENSE.GPL file in the doc directory. 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 /** Draw modes. */ 00051 typedef enum { 00052 MODE_LINES, /**< Draw beams as lines */ 00053 MODE_POINTS, /**< Only draw beam end points */ 00054 MODE_HULL /**< Draw hull of beams */ 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