Files
qt5-legatus-legacy/Lts/Viewer/SituationMap/GraphicalObjects/graphical_object_renderer_attributes.cpp
T
2026-08-13 18:33:10 +02:00

137 lines
4.5 KiB
C++
Executable File

/**
* @RDE_HEADER@
* GraphicalObjectRendererAttributes
* $Id$
* $HeadURL$
* $Author$
*/
// Own
#include "graphical_object_renderer_attributes.h"
#include <Map/situation_map_utils.h> // operator<<
#include <MathUtils/simple_helper.h>
// ESRI
#include <arcgis/arcgisversion.h> // This file is created by RME, not ESRI
#include <arcgis/GraphicsOverlay.h>
#include <arcgis/ModelSceneSymbol.h>
// Qt
#include <QPainter>
#include <QFile>
namespace SituationMap
{
GraphicalObjectRendererAttributes::GraphicalObjectRendererAttributes(const Esri::ArcGISRuntime::GeoView *geoView
, Esri::ArcGISRuntime::GraphicsOverlay *graphicsLayer
, const QString &debugInfo
, const UniqueMapId &uniqueMapId)
: BaseClass(geoView, graphicsLayer, debugInfo, uniqueMapId)
, m_logger(getLogger("GraphicalObjectRendererAttributes"))
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START, debugInfo='" << m_debugInfo << "'";
TRACE_LOG(m_logger) << LOGFUNCTION << " END, debugInfo='" << m_debugInfo << "'";
}
GraphicalObjectRendererAttributes::~GraphicalObjectRendererAttributes()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START, debugInfo='" << m_debugInfo << "'";
TRACE_LOG(m_logger) << LOGFUNCTION << " END, debugInfo='" << m_debugInfo << "'";
}
void GraphicalObjectRendererAttributes::setAttributeMap(const QVariantMap &attribMap)
{
m_attributeMap = attribMap;
}
QVariantMap GraphicalObjectRendererAttributes::attributeMap() const
{
return m_attributeMap.value();
}
bool GraphicalObjectRendererAttributes::create()
{
return BaseClass::create();
}
bool GraphicalObjectRendererAttributes::updateViewImpl()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START, debugInfo='" << m_debugInfo << "'"
<< " origin =" << this->origin() // .x() << " , " << this->origin().y()
<< " visibility=" << m_visibility
<< " pickable=" << m_pickable
<< " pickable.changed=" << m_pickable.changed()
<< " selected=" << m_selected
<< " m_attributeMap = " << m_attributeMap.value().size()
<< " m_drawOrder = " << m_drawOrder;
// some checks:
if (!isSinglePoint())
{
ERROR_LOG(m_logger) << LOGFUNCTION
<< " debugInfo='" << m_debugInfo << "'"
<< " incorrect number of positions"
<< " (" << this->positions().count() << ")";
return false;
}
bool success = create();
if (!success)
{
ERROR_LOG(m_logger) << LOGFUNCTION << " debugInfo='" << m_debugInfo << "'"
<< " create failed";
return false;
}
const Point3D &origin = this->origin();
m_graphic->setGeometry(Esri::ArcGISRuntime::Point(origin.x(),
origin.y(),
origin.z(),
spatialReference()));
if (m_attributeMap.changed())
{
QVariantMap cur = m_graphic->attributes()->attributesMap();
if (m_logger.isDebugEnabled())
qCritical() << " debugInfo='" << m_debugInfo << "'" << ", QVariantMap before unite " << cur;
cur.unite(m_attributeMap.value());
if (m_logger.isDebugEnabled())
qCritical() << " debugInfo='" << m_debugInfo << "'" << ", QVariantMap after unite " << cur;
m_graphic->attributes()->setAttributesMap(cur);
}
// keep anchor like Esri::ArcGISRuntime::SceneSymbolAnchorPosition::Bottom in mind.
// assigned during setup the Renderer (LayerFactory, AdapterDds...)
success = BaseClass::updateViewImpl();
if (!success)
{
ERROR_LOG(m_logger) << LOGFUNCTION << " debugInfo='" << m_debugInfo << "'"
<< " updateView failed";
return false;
}
success = addUpdateGraphic();
if (!success)
{
ERROR_LOG(m_logger) << LOGFUNCTION << " debugInfo='" << m_debugInfo << "'"
<< " updateView failed";
return false;
}
TRACE_LOG(m_logger) << LOGFUNCTION << " END, debugInfo='" << m_debugInfo << "'"
<< " success=" << success
<< " m_drawOrder = " << m_drawOrder
<< " m_graphic->drawOrder = " << m_graphic->zIndex();
return success;
}
} // namespace SituationMap