/** * @RDE_HEADER@ * Interface-Implementation of DangerArea * $Id$ * $HeadURL$ * $Author$ */ // Own #include "cube_impl.h" #include #include #include #include // ESRI #include #include #include // 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(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