Qt6 Migration: Complete migration with DDS/RTI support and build validation

Major Changes:
- Merged latest Qt5 devel content from dlbo (292 files changed, 7 new dirs)
- Consolidated forward-declarations and include folders
- Removed unneeded modules per Niklas' repo check list

Build System Fixes:
- Fixed CMake VERSION_GREATER syntax in ParticipantManagement/CMakeLists.txt
- Added VLC packages (libvlc-dev, vlc-plugin-base) to docker_build.sh
- Added PostgreSQL dev packages (libpq-dev, postgresql-server-dev-all) to Dockerfile
- Fixed locale warnings (ANSI_X3.4-1968 → C.UTF-8)
- Fixed ArcGIS SDK path warnings when BUILD_ARCGIS=OFF

Code Generation Fixes:
- Fixed IDL enum collisions (PortType→CorePortType/DdsutPortType, PdmEventType)
- Fixed Grantlee template svc_translation.cpp.grantlee:
  - Changed {{ idl_enum.name }}_def:: to {{ idl_enum.name }}::
  - Fixed .underlying() calls for C++11 scoped enums (enum class)
- Removed generated files from repo (moc_*, *_dtc.h, *_ftc.h)

Validation:
- BUILD_RTI=ON: SUCCESS
- BUILD_RTI=OFF: SUCCESS
- C++17 standard maintained for RTI 7.7 compatibility
- Ubuntu 26.04 Docker environment verified

Remaining Warnings (expected):
- BgViewer, KDChart, KDReports, Poppler-Qt6 not found (optional features)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
torstenandCopilot committed 2026-09-15 18:20:26 +00:00
1 parent f23384bb68
commit 7173785915
18662 files changed
+4115092 -5435

No files matched your search

