Fawkes API  Fawkes Development Version
LaserDrawingArea Class Reference

Laser drawing area. More...

#include "laser_drawing_area.h"

Inheritance diagram for LaserDrawingArea:

Public Types

enum  draw_mode_t { MODE_LINES, MODE_POINTS, MODE_HULL }
 Draw modes. More...
 

Public Member Functions

 LaserDrawingArea ()
 Constructor. More...
 
 LaserDrawingArea (BaseObjectType *cobject, const Glib::RefPtr< Gtk::Builder > &builder)
 Constructor. More...
 
 ~LaserDrawingArea ()
 Destructor. More...
 
void set_laser_ifs (const std::list< fawkes::Interface *> &laser_if)
 Set new laser interfaces. More...
 
void reset_laser_ifs ()
 Reset laser interfaces to "no laser available". More...
 
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. More...
 
void set_line_if (fawkes::ObjectPositionInterface *line_if)
 Set line interface. More...
 
void set_visdisp_if (fawkes::VisualDisplay2DInterface *visdisp_if)
 Set visual display interface. More...
 
void set_robot_drawer (fawkes::CairoRobotDrawer *robot_drawer)
 Set robot drawer. More...
 
void set_resolution (unsigned int resolution)
 Set resolution. More...
 
void zoom_in ()
 Zoom in. More...
 
void zoom_out ()
 Zoom out. More...
 
void set_rotation (float rot_rad)
 Set rotation. More...
 
void set_draw_mode (draw_mode_t mode)
 Set the drawing mode. More...
 
void set_connected (bool connected)
 Set connection status. More...
 
void toggle_break_drawing ()
 Set a member for breaking the drawing. More...
 

Protected Member Functions

virtual bool on_expose_event (GdkEventExpose *event)
 Expose event handler. More...
 
virtual bool on_scroll_event (GdkEventScroll *event)
 Scroll event handler. More...
 
virtual bool on_motion_notify_event (GdkEventMotion *event)
 Mouse motion notify event handler. More...
 
virtual bool on_button_press_event (GdkEventButton *event)
 Button press event handler. More...
 
void draw_beams (const fawkes::Interface *itf, Glib::RefPtr< Gdk::Window > &window, const Cairo::RefPtr< Cairo::Context > &cr)
 Draw Beams of an interface. More...
 
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. More...
 
void draw_scalebox (Glib::RefPtr< Gdk::Window > &window, const Cairo::RefPtr< Cairo::Context > &cr)
 Draw scale box. More...
 
void draw_persons_legs (Glib::RefPtr< Gdk::Window > &window, const Cairo::RefPtr< Cairo::Context > &cr)
 Draw person legs. More...
 
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. More...
 

Detailed Description

Laser drawing area.

Derived version of Gtk::DrawingArea that renders values of a laser interface.

Author
Tim Niemueller

Definition at line 44 of file laser_drawing_area.h.

Member Enumeration Documentation

◆ draw_mode_t

Draw modes.

Enumerator
MODE_LINES 

Draw beams as lines.

MODE_POINTS 

Only draw beam end points.

MODE_HULL 

Draw hull of beams.

Definition at line 49 of file laser_drawing_area.h.

Constructor & Destructor Documentation

◆ LaserDrawingArea() [1/2]

LaserDrawingArea::LaserDrawingArea ( )

Constructor.

Definition at line 89 of file laser_drawing_area.cpp.

References MODE_LINES, on_button_press_event(), on_expose_event(), and on_motion_notify_event().

◆ LaserDrawingArea() [2/2]

LaserDrawingArea::LaserDrawingArea ( BaseObjectType *  cobject,
const Glib::RefPtr< Gtk::Builder > &  builder 
)

Constructor.

Special ctor to be used with Gtk::Builder's get_widget_derived().

Parameters
cobjectGtk C object
builderGtk Builder

Definition at line 53 of file laser_drawing_area.cpp.

References MODE_LINES, on_button_press_event(), on_expose_event(), and on_motion_notify_event().

◆ ~LaserDrawingArea()

LaserDrawingArea::~LaserDrawingArea ( )

Destructor.

Definition at line 120 of file laser_drawing_area.cpp.

Member Function Documentation

◆ draw_beams()

void LaserDrawingArea::draw_beams ( const fawkes::Interface itf,
Glib::RefPtr< Gdk::Window > &  window,
const Cairo::RefPtr< Cairo::Context > &  cr 
)
protected

Draw Beams of an interface.

