Files
qt-migration-legatus/qt5-before/dlbo/Lts/Viewer/SituationMap/MapObjectsImpl/cube_impl.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

167 lines
4.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @RDE_HEADER@
* Interface-Implementation of DangerArea
* $Id$
* $HeadURL$
* $Author$
*/
// Own
#include "cube_impl.h"
#include <Map/coord_translation_functor.h>
#include <Map/party_id_to_color_functor.h>
#include <MapImpl/map_impl.h>
#include <GraphicalObjects/graphical_object_cube.h>
// ESRI
#include <arcgis/GraphicsOverlay.h>
#include <arcgis/Renderer.h>
#include <arcgis/PolygonBuilder.h>
// Qt
namespace SituationMap
{
//-----------------------------------------------------------------------------
// class CubeImpl
//-----------------------------------------------------------------------------
CubeImpl::CubeImpl(const QString &debugInfo)
: Cube() // Interface
, BaseClass(debugInfo) // Implementation
, m_logger(getLogger("CubeImpl"))
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
CubeImpl::~CubeImpl()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
double CubeImpl::height() const
{
return m_height;
}
void CubeImpl::setHeight(double height)
{
m_height = height;
}
bool CubeImpl::updateViewImpl()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START"
<< " symbol=" << m_symbol.value().sidc
<< " visibility=" << m_visibility
<< " visiTechn=" << m_visibilityTechnical
<< " visiTact=" << m_visibilityTactical;
// pre-condition
Esri::ArcGISRuntime::Renderer *curRenderer = nullptr;
if (m_graphicsLayer)
curRenderer = m_graphicsLayer->renderer();
if (!curRenderer)
{
ERROR_LOG(m_logger) << LOGFUNCTION << " no ArcGISRuntime::Renderer, layername='" << m_logicalLayerName << "'";
return false;
}
// Destroy if invisible :
// 13.09.2018, Norbert Thoden
// Regarding ESRI Case #02170796 - [BOS] Crash with Destruction of 3D Scene
// To reduce likelihood of crash:
// Destroy GraphicalObject (GO, m_mainGraphicalObject) if it becomes invisible
// With V100.3.0 the behaviour does not change.
// (switching cubes for 180 bldgs on and off)
//
if (m_visibility)
{
if (!m_mainGraphicalObject)
{
m_mainGraphicalObject = new GraphicalObjectCube(m_mapImpl->getEsriGeoView(),
m_graphicsLayer,
m_debugInfo + QStringLiteral("#GOCube"),
m_uniqueMapId);
}
} else {
delete m_mainGraphicalObject;
m_mainGraphicalObject = nullptr;
return true;
}
// : Destroy if invisible
GraphicalObjectCube *goCube = static_cast<GraphicalObjectCube *>(m_mainGraphicalObject);
if (goCube)
{
// in former times: partyName was used
// it´s replaced by more flexible ExtrusionColorName:
// const QString &partyName = m_mapImpl->partyIdToColorFunctor().partyIdToName(m_party.partyId.value());
// goCube->setPartyName(partyName);
const QColor &partyColor= m_mapImpl->partyIdToColorFunctor().partyIdToColor(m_party.partyId.value());
if (m_party.partyId.value() > -2) //Use Default: White or TeamColor
{
goCube->setExtrusionColorName( partyColor.name() );
}
else // Use given Color //need to be prepared in layerfactory!
{
goCube->setExtrusionColorName( majorColor().name() );
}
goCube->setPositions(m_positions.positionsTranslated());
goCube->setHeight(m_height);
}
else
{
ERROR_LOG(m_logger) << LOGFUNCTION << " no m_mainGraphicalObject";
return false;
}
bool success = BaseClass::updateViewImpl();
if (!success)
ERROR_LOG(m_logger) << LOGFUNCTION << " updateViewImpl failed";
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
return true;
}
bool CubeImpl::init(MapImpl *mapImpl, const QString &logicalLayerName)
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
bool success = BaseClass::init(mapImpl, logicalLayerName);
// create underlying object (to save most attributes only there)
if (!m_mainGraphicalObject)
{
m_mainGraphicalObject = new GraphicalObjectCube(m_mapImpl->getEsriGeoView(),
m_graphicsLayer,
m_debugInfo + QStringLiteral("#GOCube"),
m_uniqueMapId);
//this MapObject is not very typical, therefore set some attributes:
this->setPickable(false);
this->setScaleEnable(false);
}
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
return success;
}
} // namespace SituationMap