Fawkes API  Fawkes Development Version
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
laser_drawing_area.h
1 
2 /***************************************************************************
3  * laser_drawing_area.h - Laser drawing area derived from Gtk::DrawingArea
4  *
5  * Created: Thu Oct 09 18:19:54 2008
6  * Copyright 2008 Tim Niemueller [www.niemueller.de]
7  *
8  ****************************************************************************/
9 
10 /* This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU Library General Public License for more details.
19  *
20  * Read the full text in the LICENSE.GPL file in the doc directory.
21  */
22 
23 #ifndef __TOOLS_LASERGUI_LASER_DRAWING_AREA_H_
24 #define __TOOLS_LASERGUI_LASER_DRAWING_AREA_H_
25 
26 #include <gtkmm.h>
27 #include <list>
28 #include <interfaces/Position2DTrackInterface.h>
29 #include <interfaces/SwitchInterface.h>
30 
31 namespace fawkes {
32  class Laser360Interface;
33  class Laser720Interface;
34  class ObjectPositionInterface;
35  class CairoRobotDrawer;
36  class LegtrackerTrackinterface;
37  class SwitchInterface;
38  class VisualDisplay2DInterface;
39 }
40 
41 class VisualDisplay2D;
42 
44  : public Gtk::DrawingArea
45 {
46  public:
47  /** Draw modes. */
48  typedef enum {
49  MODE_LINES, /**< Draw beams as lines */
50  MODE_POINTS, /**< Only draw beam end points */
51  MODE_HULL /**< Draw hull of beams */
52  } draw_mode_t;
53 
55  LaserDrawingArea(BaseObjectType* cobject,
56  const Glib::RefPtr<Gtk::Builder> &builder);
58 
59  void set_laser_ifs(const std::list<fawkes::Interface*>& laser_if);
60  void reset_laser_ifs();
61  void set_objpos_if(std::list<fawkes::ObjectPositionInterface*>* l_objpos_if_persons,
62  std::list<fawkes::ObjectPositionInterface*>* l_objpos_if_legs,
63  std::list<fawkes::ObjectPositionInterface*>* l_objpos_if_misc,
64  fawkes::Laser720Interface* laser_segmentation_if,
65  std::list<fawkes::Position2DTrackInterface*>* l_track_if,
67  fawkes::SwitchInterface* switch_if);
70  void set_robot_drawer(fawkes::CairoRobotDrawer *robot_drawer);
71  void set_resolution(unsigned int resolution);
72 
73  void zoom_in();
74  void zoom_out();
75 
76  void set_rotation(float rot_rad);
77  void set_draw_mode(draw_mode_t mode);
78  void set_connected(bool connected);
79 
80  void toggle_break_drawing();
81 
82  protected:
83 #if GTK_VERSION_GE(3,0)
84  virtual bool on_draw(const Cairo::RefPtr<Cairo::Context> &cr);
85 #else
86  virtual bool on_expose_event(GdkEventExpose *event);
87 #endif
88  virtual bool on_scroll_event(GdkEventScroll *event);
89  virtual bool on_motion_notify_event(GdkEventMotion *event);
90  virtual bool on_button_press_event(GdkEventButton *event);
91 
92  void draw_beams(const fawkes::Interface* itf,
93  Glib::RefPtr<Gdk::Window> &window,
94  const Cairo::RefPtr<Cairo::Context> &cr);
95  void draw_segments(const fawkes::Interface* itf,
96  Glib::RefPtr<Gdk::Window> &window,
97  const Cairo::RefPtr<Cairo::Context> &cr);
98  void draw_scalebox(Glib::RefPtr<Gdk::Window> &window,
99  const Cairo::RefPtr<Cairo::Context> &cr);
100  void draw_persons_legs(Glib::RefPtr<Gdk::Window> &window,
101  const Cairo::RefPtr<Cairo::Context> &cr);
102  std::pair<float,float> transform_coords_from_fawkes(float p_x, float p_y);
103 
104 
105  private:
106  /// @cond INTERNALS
107  struct Color {
108  unsigned char r;
109  unsigned char g;
110  unsigned char b;
111  };
112  /// @endcond
113  typedef std::pair<fawkes::Interface*, Color> InterfaceColorPair;
114  typedef std::list<InterfaceColorPair> InterfaceColorPairList;
115 
116  bool all_laser_ifs_have_writer() const;
117 
118  InterfaceColorPairList __laser_ifs;
119  fawkes::Laser720Interface *__laser_segmentation_if;
120  fawkes::SwitchInterface *__switch_if;
121  fawkes::ObjectPositionInterface *__target_if;
122 
124 
125  std::list<fawkes::ObjectPositionInterface*>* __l_objpos_if_persons;
126  std::list<fawkes::ObjectPositionInterface*>* __l_objpos_if_legs;
127  std::list<fawkes::ObjectPositionInterface*>* __l_objpos_if_misc;
128  std::list<fawkes::Position2DTrackInterface*>* __l_track_if;
129 
130  bool __connected;
131  draw_mode_t __draw_mode;
132 
133  float __zoom_factor;
134  unsigned int __resolution;
135  float __rotation;
136  bool __break_drawing;
137  bool __first_draw;
138  double __last_mouse_x;
139  double __last_mouse_y;
140  double __xc;
141  double __yc;
142 
143  fawkes::CairoRobotDrawer *__robot_drawer;
144 
145  VisualDisplay2D *__visdisp;
146  fawkes::VisualDisplay2DInterface *__visdisp_if;
147 };
148 
149 #endif