4 * Draw and move a robot on the playground.
6 * Copyright: (c) 2007 CTU Dragons
7 * CTU FEE - Department of Control Engineering
8 * Authors: Martin Zidek, Michal Sojka, Tran Duy Khanh
15 #include "PlaygroundScene.h"
18 #include <actuators.h>
21 Robot::Robot(const QString &text, const QPen &pen, const QBrush &brush) :
22 QObject(), QGraphicsItem()
36 QRectF Robot::boundingRect() const
38 return QRectF(0, -ROBOT_VIDLE_LENGTH_M*1000,
39 ROBOT_WIDTH_MM, ROBOT_AXIS_TO_BACK_MM + ROBOT_AXIS_TO_FRONT_MM + ROBOT_VIDLE_LENGTH_M*1000);
42 void Robot::paint(QPainter *painter,
43 const QStyleOptionGraphicsItem *option, QWidget *widget)
50 painter->setBrush(brush);
51 painter->drawRect(QRectF(0, 0, ROBOT_WIDTH_MM,
52 ROBOT_AXIS_TO_BACK_MM + ROBOT_AXIS_TO_FRONT_MM));
53 const float xa = ROBOT_WIDTH_MM/2.0;
54 const float ya = ROBOT_AXIS_TO_BACK_MM;
55 const float yb = ROBOT_AXIS_TO_BACK_MM + ROBOT_AXIS_TO_FRONT_MM*0.8;
56 const float yc = ROBOT_AXIS_TO_BACK_MM + ROBOT_AXIS_TO_FRONT_MM*0.4;
57 const float xd = ROBOT_WIDTH_MM/4.0;
59 QLineF(xa, ya, xa, yb),
60 QLineF(xa, yb, xa-xd, yc),
61 QLineF(xa, yb, xa+xd, yc)};
62 painter->drawLines(arrow, 3);
64 const float vidle_angle = (float)(vidle - VIDLE_DOWN)/(VIDLE_UP-VIDLE_DOWN)*M_PI/2.0;
65 const float y = -ROBOT_VIDLE_LENGTH_M*1000*cos(vidle_angle);
67 QLineF(0*ROBOT_WIDTH_MM/3, 0, 0*ROBOT_WIDTH_MM/3, y),
68 QLineF(1*ROBOT_WIDTH_MM/3, 0, 1*ROBOT_WIDTH_MM/3, y),
69 QLineF(2*ROBOT_WIDTH_MM/3, 0, 2*ROBOT_WIDTH_MM/3, y),
70 QLineF(3*ROBOT_WIDTH_MM/3, 0, 3*ROBOT_WIDTH_MM/3, y)};
71 painter->drawLines(vidle, 4);
74 painter->setFont(QFont("Arial", 40, 0, 0));
77 painter->setTransform(mirror, true);
78 painter->drawText(QRect(0, 0, ROBOT_WIDTH_MM, -ROBOT_AXIS_TO_BACK_MM),
79 Qt::AlignCenter, text);
82 void Robot::moveRobot(double x, double y, double phi)
86 pos = PlaygroundScene::world2scene(pos);
89 setTransform(QTransform().rotateRadians(phi-M_PI/2.0).translate(-ROBOT_WIDTH_MM/2.0, -ROBOT_AXIS_TO_BACK_MM));
92 void Robot::mySetVisible(bool show)
97 void Robot::setVidle(int value)
99 QRectF r = boundingRect();