@@ -0,0 +1,29 @@
#
# @RDE_HEADER@
# $Id$
# $HeadURL$
# $Author$
#
SET(UnitTestSources
polygons_unit_test.cpp
polygons_unit_test.h
)
SOURCE_GROUP( UnitTestSources FILES ${UnitTestSources} )
IF(BUILD_TESTING)
ADD_EXECUTABLE(aesUnitTestPolygons ${LinkedSources} ${UnitTestSources} )
TARGET_LINK_LIBRARIES(aesUnitTestPolygons
NGLLogger
nglcoreapplication
LtsCoordTrans
Qt5::Core
Qt5::Test
svcAesCommon
)
ADD_TEST(NAME aesUnitTestPolygons COMMAND $<TARGET_FILE:aesUnitTestTneAlgorithmen>)
ENDIF()
@@ -0,0 +1,308 @@
/**
* @RDE_HEADER@
* Unittest
* $Id$
* $HeadURL$
* $Author$
*/
#include "polygons_unit_test.h"
#include <Services/AreaEffectSimulation/Utils/polygons.h>
#include <nglapplication/nglcoreapplication.h>
#include <LtsCoordTrans/lts_coord_trans.h>
#include <QTransform>
#include <QTextStream> //
#include <QtTest/QTest>
#include <QDebug>
#include <iostream>
using namespace AreaEffectSimulation;
double distanceMeter(const LtsCoordTrans::UtmCoordinate utmCoord1, const LtsCoordTrans::UtmCoordinate &utmCoord2)
{
double dist = LtsCoordTrans::distance(utmCoord1, utmCoord2);
qCritical() << " dist" << dist;
return dist;
}
double distanceMeter(const QPointF &geoCoord1, const LtsCoordTrans::UtmCoordinate &utmCoord2)
{
const LtsCoordTrans::UtmCoordinate &utmCoord1 = LtsCoordTrans::UtmCoordinate::fromGeographic(geoCoord1);
double dist = LtsCoordTrans::distance(utmCoord1, utmCoord2);
qCritical() << " dist" << dist;
return dist;
}
void UnitTestPolygons::test_QTrans()
{
QPolygonF poly;
poly.reserve(3);
poly.append(QPointF(0, 0));
poly.append(QPointF(1, 0));
poly.append(QPointF(2, 0));
//rotate
{
QTransform trans;
trans.rotate(90);
QPolygonF poly2a = trans.map(poly);
qCritical() << "poly2a = " << poly2a;
QVERIFY2(poly2a.first() == QPointF(0, 0), "QTransform failed");
QVERIFY2(poly2a.last() == QPointF(0, 2), "QTransform failed; vec.last()");
}
{
QPolygonF poly2b = QTransform().rotate(90).map(poly); // squence in a single line
qCritical() << "poly2b = " << poly2b;
QVERIFY2(poly2b.first() == QPointF(0, 0), "QTransform failed");
QVERIFY2(poly2b.last() == QPointF(0, 2), "QTransform failed; vec.last()");
}
}
void printAbl(const Polygons::AreaBottomLeft &obj)
{
qCritical() << " AreaBottomLeft = "
<< ", cornerBL=" << obj.m_cornerBottomLeft
<< ", m_width=" << obj.m_width
<< ", m_height=" << obj.m_height
<< ", m_height=" << obj.m_height;
}
void UnitTestPolygons::test_explosionClusterAddTla()
{
double width = 1000; // x
double height = 100; // y
double rotation_deg = 0;
const Polygons::AreaBottomLeft boundaryOrg(QPointF(123, 123), width, height, rotation_deg);
printAbl(boundaryOrg);
{
int zog = 0;
const Polygons::AreaBottomLeft areaBlWithZog = Polygons::explosionClusterAddTla(boundaryOrg, zog);
printAbl(areaBlWithZog);
QVERIFY2(areaBlWithZog.m_cornerBottomLeft == boundaryOrg.m_cornerBottomLeft, "m_cornerBottomLeft failed");
QVERIFY2(areaBlWithZog.m_width == boundaryOrg.m_width, "m_width failed");
QVERIFY2(areaBlWithZog.m_height == boundaryOrg.m_height, "m_height failed");
QVERIFY2(areaBlWithZog.m_rotation_deg == boundaryOrg.m_rotation_deg, "m_rotation_deg failed");
}
{
int zog = 10;
const Polygons::AreaBottomLeft areaBlWithZog = Polygons::explosionClusterAddTla(boundaryOrg, zog);
printAbl(areaBlWithZog);
QVERIFY2(areaBlWithZog.m_cornerBottomLeft == QPointF(113, 113), "m_cornerBottomLeft failed");
QVERIFY2(areaBlWithZog.m_width == boundaryOrg.m_width+(2*zog), "m_width failed");
QVERIFY2(areaBlWithZog.m_height == boundaryOrg.m_height+(2*zog), "m_height failed");
QVERIFY2(areaBlWithZog.m_rotation_deg == boundaryOrg.m_rotation_deg, "m_rotation_deg failed");
}
{
double rotation_deg = 30;
const Polygons::AreaBottomLeft boundaryOrgRot(QPointF(123, 123), width, height, rotation_deg);
int zog = 10;
const Polygons::AreaBottomLeft areaBlWithZog = Polygons::explosionClusterAddTla(boundaryOrgRot, zog);
printAbl(areaBlWithZog);
QVERIFY2((areaBlWithZog.m_cornerBottomLeft - QPointF(109.34, 119.34)).manhattanLength() < 1, "m_cornerBottomLeft failed");
QVERIFY2(areaBlWithZog.m_width == boundaryOrgRot.m_width+(2*zog), "m_width failed");
QVERIFY2(areaBlWithZog.m_height == boundaryOrgRot.m_height+(2*zog), "m_height failed");
QVERIFY2(areaBlWithZog.m_rotation_deg == boundaryOrgRot.m_rotation_deg, "m_rotation_deg failed");
}
}
void UnitTestPolygons::test_explosionClusterAreaToMtpsRelativeToBottomLeft_noRotation()
{
double width = 1000; // x
double height = 100; // y
double rotation_deg = 0;
const Polygons::AreaBottomLeft boundary(QPointF(123, 123), width, height, rotation_deg);
const int numberOfMTPs = 4;
double singleWidthOut = 0;
double singleHeightOut = 0;
QVector<QPointF> vec = Polygons::explosionClusterAreaToMtpsRelativeToBottomLeft(boundary, numberOfMTPs, &singleWidthOut, &singleHeightOut);
qCritical() << "vec = " << vec;
qCritical() << "singleWidthOut = " << singleWidthOut;
qCritical() << "singleHeightOut = " << singleHeightOut;
// independent on rotation
QVERIFY2(vec.size() == numberOfMTPs, "noRotation failed; numberOfMTPs");
QVERIFY2(singleWidthOut == width/4, "noRotation failed; singleWidthOut");
QVERIFY2(singleHeightOut == height, "noRotation failed; singleHeightOut");
// depending on rotation
QVERIFY2(vec.first() == QPointF(125.0, 50), "noRotation failed");
QVERIFY2(vec[1] == QPointF(375.0, 50), "noRotation failed");
QVERIFY2(vec[2] == QPointF(625.0, 50), "noRotation failed");
QVERIFY2(vec.last() == QPointF(875.0, 50), "noRotation failed");
}
void UnitTestPolygons::test_explosionClusterAreaToMtpsRelativeToBottomLeft_withRotation()
{
double width = 1000; // x
double height = 100; // y
double rotation_deg = -90;
const Polygons::AreaBottomLeft boundary(QPointF(123, 123), width, height, rotation_deg);
const int numberOfMTPs = 4;
double singleWidthOut = 0;
double singleHeightOut = 0;
QVector<QPointF> vec = Polygons::explosionClusterAreaToMtpsRelativeToBottomLeft(boundary, numberOfMTPs, &singleWidthOut, &singleHeightOut);
qCritical() << "vec = " << vec;
qCritical() << "singleWidthOut = " << singleWidthOut;
qCritical() << "singleHeightOut = " << singleHeightOut;
// independent on rotation
QVERIFY2(vec.size() == numberOfMTPs, "withRotation failed; numberOfMTPs");
QVERIFY2(singleWidthOut == width/4, "withRotation failed; singleWidthOut");
QVERIFY2(singleHeightOut == height, "withRotation failed; singleHeightOut");
// depending on rotation
QVERIFY2(vec.first() == QPointF(-50, 125), "withRotation failed");
QVERIFY2(vec[1] == QPointF(-50, 375), "withRotation failed");
QVERIFY2(vec[2] == QPointF(-50, 625), "withRotation failed");
QVERIFY2(vec.last() == QPointF(-50, 875), "withRotation failed");
}
void UnitTestPolygons::test_explosionClusterSingleExplosionsGAUSS_Mtp()
{
Database::AesExplosionCluster explosionClusterDb;
double width = 1000; // x
double height = 100; // y
double rotation_deg = 0;
LtsCoordTrans::UtmCoordinate UTM = LtsCoordTrans::UtmCoordinate::fromMgrs(QLatin1String("32UMD100000100000")); // 32U MD 100000 100000
const Polygons::AreaBottomLeft boundary(UTM.geographic(), width, height, rotation_deg);
explosionClusterDb.id = 1;
explosionClusterDb.impactPosition = boundary.m_cornerBottomLeft;
explosionClusterDb.impactLength = boundary.m_height;
explosionClusterDb.impactWidth = boundary.m_width;
explosionClusterDb.rotationAngle = boundary.m_rotation_deg;
explosionClusterDb.zog = 0;
explosionClusterDb.impactCount = 8;
explosionClusterDb.mhpCountRequest = 4;
// rotation = 0
{
double mtpRotationNorthDegree = explosionClusterDb.rotationAngle;
const QVector<QPointF> &singleExplosions = Polygons::explosionClusterSingleExplosionsGAUSS_Mtp(explosionClusterDb, mtpRotationNorthDegree);
qCritical() << "rotation_deg = " << rotation_deg
<< ", mtpRotationNorthDegree = " << mtpRotationNorthDegree
<< ", explosionClusterDb = " << singleExplosions;
for (const auto &singleExplosion : qAsConst(singleExplosions))
qDebug() << "singleExUtm: " << LtsCoordTrans::UtmCoordinate::fromGeographic(singleExplosion).mgrs();
size_t i = 0;
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10029 10048"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10298 10042"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10682 10046"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10908 10055"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10101 10076"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10386 10022"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10581 10032"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10828 10065"))) < 1, "ERROR, distanceMeter failed!!");
}
// rotation = -90
rotation_deg = -90;
const Polygons::AreaBottomLeft boundary2(UTM.geographic(), width, height, rotation_deg);
explosionClusterDb.id = 1;
explosionClusterDb.impactPosition = boundary2.m_cornerBottomLeft;
explosionClusterDb.impactLength = boundary2.m_height;
explosionClusterDb.impactWidth = boundary2.m_width;
explosionClusterDb.rotationAngle = boundary2.m_rotation_deg;
{
double mtpRotationNorthDegree = explosionClusterDb.rotationAngle;
const QVector<QPointF> &singleExplosions = Polygons::explosionClusterSingleExplosionsGAUSS_Mtp(explosionClusterDb, mtpRotationNorthDegree);
qCritical() << "rotation_deg = " << rotation_deg
<< ", mtpRotationNorthDegree = " << mtpRotationNorthDegree
<< " explosionClusterDb = " << singleExplosions;
for (const auto &singleExplosion : qAsConst(singleExplosions))
qCritical() << "singleExUtm: " << LtsCoordTrans::UtmCoordinate::fromGeographic(singleExplosion).mgrs();
size_t i = 0;
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09952 10029"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09958 10298"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09954 10682"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09945 10908"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09924 10101"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09978 10386"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09968 10581"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09935 10828"))) < 1, "ERROR, distanceMeter failed!!");
}
// rotation = -45
rotation_deg = -45;
int zog = 100;
const Polygons::AreaBottomLeft boundary3(UTM.geographic(), width, height, rotation_deg);
explosionClusterDb.id = 1;
explosionClusterDb.impactPosition = boundary3.m_cornerBottomLeft;
explosionClusterDb.impactLength = boundary3.m_height;
explosionClusterDb.impactWidth = boundary3.m_width;
explosionClusterDb.rotationAngle = boundary3.m_rotation_deg;
explosionClusterDb.zog = zog;
{
double mtpRotationNorthDegree = explosionClusterDb.rotationAngle;
const QVector<QPointF> &singleExplosions = Polygons::explosionClusterSingleExplosionsGAUSS_Mtp(explosionClusterDb, mtpRotationNorthDegree);
qCritical() << "rotation_deg = " << rotation_deg
<< ", zog = " << zog
<< ", mtpRotationNorthDegree = " << mtpRotationNorthDegree
<< " explosionClusterDb = " << singleExplosions;
for (const auto &singleExplosion : qAsConst(singleExplosions))
qCritical() << "singleExUtm: " << LtsCoordTrans::UtmCoordinate::fromGeographic(singleExplosion).mgrs();
size_t i = 0;
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09923 09984"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10164 10200"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10480 10536"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10654 10746"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09925 10104"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10281 10233"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10426 10419"))) < 1, "ERROR, distanceMeter failed!!");
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10565 10699"))) < 1, "ERROR, distanceMeter failed!!");
}
}
int main(int argc, char *argv[])
{
NGLCoreApplication app(argc, argv);
app.createLogger("UnitTest_TNE-ALOG", "log4cxxUnitTest.props");
UnitTestPolygons tc;
return QTest::qExec(&tc, argc, argv);
}
@@ -0,0 +1,34 @@
/**
* @RDE_HEADER@
* Unittest
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
#include <QCoreApplication>
#include <QtTest/QTest>
class UnitTestPolygons : public QObject
{
Q_OBJECT
private Q_SLOTS:
// void init();
void test_QTrans();
void test_explosionClusterAddTla();
void test_explosionClusterAreaToMtpsRelativeToBottomLeft_noRotation();
void test_explosionClusterAreaToMtpsRelativeToBottomLeft_withRotation();
void test_explosionClusterSingleExplosionsGAUSS_Mtp();
// void cleanup();
private:
};