Draws the beams as lines, circles or hull, depending on draw mode.

Parameters
itfeither Laser360Interface or Laser720Interface
windowGdk window
crCairo context to draw to. It is assumed that possible transformations have been setup before.

Definition at line 518 of file laser_drawing_area.cpp.

References fawkes::deg2rad(), fawkes::Laser720Interface::distances(), fawkes::Laser360Interface::distances(), fawkes::Laser1080Interface::distances(), draw_scalebox(), fawkes::Laser1080Interface::is_clockwise_angle(), fawkes::Laser720Interface::is_clockwise_angle(), fawkes::Laser360Interface::is_clockwise_angle(), fawkes::Laser1080Interface::maxlenof_distances(), fawkes::Laser360Interface::maxlenof_distances(), fawkes::Laser720Interface::maxlenof_distances(), MODE_LINES, MODE_POINTS, and fawkes::normalize_rad().

Referenced by on_expose_event().

◆ draw_persons_legs()

void LaserDrawingArea::draw_persons_legs ( Glib::RefPtr< Gdk::Window > &  window,
const Cairo::RefPtr< Cairo::Context > &  cr 
)
protected

Draw person legs.

Draws the legs of persons

Parameters
windowGdk window
crCairo context to draw to. It is assumed that possible transformations have been setup before.

Definition at line 608 of file laser_drawing_area.cpp.

References fawkes::Interface::has_writer(), fawkes::ObjectPositionInterface::is_valid(), fawkes::Interface::read(), fawkes::ObjectPositionInterface::relative_x(), fawkes::ObjectPositionInterface::relative_y(), and transform_coords_from_fawkes().

Referenced by on_expose_event().

◆ draw_scalebox()

void LaserDrawingArea::draw_scalebox ( Glib::RefPtr< Gdk::Window > &  window,
const Cairo::RefPtr< Cairo::Context > &  cr 
)
protected

Draw scale box.

Draws a circle with a radius of 1m around the robot.

Parameters
windowGdk window
crCairo context to draw to. It is assumed that possible transformations have been setup before.

Definition at line 499 of file laser_drawing_area.cpp.

Referenced by draw_beams().

◆ draw_segments()

void LaserDrawingArea::draw_segments ( const fawkes::Interface itf,
Glib::RefPtr< Gdk::Window > &  window,
const Cairo::RefPtr< Cairo::Context > &  cr 
)
protected

Draw laser segments as produced by leg tracker application.

Parameters
itfeither Laser360Interface or Laser720Interface
windowGdk window
crCairo context to draw to. It is assumed that possible transformations have been setup before.

Definition at line 903 of file laser_drawing_area.cpp.

References fawkes::deg2rad(), fawkes::Laser360Interface::distances(), fawkes::Laser1080Interface::distances(), fawkes::Laser720Interface::distances(), fawkes::Interface::has_writer(), fawkes::Laser720Interface::maxlenof_distances(), MODE_POINTS, and fawkes::Interface::read().

Referenced by on_expose_event().

◆ on_button_press_event()

bool LaserDrawingArea::on_button_press_event ( GdkEventButton *  event)
protectedvirtual

Button press event handler.

Parameters
eventevent data
Returns
true

Definition at line 1004 of file laser_drawing_area.cpp.

Referenced by LaserDrawingArea().

◆ on_expose_event()

◆ on_motion_notify_event()

bool LaserDrawingArea::on_motion_notify_event ( GdkEventMotion *  event)
protectedvirtual

Mouse motion notify event handler.

Parameters
eventevent data
Returns
true

Definition at line 1029 of file laser_drawing_area.cpp.

Referenced by LaserDrawingArea().

◆ on_scroll_event()

bool LaserDrawingArea::on_scroll_event ( GdkEventScroll *  event)
protectedvirtual

Scroll event handler.

Parameters
eventevent structure
Returns
signal return value

Definition at line 981 of file laser_drawing_area.cpp.

References zoom_in(), and zoom_out().

◆ reset_laser_ifs()

void LaserDrawingArea::reset_laser_ifs ( )

Reset laser interfaces to "no laser available".

Definition at line 210 of file laser_drawing_area.cpp.

◆ set_connected()

void LaserDrawingArea::set_connected ( bool  connected)

Set connection status.

Parameters
connectedtrue if connected, false otherwise

Definition at line 155 of file laser_drawing_area.cpp.

◆ set_draw_mode()

void LaserDrawingArea::set_draw_mode ( draw_mode_t  mode)

