Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer/SituationMap/GraphicalObjects/graphical_object_cube.cpp
T

168 lines
4.7 KiB
C++
Executable File

/**
* @RDE_HEADER@
* GraphicalObjectCube
* $Id$
* $HeadURL$
* $Author$
*/
// Own
#include "graphical_object_cube.h"
#include <Map/situation_map_utils.h> // operator<<
// ESRI
#include <GraphicsOverlay.h>
#include <PolygonBuilder.h>
#include <Graphic.h>
#include <SpatialReference.h>
#include <Geometry.h>
#include <Polygon.h>
#include <AttributeListModel.h>
// Qt
namespace SituationMap
{
GraphicalObjectCube::GraphicalObjectCube(const Esri::ArcGISRuntime::GeoView *geoView
, Esri::ArcGISRuntime::GraphicsOverlay *graphicsLayer
, const QString &debugInfo
, const UniqueMapId &uniqueMapId)
: BaseClass(geoView, graphicsLayer, debugInfo, uniqueMapId)
, m_logger(getLogger("GraphicalObjectCube"))
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START, debugInfo='" << m_debugInfo << "'";
TRACE_LOG(m_logger) << LOGFUNCTION << " END, debugInfo='" << m_debugInfo << "'";
}
GraphicalObjectCube::~GraphicalObjectCube()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START, debugInfo='" << m_debugInfo << "'";
TRACE_LOG(m_logger) << LOGFUNCTION << " END, debugInfo='" << m_debugInfo << "'";
}
bool GraphicalObjectCube::create()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START, debugInfo='" << m_debugInfo << "'";
bool success = BaseClass::create();
if (!success)
{
ERROR_LOG(m_logger) << LOGFUNCTION << " debugInfo='" << m_debugInfo << "'"
<< " create failed";
}
// real work:
// empty
TRACE_LOG(m_logger) << LOGFUNCTION << " END, debugInfo='" << m_debugInfo << "'"
// << " drawOrder = " << m_graphic->drawOrder()
<< " success = " << success;
return success;
}
bool GraphicalObjectCube::updateViewImpl()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START, debugInfo='" << m_debugInfo << "'";
// some checks:
if (!this->isArea())
{
ERROR_LOG(m_logger) << LOGFUNCTION << " incorrect number of positions"
<< " (" << this->positions().count() << ")";
return false;
}
if (!create())
{
ERROR_LOG(m_logger) << LOGFUNCTION << " debugInfo='" << m_debugInfo << "'"
<< " create failed";
return false;
}
if (!BaseClass::updateViewImpl())
{
ERROR_LOG(m_logger) << LOGFUNCTION << " debugInfo='" << m_debugInfo << "'"
<< " updateView failed";
return false;
}
// real work:
DEBUG_LOG(m_logger) << LOGFUNCTION << " debugInfo='" << m_debugInfo << "'";
// Attribute 'height':
QVariantMap attMap = m_graphic->attributes()->attributesMap();
attMap[QStringLiteral("height")] = QVariant(m_height.value());
//
// Attribute 'PartyName' is replaced by Attribute 'Extrusion_Color' to be more flexible
//
// Attribute 'Extrusion_Color':
if (m_extrusionColorName.value().isEmpty())
{
DEBUG_LOG(m_logger) << LOGFUNCTION
<< " debugInfo='" << m_debugInfo << "'"
<< " m_extrusionColorName is empty";
// -> time for the defaultSymbol of the Renderer
attMap[QStringLiteral("Extrusion_Color")] = QStringLiteral("DOES_NOT_EXIST");
}
else
attMap[QStringLiteral("Extrusion_Color")] = QVariant(m_extrusionColorName.value());
m_graphic->attributes()->setAttributesMap(attMap);
DEBUG_LOG(m_logger) << LOGFUNCTION << " debugInfo='" << m_debugInfo << "'" << " attributesMap[height] ='" << attMap[QStringLiteral("height")].toDouble() << "'";
DEBUG_LOG(m_logger) << LOGFUNCTION << " debugInfo='" << m_debugInfo << "'" << " attributesMap[Extrusion_Color] ='" << attMap[QStringLiteral("Extrusion_Color")].toString() << "'";
// geometry:
Esri::ArcGISRuntime::PolygonBuilder builder(spatialReference());
const PositionCont &posCont = m_positions.value();
for (const Point3D &pos : posCont)
{
builder.addPoint(pos.x(), pos.y());
}
if (! builder.isSketchValid())
{
ERROR_LOG(m_logger) << LOGFUNCTION << " debugInfo='" << m_debugInfo << "'"
<< " builder -> sketch invalid";
return false;
}
m_graphic->setGeometry(builder.toGeometry());
// add
bool successGraphic = addUpdateGraphic();
TRACE_LOG(m_logger) << LOGFUNCTION << " END, debugInfo='" << m_debugInfo << "'"
<< " drawOrder = " << m_graphic->zIndex();
return successGraphic;
}
//-----------------------------------------------------------------------------
// output operator:
//-----------------------------------------------------------------------------
std::ostream &operator<<(std::ostream &stream,
const GraphicalObjectCube &value)
{
stream << value.toString();
return stream;
}
} // namespace SituationMap