Project

General

Profile

Statistics
| Branch: | Revision:

robobuggy / turtlesim_ref / include / turtlesim / turtle_frame.h @ dd5d7f53

History | View | Annotate | Download (3.21 KB)

1
/*
2
 * Copyright (c) 2009, Willow Garage, Inc.
3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions are met:
7
 *
8
 *     * Redistributions of source code must retain the above copyright
9
 *       notice, this list of conditions and the following disclaimer.
10
 *     * Redistributions in binary form must reproduce the above copyright
11
 *       notice, this list of conditions and the following disclaimer in the
12
 *       documentation and/or other materials provided with the distribution.
13
 *     * Neither the name of the Willow Garage, Inc. nor the names of its
14
 *       contributors may be used to endorse or promote products derived from
15
 *       this software without specific prior written permission.
16
 *
17
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
 * POSSIBILITY OF SUCH DAMAGE.
28
 */
29

    
30
#include <QFrame>
31
#include <QImage>
32
#include <QPainter>
33
#include <QPaintEvent>
34
#include <QTimer>
35
#include <QVector>
36

    
37
// This prevents a MOC error with versions of boost >= 1.48
38
#ifndef Q_MOC_RUN  // See: https://bugreports.qt-project.org/browse/QTBUG-22829
39
# include <ros/ros.h>
40

    
41
# include <std_srvs/Empty.h>
42
# include <turtlesim_ref/Spawn.h>
43
# include <turtlesim_ref/Kill.h>
44
# include <map>
45

    
46
# include "turtle.h"
47
#endif
48

    
49
namespace turtlesim_ref
50
{
51

    
52
class TurtleFrame : public QFrame
53
{
54
  Q_OBJECT
55
public:
56
  TurtleFrame(QWidget* parent = 0, Qt::WindowFlags f = 0);
57
  ~TurtleFrame();
58

    
59
  std::string spawnTurtle(const std::string& name, float x, float y, float angle);
60

    
61
protected:
62
  void paintEvent(QPaintEvent* event);
63

    
64
private slots:
65
  void onUpdate();
66

    
67
private:
68
  void updateTurtles();
69
  void clear();
70
  bool hasTurtle(const std::string& name);
71

    
72
  bool clearCallback(std_srvs::Empty::Request&, std_srvs::Empty::Response&);
73
  bool resetCallback(std_srvs::Empty::Request&, std_srvs::Empty::Response&);
74
  bool spawnCallback(turtlesim_ref::Spawn::Request&, turtlesim_ref::Spawn::Response&);
75
  bool killCallback(turtlesim_ref::Kill::Request&, turtlesim_ref::Kill::Response&);
76

    
77
  ros::NodeHandle nh_;
78
  QTimer* update_timer_;
79
  QImage path_image_;
80
  QPainter path_painter_;
81

    
82
  uint64_t frame_count_;
83

    
84
  ros::WallTime last_turtle_update_;
85

    
86
  ros::ServiceServer clear_srv_;
87
  ros::ServiceServer reset_srv_;
88
  ros::ServiceServer spawn_srv_;
89
  ros::ServiceServer kill_srv_;
90

    
91
  typedef std::map<std::string, TurtlePtr> M_Turtle;
92
  M_Turtle turtles_;
93
  uint32_t id_counter_;
94

    
95
  QVector<QImage> turtle_images_;
96

    
97
  float meter_;
98
  float width_in_meters_;
99
  float height_in_meters_;
100
};
101

    
102
}