Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+185
@@ -0,0 +1,185 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* The AlarmToMap class handles the transfer from MainStructureElement-DDS-Data to a representation on the map
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
* Created by Norbert Thoden, NLSE, 2018-06-26
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "alarm_to_map.h"
|
||||
#include <Map/object_factory.h>
|
||||
|
||||
#include <PluginInterfaces/gui_plugin_interface.h>
|
||||
|
||||
// Qt
|
||||
#include <QPainter>
|
||||
|
||||
#include <sstream>
|
||||
|
||||
using namespace SituationMap;
|
||||
|
||||
|
||||
QImage renderEmergencyCallSymbol()
|
||||
{
|
||||
int size = 200;
|
||||
QImage image(size, size, QImage::Format_ARGB32);
|
||||
image.fill(Qt::transparent);
|
||||
|
||||
QPainter painter(&image);
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
QPen pen(Qt::white);
|
||||
pen.setWidth(10);
|
||||
painter.setPen(pen);
|
||||
|
||||
painter.setBrush(QBrush(Qt::red));
|
||||
painter.drawEllipse(QPointF(image.rect().center()),
|
||||
image.rect().width() * 0.45,
|
||||
image.rect().height() * 0.45);
|
||||
|
||||
painter.setPen(QPen(Qt::white));
|
||||
|
||||
QFont font = painter.font();
|
||||
font.setBold(true);
|
||||
font.setPixelSize(75);
|
||||
painter.setFont(font);
|
||||
|
||||
QPointF pos(image.width() * 0.125,
|
||||
image.height() * 0.625);
|
||||
|
||||
painter.drawText(pos, QLatin1String("SOS"));
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool AlarmToMap::init(PluginProvider *pluginProvider)
|
||||
{
|
||||
if (!pluginProvider)
|
||||
return false;
|
||||
|
||||
m_pluginProvider = pluginProvider;
|
||||
|
||||
DEBUG_LOG(m_logger) << LOGFUNCTION << " exerciseId=" << m_pluginProvider->exerciseId();
|
||||
|
||||
m_almDtc = m_pluginProvider->almDtc();
|
||||
|
||||
// FilterManagement:
|
||||
FilterClass::init(m_pluginProvider);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool AlarmToMap::run()
|
||||
{
|
||||
DEBUG_LOG(m_logger) << "Starting to run";
|
||||
|
||||
this->stop();
|
||||
|
||||
if (m_almDtc)
|
||||
{
|
||||
connect(m_almDtc.get(), &AlarmManagement::Interface::Dtc::notificationChanged,
|
||||
this, &AlarmToMap::handleChanged, Qt::UniqueConnection);
|
||||
|
||||
// get:
|
||||
m_almDtc->notifications([this](const AlarmManagement::Notification & data)
|
||||
{
|
||||
handleChanged(data, DataModification::eAdded);
|
||||
});
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void AlarmToMap::stop()
|
||||
{
|
||||
DEBUG_LOG(m_logger) << LOGFUNCTION << "Stopping";
|
||||
if (m_almDtc)
|
||||
m_almDtc->disconnect(this);
|
||||
}
|
||||
|
||||
/*
|
||||
bool AlarmToMap::unifiedMapObjectData(UniqueMapId uniqueMapId, UnifiedMapObjectData &umodOut) const
|
||||
{
|
||||
if (!m_almDtc)
|
||||
return false;
|
||||
|
||||
int32_t simIdOut = -1;
|
||||
if (!this->uniqueMapId2SimId(uniqueMapId, simIdOut))
|
||||
return false;
|
||||
|
||||
umodOut = UnifiedMapObjectData();
|
||||
RefPointer<MAP_T> mapObj = this->getMapObjectOfUniqueMapId(uniqueMapId);
|
||||
if (mapObj.valid())
|
||||
umodOut.m_image = mapObj->previewImage();
|
||||
|
||||
const auto cb = [simIdOut, &umodOut](const AlarmManagement::Notification & data) -> bool
|
||||
{
|
||||
if (data.id() == simIdOut)
|
||||
{
|
||||
|
||||
umodOut.m_description1 = QString::fromStdString(data.name());
|
||||
umodOut.m_participantData.m_typeName = AlarmManagement::Notification::toString(data.structureElementTypeId());
|
||||
return true; // break loop
|
||||
}
|
||||
return false;
|
||||
};
|
||||
// sonst kann sich der compiler nicht zwischen bool und void entscheiden... !?
|
||||
std::function<bool(const AlarmManagement::Notification &data)> cb1 = cb;
|
||||
return m_almDtc->notification(cb1);
|
||||
}
|
||||
*/
|
||||
|
||||
bool AlarmToMap::isElapsed(const Sim2SituationMap::DDS_T &data) const
|
||||
{
|
||||
// true -> hide
|
||||
// false -> show
|
||||
|
||||
DEBUG_LOG(m_logger) << " isElapsed";
|
||||
|
||||
// if (data.isDeleted())
|
||||
// return true;
|
||||
|
||||
if (data.eventType().underlying() != ProjectDataManagement::EventType_def::EmergencyCall)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int32_t AlarmToMap::getSimId(const Sim2SituationMap::DDS_T &ddsData) const
|
||||
{
|
||||
return ddsData.id();
|
||||
}
|
||||
|
||||
bool AlarmToMap::updateElementImpl(const Sim2SituationMap::DDS_T &ddsData, RefPointer<Sim2SituationMap::MAP_T> mapObj)
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION
|
||||
<< ", id " << ddsData.id();
|
||||
|
||||
mapObj->setPickable(false);
|
||||
mapObj->setDrawOrder(-1);
|
||||
|
||||
// Identifier:
|
||||
mapObj->setIdentifier(QStringLiteral("SOS_%1").arg(ddsData.equipmentNumber()));
|
||||
|
||||
TextStyle textStyle;
|
||||
textStyle.setSize(20);
|
||||
textStyle.setTextColor(Qt::red);
|
||||
textStyle.setTextOutlineColor(Qt::white);
|
||||
textStyle.setTextOutlineWidth(5);
|
||||
mapObj->setTextStyle(textStyle);
|
||||
|
||||
// Position:
|
||||
const Core::GeoPosition &geoPos = ddsData.position();
|
||||
mapObj->setOrigin(Point3D(geoPos.lon(), geoPos.lat(), geoPos.z()));
|
||||
|
||||
// Appearance:
|
||||
mapObj->setProxyImage(renderEmergencyCallSymbol(), QSize(50, 50));
|
||||
|
||||
emit alarmUpdated(mapObj->identifier(), Point3D(geoPos.lon(), geoPos.lat(), geoPos.z())); // equipmentNumber contains issi
|
||||
|
||||
return true;
|
||||
}
|
||||
Reference in new issue
Block a user