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 #include <list> 00028 #include <interfaces/Position2DTrackInterface.h> 00029 #include <interfaces/SwitchInterface.h> 00030 00031 namespace fawkes { 00032 class Laser360Interface; 00033 class Laser720Interface; 00034 class ObjectPositionInterface; 00035 class CairoRobotDrawer; 00036 class LegtrackerTrackinterface; 00037 class SwitchInterface; 00038 class VisualDisplay2DInterface; 00039 } 00040 00041 class VisualDisplay2D; 00042 00043 class LaserDrawingArea 00044 : public Gtk::DrawingArea 00045 { 00046 public: 00047 /** Draw modes. */ 00048 typedef enum { 00049 MODE_LINES, /**< Draw beams as lines */ 00050 MODE_POINTS, /**< Only draw beam end points */ 00051 MODE_HULL /**< Draw hull of beams */ 00052 } draw_mode_t; 00053 00054 LaserDrawingArea(); 00055 LaserDrawingArea(BaseObjectType* cobject, 00056 const Glib::RefPtr<Gtk::Builder> &builder); 00057 ~LaserDrawingArea(); 00058 00059 void set_laser_ifs(const std::list<fawkes::Interface*>& laser_if); 00060 void reset_laser_ifs(); 00061 void set_objpos_if(std::list<fawkes::ObjectPositionInterface*>* l_objpos_if_persons, 00062 std::list<fawkes::ObjectPositionInterface*>* l_objpos_if_legs, 00063 std::list<fawkes::ObjectPositionInterface*>* l_objpos_if_misc, 00064 fawkes::Laser720Interface* laser_segmentation_if, 00065 std::list<fawkes::Position2DTrackInterface*>* l_track_if, 00066 fawkes::ObjectPositionInterface* target_if, 00067 fawkes::SwitchInterface* switch_if); 00068 void set_line_if(fawkes::ObjectPositionInterface *line_if); 00069 void set_visdisp_if(fawkes::VisualDisplay2DInterface *visdisp_if); 00070 void set_robot_drawer(fawkes::CairoRobotDrawer *robot_drawer); 00071 void set_resolution(unsigned int resolution); 00072 00073 void zoom_in(); 00074 void zoom_out(); 00075 00076 void set_rotation(float rot_rad); 00077 void set_draw_mode(draw_mode_t mode); 00078 void set_connected(bool connected); 00079 00080 void toggle_break_drawing(); 00081 00082 protected: 00083 #if GTK_VERSION_GE(3,0) 00084 virtual bool on_draw(const Cairo::RefPtr<Cairo::Context> &cr); 00085 #else 00086 virtual bool on_expose_event(GdkEventExpose *event); 00087 #endif 00088 virtual bool on_scroll_event(GdkEventScroll *event); 00089 virtual bool on_motion_notify_event(GdkEventMotion *event); 00090 virtual bool on_button_press_event(GdkEventButton *event); 00091 00092 void draw_beams(const fawkes::Interface* itf, 00093 Glib::RefPtr<Gdk::Window> &window, 00094 const Cairo::RefPtr<Cairo::Context> &cr); 00095 void draw_segments(const fawkes::Interface* itf, 00096 Glib::RefPtr<Gdk::Window> &window, 00097 const Cairo::RefPtr<Cairo::Context> &cr); 00098 void draw_scalebox(Glib::RefPtr<Gdk::Window> &window, 00099 const Cairo::RefPtr<Cairo::Context> &cr); 00100 void draw_persons_legs(Glib::RefPtr<Gdk::Window> &window, 00101 const Cairo::RefPtr<Cairo::Context> &cr); 00102 std::pair<float,float> transform_coords_from_fawkes(float p_x, float p_y); 00103 00104 00105 private: 00106 /// @cond INTERNALS 00107 struct Color { 00108 unsigned char r; 00109 unsigned char g; 00110 unsigned char b; 00111 }; 00112 /// @endcond 00113 typedef std::pair<fawkes::Interface*, Color> InterfaceColorPair; 00114 typedef std::list<InterfaceColorPair> InterfaceColorPairList; 00115 00116 bool all_laser_ifs_have_writer() const; 00117 00118 InterfaceColorPairList __laser_ifs; 00119 fawkes::Laser720Interface *__laser_segmentation_if; 00120 fawkes::SwitchInterface *__switch_if; 00121 fawkes::ObjectPositionInterface *__target_if; 00122 00123 fawkes::ObjectPositionInterface *__line_if; 00124 00125 std::list<fawkes::ObjectPositionInterface*>* __l_objpos_if_persons; 00126 std::list<fawkes::ObjectPositionInterface*>* __l_objpos_if_legs; 00127 std::list<fawkes::ObjectPositionInterface*>* __l_objpos_if_misc; 00128 std::list<fawkes::Position2DTrackInterface*>* __l_track_if; 00129 00130 bool __connected; 00131 draw_mode_t __draw_mode; 00132 00133 float __zoom_factor; 00134 unsigned int __resolution; 00135 float __rotation; 00136 bool __break_drawing; 00137 bool __first_draw; 00138 double __last_mouse_x; 00139 double __last_mouse_y; 00140 double __xc; 00141 double __yc; 00142 00143 fawkes::CairoRobotDrawer *__robot_drawer; 00144 00145 VisualDisplay2D *__visdisp; 00146 fawkes::VisualDisplay2DInterface *__visdisp_if; 00147 }; 00148 00149 #endif