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
32namespace fawkes {
33class Laser360Interface;
34class Laser720Interface;
35class Laser1080Interface;
36class ObjectPositionInterface;
37class CairoRobotDrawer;
38class LegtrackerTrackinterface;
39class SwitchInterface;
40class VisualDisplay2DInterface;
41} // namespace fawkes
42
43class VisualDisplay2D;
44
45class LaserDrawingArea : public Gtk::DrawingArea
46{
47public:
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);
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
81
82protected:
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
103private:
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
Laser drawing area.
void draw_scalebox(Glib::RefPtr< Gdk::Window > &window, const Cairo::RefPtr< Cairo::Context > &cr)
Draw scale box.
void draw_persons_legs(Glib::RefPtr< Gdk::Window > &window, const Cairo::RefPtr< Cairo::Context > &cr)
Draw person legs.
void set_robot_drawer(fawkes::CairoRobotDrawer *robot_drawer)
Set robot drawer.
@ MODE_HULL
Draw hull of beams.
@ MODE_POINTS
Only draw beam end points.
@ MODE_LINES
Draw beams as lines.
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 set_resolution(unsigned int resolution)
Set resolution.
LaserDrawingArea()
Constructor.
virtual bool on_motion_notify_event(GdkEventMotion *event)
Mouse motion notify event handler.
virtual bool on_button_press_event(GdkEventButton *event)
Button press event handler.
void set_rotation(float rot_rad)
Set rotation.
void set_visdisp_if(fawkes::VisualDisplay2DInterface *visdisp_if)
Set visual display interface.
void set_laser_ifs(const std::list< fawkes::Interface * > &laser_if)
Set new laser interfaces.
virtual bool on_scroll_event(GdkEventScroll *event)
Scroll event handler.
virtual bool on_expose_event(GdkEventExpose *event)
Expose event handler.
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.
void set_draw_mode(draw_mode_t mode)
Set the drawing mode.
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.
~LaserDrawingArea()
Destructor.
void zoom_in()
Zoom in.
void reset_laser_ifs()
Reset laser interfaces to "no laser available".
void toggle_break_drawing()
Set a member for breaking the drawing.
void draw_beams(const fawkes::Interface *itf, Glib::RefPtr< Gdk::Window > &window, const Cairo::RefPtr< Cairo::Context > &cr)
Draw Beams of an interface.
void set_connected(bool connected)
Set connection status.
void zoom_out()
Zoom out.
void set_line_if(fawkes::ObjectPositionInterface *line_if)
Set line interface.
2D visualization processor for VisualDisplay2DInterface.
Definition: visdisplay.h:33
Robot drawing interface.
Definition: drawer.h:35
Base class for all Fawkes BlackBoard interfaces.
Definition: interface.h:80
Laser720Interface Fawkes BlackBoard Interface.
ObjectPositionInterface Fawkes BlackBoard Interface.
SwitchInterface Fawkes BlackBoard Interface.
VisualDisplay2DInterface Fawkes BlackBoard Interface.
Fawkes library namespace.