Set the drawing mode.

Parameters
modethe new drawing mode

Definition at line 276 of file laser_drawing_area.cpp.

Referenced by LaserGuiGtkWindow::LaserGuiGtkWindow(), and LaserGuiHildonWindow::LaserGuiHildonWindow().

◆ set_laser_ifs()

void LaserDrawingArea::set_laser_ifs ( const std::list< fawkes::Interface *> &  ifs)

Set new laser interfaces.

This is also the place where colors are determined the following way:

 1   000 ->   0   0   0
 2   001 -> 255   0   0
 3   010 ->   0 255   0
 4   011 -> 255 255   0
 5   100 ->   0   0 255
 6   101 -> 255   0 255
 7   110 -> 255 255   0
 8   000 ->   0   0   0
 9   001 -> 127   0   0
10   010 ->   0 127   0
11   011 -> 127 127   0
12   100 ->   0   0 127
13   101 -> 127   0 127
14   110 -> 127 127   0
...
Parameters
ifsThe interfaces of the lasers that should be visualized.

Definition at line 186 of file laser_drawing_area.cpp.

◆ set_line_if()

void LaserDrawingArea::set_line_if ( fawkes::ObjectPositionInterface line_if)

Set line interface.

Parameters
line_ifinterface to use for line data to draw.

Definition at line 235 of file laser_drawing_area.cpp.

◆ set_objpos_if()

void LaserDrawingArea::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.

Parameters
l_objpos_if_personslist of objectposition interfaces for persons
l_objpos_if_legslist of objectposition interfaces for legs
l_objpos_if_misclist of objectposition interfaces for miscellanous objects
laser_segmentation_ifLaser interface indicating the segmentation-borfers of the legtracker
l_track_iflist of track interfaces
target_ifthe current target
switch_ifused to indicate that a drawing-run is finish (so e.g. new data can be sent)

Definition at line 135 of file laser_drawing_area.cpp.

◆ set_resolution()

void LaserDrawingArea::set_resolution ( unsigned int  resolution)

Set resolution.

Every n'th beam will be drawn where n is the resolution.

Parameters
resolutionnew resolution

Definition at line 266 of file laser_drawing_area.cpp.

◆ set_robot_drawer()

void LaserDrawingArea::set_robot_drawer ( fawkes::CairoRobotDrawer robot_drawer)

Set robot drawer.

Parameters
robot_drawernew robot drawer to use

Definition at line 256 of file laser_drawing_area.cpp.

◆ set_rotation()

void LaserDrawingArea::set_rotation ( float  rot_rad)

Set rotation.

Parameters
rot_radrotation angle in rad

Definition at line 311 of file laser_drawing_area.cpp.

References fawkes::Interface::has_writer().

◆ set_visdisp_if()

void LaserDrawingArea::set_visdisp_if ( fawkes::VisualDisplay2DInterface visdisp_if)

Set visual display interface.

Parameters
visdisp_ifinterface to query for drawing ops

Definition at line 245 of file laser_drawing_area.cpp.

References VisualDisplay2D::set_interface().

◆ toggle_break_drawing()

void LaserDrawingArea::toggle_break_drawing ( )

Set a member for breaking the drawing.

Definition at line 993 of file laser_drawing_area.cpp.

◆ transform_coords_from_fawkes()

std::pair< float, float > LaserDrawingArea::transform_coords_from_fawkes ( float  p_x,
float  p_y 
)
protected

Transform a position from the fawkes coordinate system to the Cairo coordinate system.

Parameters
p_xinput x
p_yinput y
Returns
the transformed position

Definition at line 1052 of file laser_drawing_area.cpp.

Referenced by draw_persons_legs().

◆ zoom_in()

void LaserDrawingArea::zoom_in ( )

Zoom in.

Increases zoom factor by 20, no upper limit.

Definition at line 286 of file laser_drawing_area.cpp.

Referenced by LaserGuiGtkWindow::LaserGuiGtkWindow(), LaserGuiHildonWindow::LaserGuiHildonWindow(), and on_scroll_event().

◆ zoom_out()

void LaserDrawingArea::zoom_out ( )

Zoom out.

Decreases zoom factor by 20 with a minimum of 1.

Definition at line 296 of file laser_drawing_area.cpp.

Referenced by LaserGuiGtkWindow::LaserGuiGtkWindow(), LaserGuiHildonWindow::LaserGuiHildonWindow(), and on_scroll_event().


The documentation for this class was generated from the following files: