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
void draw_scalebox(Glib::RefPtr< Gdk::Window > &window, const Cairo::RefPtr< Cairo::Context > &cr)
Draw scale box.
Only draw beam end points.
virtual bool on_expose_event(GdkEventExpose *event)
Expose event handler.
void reset_laser_ifs()
Reset laser interfaces to &quot;no laser available&quot;.
Laser drawing area.
ObjectPositionInterface Fawkes BlackBoard Interface.
2D visualization processor for VisualDisplay2DInterface.
Definition: visdisplay.h:32
void set_robot_drawer(fawkes::CairoRobotDrawer *robot_drawer)
Set robot drawer.
draw_mode_t
Draw modes.
std::pair< float, float > transform_coords_from_fawkes(float p_x, float p_y)
Transform a position from the fawkes coordinate system to the Cairo coordinate system.
void zoom_in()
Zoom in.
void set_visdisp_if(fawkes::VisualDisplay2DInterface *visdisp_if)
Set visual display interface.
void set_objpos_if(std::list< fawkes::ObjectPositionInterface * > *l_objpos_if_persons, std::list< fawkes::ObjectPositionInterface * > *l_objpos_if_legs, std::list< fawkes::ObjectPositionInterface * > *l_objpos_if_misc, fawkes::Laser720Interface *laser_segmentation_if, std::list< fawkes::Position2DTrackInterface * > *l_track_if, fawkes::ObjectPositionInterface *target_if, fawkes::SwitchInterface *switch_if)
Set ObjectPosition interfaces.
Base class for all Fawkes BlackBoard interfaces.
Definition: interface.h:80
Robot drawing interface.
Definition: drawer.h:34
void set_line_if(fawkes::ObjectPositionInterface *line_if)
Set line interface.
virtual bool on_scroll_event(GdkEventScroll *event)
Scroll event handler.
void toggle_break_drawing()
Set a member for breaking the drawing.
void set_draw_mode(draw_mode_t mode)
Set the drawing mode.
~LaserDrawingArea()
Destructor.
SwitchInterface Fawkes BlackBoard Interface.
void set_resolution(unsigned int resolution)
Set resolution.
void set_laser_ifs(const std::list< fawkes::Interface * > &laser_if)
Set new laser interfaces.
void set_rotation(float rot_rad)
Set rotation.
void draw_beams(const fawkes::Interface *itf, Glib::RefPtr< Gdk::Window > &window, const Cairo::RefPtr< Cairo::Context > &cr)
Draw Beams of an interface.
void zoom_out()
Zoom out.
virtual bool on_button_press_event(GdkEventButton *event)
Button press event handler.
void draw_segments(const fawkes::Interface *itf, Glib::RefPtr< Gdk::Window > &window, const Cairo::RefPtr< Cairo::Context > &cr)
Draw laser segments as produced by leg tracker application.
void draw_persons_legs(Glib::RefPtr< Gdk::Window > &window, const Cairo::RefPtr< Cairo::Context > &cr)
Draw person legs.
VisualDisplay2DInterface Fawkes BlackBoard Interface.
virtual bool on_motion_notify_event(GdkEventMotion *event)
Mouse motion notify event handler.
void set_connected(bool connected)
Set connection status.
Laser720Interface Fawkes BlackBoard Interface.
LaserDrawingArea()
Constructor.