Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer/SituationMap/MapObjectsImpl/cube_impl.cpp
T
berrux-dev 598fc2560e Complete Qt6 migration: full clean build green across groups G1-G12 incl. runtime plugin set
new_docker_build.sh gains Group 12 (212 GUI/Data plugins); fixes LtsUtilsGuiDds visibility (LTO-stripped exports), LtsProjectionWorkstation unity name shadow, 6 unity-off dirs (dup file-scope statics, ddsftc INTERFACE sources) and reconfigures BUILD_FILTERMANAGEMENT/BUILD_PLUGINS_SERVICEMONITOR=ON
2026-10-20 09:36:57 +02:00

167 lines
4.5 KiB
C++
Executable File
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 <GraphicsOverlay.h>
#include <Renderer.h>
#include <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