Initial commit

This commit is contained in:
torsten committed 2026-08-13 18:33:10 +02:00
commit b7d90b9afe
16245 files changed
+3396666

No files matched your search

+166
View File
@@ -0,0 +1,166 @@
/**
* @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