38 #define DEFAULT_BG_R 0x45
39 #define DEFAULT_BG_G 0x56
40 #define DEFAULT_BG_B 0xff
47 , path_image_(500, 500, QImage::Format_ARGB32)
48 , path_painter_(&path_image_)
53 setFixedSize(500, 500);
54 setWindowTitle(
"TurtleSim");
77 QVector<QString> turtles;
78 turtles.append(
"box-turtle.png");
79 turtles.append(
"robot-turtle.png");
80 turtles.append(
"sea-turtle.png");
81 turtles.append(
"diamondback.png");
82 turtles.append(
"electric.png");
83 turtles.append(
"fuerte.png");
84 turtles.append(
"groovy.png");
85 turtles.append(
"hydro.svg");
86 turtles.append(
"indigo.svg");
87 turtles.append(
"jade.png");
88 turtles.append(
"kinetic.png");
89 turtles.append(
"lunar.png");
90 turtles.append(
"melodic.png");
91 turtles.append(
"noetic.png");
94 for (
int i = 0; i < turtles.size(); ++i)
97 img.load(images_path + turtles[i]);
119 for(
int index = 0; index < turtles.size(); ++index)
121 QString name = turtles[index];
122 name = name.split(
".").first();
123 name.replace(QString(
"-"), QString(
""));
124 spawnTurtle(name.toStdString(), 1.0 + 1.5 * (index % 7), 1.0 + 1.5 * (index / 7),
PI / 2.0, index);
136 std::string name =
spawnTurtle(req.name, req.x, req.y, req.theta);
139 ROS_ERROR(
"A turtled named [%s] already exists", req.name.c_str());
150 M_Turtle::iterator it =
turtles_.find(req.name);
153 ROS_ERROR(
"Tried to kill turtle [%s], which does not exist", req.name.c_str());
175 std::string real_name = name;
176 if (real_name.empty())
180 std::stringstream ss;
182 real_name = ss.str();
197 ROS_INFO(
"Spawning turtle [%s] at x=[%f], y=[%f], theta=[%f]", real_name.c_str(), x, y, angle);
230 QPainter painter(
this);
234 M_Turtle::iterator it =
turtles_.begin();
235 M_Turtle::iterator end =
turtles_.end();
236 for (; it != end; ++it)
238 it->second->paint(painter);
250 bool modified =
false;
251 M_Turtle::iterator it =
turtles_.begin();
252 M_Turtle::iterator end =
turtles_.end();
253 for (; it != end; ++it)