Fawkes API  Fawkes Development Version
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 <interfaces/Position2DTrackInterface.h>
27 #include <interfaces/SwitchInterface.h>
28 
29 #include <gtkmm.h>
30 #include <list>
31 
32 namespace fawkes {
33 class Laser360Interface;
34 class Laser720Interface;
35 class Laser1080Interface;
36 class ObjectPositionInterface;
37 class CairoRobotDrawer;
38 class LegtrackerTrackinterface;
39 class SwitchInterface;
40 class VisualDisplay2DInterface;
41 } // namespace fawkes
42 
43 class VisualDisplay2D;
44 
45 class LaserDrawingArea : public Gtk::DrawingArea
46 {
47 public:
48  /** Draw modes. */
49  typedef enum {
50  MODE_LINES, /**< Draw beams as lines */
51  MODE_POINTS, /**< Only draw beam end points */
52  MODE_HULL /**< Draw hull of beams */
54 
56  LaserDrawingArea(BaseObjectType *cobject, 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, const Cairo::RefPtr<Cairo::Context> &cr);
99  void draw_persons_legs(Glib::RefPtr<Gdk::Window> & window,
100  const Cairo::RefPtr<Cairo::Context> &cr);
101  std::pair<float, float> transform_coords_from_fawkes(float p_x, float p_y);
102 
103 private:
104  /// @cond INTERNALS
105  struct Color
106  {
107  unsigned char r;
108  unsigned char g;
109  unsigned char b;
110  };
111  /// @endcond
112  typedef std::pair<fawkes::Interface *, Color> InterfaceColorPair;
113  typedef std::list<InterfaceColorPair> InterfaceColorPairList;
114 
115  bool all_laser_ifs_have_writer() const;
116 
117  InterfaceColorPairList laser_ifs_;
118  fawkes::Laser720Interface * laser_segmentation_if_;
119  fawkes::SwitchInterface * switch_if_;
121 
123 
124  std::list<fawkes::ObjectPositionInterface *> * l_objpos_if_persons_;
125  std::list<fawkes::ObjectPositionInterface *> * l_objpos_if_legs_;
126  std::list<fawkes::ObjectPositionInterface *> * l_objpos_if_misc_;
127  std::list<fawkes::Position2DTrackInterface *> *l_track_if_;
128 
129  bool connected_;
130  draw_mode_t draw_mode_;
131 
132  float zoom_factor_;
133  unsigned int resolution_;
134  float rotation_;
135  bool break_drawing_;
136  bool first_draw_;
137  double last_mouse_x_;
138  double last_mouse_y_;
139  double xc_;
140  double yc_;
141 
142  fawkes::CairoRobotDrawer *robot_drawer_;
143 
144  VisualDisplay2D * visdisp_;
146 };
147 
148 #endif
LaserDrawingArea::LaserDrawingArea
LaserDrawingArea()
Constructor.
Definition: laser_drawing_area.cpp:93
LaserDrawingArea::transform_coords_from_fawkes
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.
Definition: laser_drawing_area.cpp:1065
LaserDrawingArea::on_expose_event
virtual bool on_expose_event(GdkEventExpose *event)
Expose event handler.
Definition: laser_drawing_area.cpp:342
LaserDrawingArea::zoom_in
void zoom_in()
Zoom in.
Definition: laser_drawing_area.cpp:286
LaserDrawingArea::~LaserDrawingArea
~LaserDrawingArea()
Destructor.
Definition: laser_drawing_area.cpp:125
fawkes::SwitchInterface
SwitchInterface Fawkes BlackBoard Interface.
Definition: SwitchInterface.h:34
LaserDrawingArea::set_laser_ifs
void set_laser_ifs(const std::list< fawkes::Interface * > &laser_if)
Set new laser interfaces.
Definition: laser_drawing_area.cpp:191
LaserDrawingArea::set_resolution
void set_resolution(unsigned int resolution)
Set resolution.
Definition: laser_drawing_area.cpp:267
LaserDrawingArea::set_connected
void set_connected(bool connected)
Set connection status.
Definition: laser_drawing_area.cpp:161
VisualDisplay2D
2D visualization processor for VisualDisplay2DInterface.
Definition: visdisplay.h:33
LaserDrawingArea::MODE_POINTS
@ MODE_POINTS
Only draw beam end points.
Definition: laser_drawing_area.h:51
LaserDrawingArea::MODE_HULL
@ MODE_HULL
Draw hull of beams.
Definition: laser_drawing_area.h:52
fawkes::VisualDisplay2DInterface
VisualDisplay2DInterface Fawkes BlackBoard Interface.
Definition: VisualDisplay2DInterface.h:34
LaserDrawingArea::draw_mode_t
draw_mode_t
Draw modes.
Definition: laser_drawing_area.h:49
LaserDrawingArea::set_rotation
void set_rotation(float rot_rad)
Set rotation.
Definition: laser_drawing_area.cpp:310
LaserDrawingArea::set_line_if
void set_line_if(fawkes::ObjectPositionInterface *line_if)
Set line interface.
Definition: laser_drawing_area.cpp:238
fawkes::CairoRobotDrawer
Robot drawing interface.
Definition: drawer.h:35
LaserDrawingArea::zoom_out
void zoom_out()
Zoom out.
Definition: laser_drawing_area.cpp:296
LaserDrawingArea::set_robot_drawer
void set_robot_drawer(fawkes::CairoRobotDrawer *robot_drawer)
Set robot drawer.
Definition: laser_drawing_area.cpp:257
fawkes
Fawkes library namespace.
LaserDrawingArea::set_visdisp_if
void set_visdisp_if(fawkes::VisualDisplay2DInterface *visdisp_if)
Set visual display interface.
Definition: laser_drawing_area.cpp:247
LaserDrawingArea::draw_persons_legs
void draw_persons_legs(Glib::RefPtr< Gdk::Window > &window, const Cairo::RefPtr< Cairo::Context > &cr)
Draw person legs.
Definition: laser_drawing_area.cpp:611
LaserDrawingArea::set_objpos_if
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.
Definition: laser_drawing_area.cpp:140
LaserDrawingArea::on_scroll_event
virtual bool on_scroll_event(GdkEventScroll *event)
Scroll event handler.
Definition: laser_drawing_area.cpp:998
LaserDrawingArea::toggle_break_drawing
void toggle_break_drawing()
Set a member for breaking the drawing.
Definition: laser_drawing_area.cpp:1010
fawkes::Interface
Base class for all Fawkes BlackBoard interfaces.
Definition: interface.h:79
LaserDrawingArea
Laser drawing area.
Definition: laser_drawing_area.h:46
LaserDrawingArea::draw_segments
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.
Definition: laser_drawing_area.cpp:918
LaserDrawingArea::set_draw_mode
void set_draw_mode(draw_mode_t mode)
Set the drawing mode.
Definition: laser_drawing_area.cpp:276
LaserDrawingArea::MODE_LINES
@ MODE_LINES
Draw beams as lines.
Definition: laser_drawing_area.h:50
LaserDrawingArea::on_button_press_event
virtual bool on_button_press_event(GdkEventButton *event)
Button press event handler.
Definition: laser_drawing_area.cpp:1020
fawkes::Laser720Interface
Laser720Interface Fawkes BlackBoard Interface.
Definition: Laser720Interface.h:34
LaserDrawingArea::reset_laser_ifs
void reset_laser_ifs()
Reset laser interfaces to "no laser available".
Definition: laser_drawing_area.cpp:213
LaserDrawingArea::draw_beams
void draw_beams(const fawkes::Interface *itf, Glib::RefPtr< Gdk::Window > &window, const Cairo::RefPtr< Cairo::Context > &cr)
Draw Beams of an interface.
Definition: laser_drawing_area.cpp:521
LaserDrawingArea::on_motion_notify_event
virtual bool on_motion_notify_event(GdkEventMotion *event)
Mouse motion notify event handler.
Definition: laser_drawing_area.cpp:1044
LaserDrawingArea::draw_scalebox
void draw_scalebox(Glib::RefPtr< Gdk::Window > &window, const Cairo::RefPtr< Cairo::Context > &cr)
Draw scale box.
Definition: laser_drawing_area.cpp:503
fawkes::ObjectPositionInterface
ObjectPositionInterface Fawkes BlackBoard Interface.
Definition: ObjectPositionInterface.h:34