168 lines
4.7 KiB
C++
Executable File
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
|