Files
qt-migration-legatus/qt5-before/dlbo/Lts/Viewer/SituationMap/MapImpl/viewshed_analysis.cpp
T
torstenandCopilot 7173785915 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>
2026-09-15 18:20:26 +00:00

121 lines
4.1 KiB
C++

/**
* @RDE_HEADER@
* ViewshedAnalysis
* $Id$
* $HeadURL$
* $Author$
*/
// Own
#include <Map/situation_map_utils.h>
#include "viewshed_analysis.h"
// ESRI
#include <arcgis/SceneGraphicsView.h>
#include <arcgis/AnalysisOverlay.h>
#include <arcgis/AnalysisListModel.h>
#include <arcgis/LocationViewshed.h>
// Qt
#include <QDebug>
namespace SituationMap
{
ViewshedAnalysis::ViewshedAnalysis(Esri::ArcGISRuntime::SceneGraphicsView *sceneGraphicsView, QObject *parent)
: ViewshedBase(parent)
, m_analysisOverlayModel(sceneGraphicsView->analysisOverlays())
, m_analysisOverlay(new Esri::ArcGISRuntime::AnalysisOverlay(this))
, m_viewsheds(3) // ESRI viewshed support 120 degree maximum, merge 3 of them
, m_logger(getLogger("ViewshedAnalysis")) // P.S.: from release 100.3 ESRI supports 360 degree viewshed
{
m_analysisOverlay->setVisible(true);
for (int i = 0; i < m_viewsheds.size(); ++i)
m_viewsheds[i] = nullptr;
QObject::connect(m_analysisOverlay->analyses(), &Esri::ArcGISRuntime::AnalysisListModel::errorOccurred, this, &ViewshedAnalysis::onErrorOccured);
m_analysisOverlayModel->append(m_analysisOverlay);
} // ViewshedAnalysis::ViewshedAnalysis
ViewshedAnalysis::~ViewshedAnalysis()
{
for (int i = 0; i < m_viewsheds.size(); ++i)
{
delete m_viewsheds[i];
m_viewsheds[i] = nullptr;
}
m_analysisOverlayModel->removeOne(m_analysisOverlay);
delete m_analysisOverlay;
} // ViewshedAnalysis::~ViewshedAnalysis()
bool ViewshedAnalysis::execute(const QPointF &viewshedPoint_map_degree, double outerRadius, double observerOffset)
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START"
<< " viewshedPoint_map_degree= " << viewshedPoint_map_degree
<< " outerRadius= " << outerRadius
<< " observerOffset= " << observerOffset;
if (!m_analysisOverlay)
return false;
Esri::ArcGISRuntime::Point viewshedCenter(viewshedPoint_map_degree.x(), viewshedPoint_map_degree.y(), observerOffset);
double heading(0.0);
double deltaHeading(360.0 / m_viewsheds.size());
// ToDo:
// Keep in mind that the number of viewsheds is restricted to 8 on mobile devices and 16 on desktop devices.
// The horizontal angle have to be less than 120 degree.
for (int i = 0; i < m_viewsheds.size(); ++i)
{
Esri::ArcGISRuntime::LocationViewshed *viewshed = m_viewsheds[i];
if (viewshed)
{
m_analysisOverlay->analyses()->removeOne(viewshed);
delete viewshed;
}
viewshed = new Esri::ArcGISRuntime::LocationViewshed(viewshedCenter
, heading
, 90.0 // pitch limited to 180
, deltaHeading // horizontalAngle limited to 120, from release 100.3 maximum is 360 here
, 90.0 // verticalAngle limited to 120
, 10.0 // minDistance
, outerRadius // maxDistance
, this);
viewshed->setVisible(true);
viewshed->setFrustumOutlineVisible(false);
viewshed->setFrustumOutlineColor(QColor(0, 0, 255, 255));
// Add the Viewshed to the Analysis Overlay
m_analysisOverlay->analyses()->append(viewshed);
m_viewsheds[i] = viewshed;
heading += deltaHeading;
} // for
return true;
} // bool ViewshedAnalysis::execute(const QPointF &viewshedPoint_map, double outerRadius, double observerOffset)
} // namespace SituationMap
namespace SituationMap
{
void ViewshedAnalysis::onErrorOccured(const Esri::ArcGISRuntime::Error &error)
{
ERROR_LOG(m_logger) << LOGFUNCTION << " EsriError occured: " << error;
// qCritical() << "Error reported from ESRI Analyse Overlay:" << error.message() << " code:" << error.code();
} // void ViewshedAnalysis::onErrorOccured(const Esri::ArcGISRuntime::Error &error)
} // namespace SituationMap