167 lines
4.6 KiB
C++
Executable File
167 lines
4.6 KiB
C++
Executable File
/**
|
||
* @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
|