6#include <QRandomGenerator>
13 : QWidget(parent), m_WaitingForData(true),
14 m_WaitingForDataTimer(new QTimer(this)), m_LoaderAngle(0),
15 m_LoaderSize(100), m_LoaderSpeed(180.0f), m_LoaderSpan(270.0f),
16 m_LoaderThickness(8), m_StartX{}, m_StartY{}, m_Size{},
17 m_ActiveAgentId{}, m_TimeStamp{}
19 setObjectName(
"MapViewer");
23 float deltaTimeSeconds =
24 static_cast<float>(elapsedMilliseconds) / 1000.0f;
30 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
40 QPainter painter(
this);
48 if (!mapData.isEmpty()) {
52 QPixmap pixmap(pixmapResolution, pixmapResolution);
53 pixmap.loadFromData(mapData);
74 if (event->button() != Qt::LeftButton) {
79 int x =
static_cast<int>(
event->position().x());
80 int y =
static_cast<int>(
event->position().y());
88 float xRel{
static_cast<float>(x -
m_StartX) };
89 float yRel{
static_cast<float>(y -
m_StartY) };
91 float size{
static_cast<float>(
95 xRel = xRel * size /
static_cast<float>(
m_Size);
96 yRel = yRel * size /
static_cast<float>(
m_Size);
111 int maxWidth = width();
112 int maxHeight = height();
114 m_Size = std::min(maxWidth, maxHeight);
115 int marginX = maxWidth -
m_Size;
116 int marginY = maxHeight -
m_Size;
127 setCursor(Qt::WaitCursor);
136 setCursor(Qt::ArrowCursor);
152 int x{
static_cast<int>(
153 keyframePositionAsymmetric.X / scenarioSize *
m_Size +
154 m_StartX -
static_cast<float>(radius) / 2.0f) };
155 int y{
static_cast<int>(
156 keyframePositionAsymmetric.Y / scenarioSize *
m_Size +
157 m_StartY -
static_cast<float>(radius) / 2.0f) };
161 return agent.Id == keyframe.AgentId;
163 QColor color(Qt::magenta);
165 color = QColor(QString::fromStdString(agent->
Color));
168 painter.setPen(Qt::black);
169 painter.setBrush({ color });
170 painter.drawEllipse(x, y, radius, radius);
177 QPen pen(Qt::red, 2);
179 painter.setRenderHint(QPainter::Antialiasing);
182 int agentId = iter->first;
183 auto route = iter->second;
184 for (
int j = 0; j < route.size(); j++) {
185 for (
int k = 0; k < route[j].size() - 1; k++) {
193 int x1{
static_cast<int>(
197 int y1{
static_cast<int>(
201 int x2{
static_cast<int>(
205 int y2{
static_cast<int>(
212 return agent.Id == agentId;
214 QColor color(Qt::magenta);
216 color = QColor(QString::fromStdString(agent->
Color));
219 painter.setPen({ color, 2 });
220 painter.drawLine(x1, y1, x2, y2);
229 QColor hivemindOrange(227, 118, 39);
233 painter.setRenderHint(QPainter::Antialiasing);
244 painter.drawArc(rectangle, startAngle, spanAngle);
249 std::pair<CompileScenario::Scenario::RouteMap::iterator,
250 CompileScenario::Scenario::RouteMap::iterator>
259 std::vector<Core::Agent>::iterator>
static Core::CartesianCoordinate SymmetricToAsymmetric(Core::CartesianCoordinate symmetric)
Function used to convert a coordinate in a symmetric coordinate system to a coordinate in an asymmetr...
static Core::CartesianCoordinate AsymmetricToSymmetric(Core::CartesianCoordinate asymmetric)
Function used to convert a coordinate in an asymmetric cooridnate system to a coordinate in a symmetr...
void UpdateRoutes(std::pair< CompileScenario::Scenario::RouteMap::iterator, CompileScenario::Scenario::RouteMap::iterator > routes)
void DrawLoader(QPainter &painter) const
std::pair< CompileScenario::Scenario::RouteMap::iterator, CompileScenario::Scenario::RouteMap::iterator > m_Routes
MapViewer(QWidget *parent=nullptr)
void resizeEvent(QResizeEvent *event) override
void UpdateRenderingArea()
void UpdateAgents(std::pair< std::vector< Core::Agent >::iterator, std::vector< Core::Agent >::iterator > agents)
void DrawKeyframes(QPainter &painter)
QTimer * m_WaitingForDataTimer
void DrawRoutes(QPainter &painter)
QElapsedTimer m_WaitingForDataElapsedTimer
std::pair< std::vector< Core::Agent >::iterator, std::vector< Core::Agent >::iterator > m_Agents
void mousePressEvent(QMouseEvent *event) override
void paintEvent(QPaintEvent *event) override
static KeyframeManager & Instance()
Returns the singleton instance of the KeyframeManager.
std::vector< Core::Keyframe > & GetKeyframes()
Returns a reference to the list of keyframes.
void AddKeyframe(int agentId, float timeStamp, float x, float y, float z)
Adds a keyframe to the keyframe list using x, y, and z coordinates.
static int GetImageResolution()
static QByteArray & GetData()
Returns the map data as a byte array.
A structure that represents a cartesian coordinate.
A structure representing an agent's position in cartesian space at a given point in time.