214 lines
5.5 KiB
C++
Executable File
214 lines
5.5 KiB
C++
Executable File
/**
|
|
* @RDE_HEADER@
|
|
* AbstractGraphicalObject
|
|
* $Id$
|
|
* $HeadURL$
|
|
* $Author$
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
// Own
|
|
#include <Map/situation_map_types.h>
|
|
#include <Map/line_style.h>
|
|
#include <Map/fill_style.h>
|
|
#include <Common/simple_value.h>
|
|
|
|
#include <Common/situation_map_logging.h>
|
|
|
|
// ESRI
|
|
#include <arcgis/SimpleLineSymbol.h>
|
|
#include <arcgis/SimpleFillSymbol.h>
|
|
|
|
// Qt
|
|
#include <QPointer>
|
|
|
|
|
|
// forward:
|
|
namespace Esri
|
|
{
|
|
namespace ArcGISRuntime
|
|
{
|
|
class GeoView;
|
|
class Graphic;
|
|
class GraphicsOverlay;
|
|
class Geometry;
|
|
class Multipart;
|
|
class SpatialReference;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
namespace SituationMap
|
|
{
|
|
|
|
//forward
|
|
class GraphicalObjectText;
|
|
|
|
|
|
class SITUATIONMAP_EXPORT AbstractGraphicalObject
|
|
{
|
|
|
|
public:
|
|
AbstractGraphicalObject(const Esri::ArcGISRuntime::GeoView *geoView
|
|
, Esri::ArcGISRuntime::GraphicsOverlay *graphicsLayer
|
|
, const QString &debugInfo
|
|
, const UniqueMapId &uniqueMapId);
|
|
|
|
virtual ~AbstractGraphicalObject();
|
|
|
|
AbstractGraphicalObject(const AbstractGraphicalObject &other) = delete;
|
|
AbstractGraphicalObject &operator=(AbstractGraphicalObject &other) = delete;
|
|
|
|
virtual Esri::ArcGISRuntime::Graphic *graphic();
|
|
virtual Esri::ArcGISRuntime::GraphicsOverlay *graphicsLayer();
|
|
|
|
virtual QString toString() const;
|
|
|
|
virtual UniqueMapId uniqueMapId() const;
|
|
virtual void setUniqueMapId(UniqueMapId uniqueId);
|
|
|
|
virtual QString debugInfo() const;
|
|
virtual void setDebugInfo(const QString &debugInfo);
|
|
|
|
virtual int drawOrder() const;
|
|
virtual void setDrawOrder(int drawOrder);
|
|
|
|
// Data access:
|
|
|
|
// for SinglePoint:
|
|
virtual Point3D origin() const;
|
|
virtual void setOrigin(const Point3D &origin);
|
|
virtual void setOrigin(const QPointF &origin); // ToDO accept this??
|
|
|
|
// for MultiPoint:
|
|
virtual PositionCont positions() const;
|
|
virtual void setPositions(const PositionCont &posCont);
|
|
|
|
virtual bool isSinglePoint() const;
|
|
virtual bool isMultiPoint() const;
|
|
virtual bool isArea() const;
|
|
|
|
virtual LineStyle lineStyle() const;
|
|
virtual LineStyle &rLineStyle();
|
|
/**
|
|
* @brief setLineStyle (Font-)size is limited to 500.
|
|
* (High values can lead to coredump with 'SymbolDrawHelper::create_line_image FAILED, SkBitmap is NULL or empty')
|
|
* @param lineStyle to set.
|
|
*/
|
|
virtual void setLineStyle(const LineStyle &lineStyle);
|
|
|
|
virtual FillStyle fillStyle() const;
|
|
virtual FillStyle &rFillStyle();
|
|
virtual void setFillStyle(const FillStyle &fillStyle);
|
|
|
|
// Scale :
|
|
virtual float scale() const;
|
|
virtual void setScale(float scale);
|
|
// : Scale
|
|
|
|
|
|
// Visibility :
|
|
virtual bool visibility() const;
|
|
virtual void setVisibility(bool visibility);
|
|
// : Visibility
|
|
|
|
// Selection, Picking :
|
|
bool selected() const;
|
|
void setSelected(bool selected);
|
|
|
|
bool pickable() const;
|
|
/**
|
|
* @brief setPickable The method allows pickable=true only if uniqueMapIdis valid.
|
|
* @param pickable new value.
|
|
*/
|
|
void setPickable(bool pickable);
|
|
// : Selection, Picking
|
|
|
|
|
|
virtual Esri::ArcGISRuntime::Geometry getGraphicGeometry() const;
|
|
|
|
bool updateView();
|
|
|
|
bool addUpdateGraphic();
|
|
|
|
static Esri::ArcGISRuntime::SimpleLineSymbolStyle convert(const LinePattern linePattern);
|
|
static Esri::ArcGISRuntime::SimpleFillSymbolStyle convert(const FillPattern fillPattern);
|
|
|
|
bool assignLineStyleToGraphic();
|
|
bool assignFillStyleToGraphic();
|
|
|
|
|
|
static int countOfPolygonFirstPart(const Esri::ArcGISRuntime::Multipart &polylinePolygon);
|
|
|
|
|
|
protected:
|
|
// Internal/Admin
|
|
const Esri::ArcGISRuntime::SpatialReference spatialReference() const;
|
|
|
|
virtual bool changed()
|
|
{
|
|
return m_drawOrder.changed()
|
|
|| m_positions.changed()
|
|
|| m_visibility.changed()
|
|
|| m_selected.changed()
|
|
|| m_pickable.changed()
|
|
|| m_scale.changed()
|
|
|| m_lineStyle.changed()
|
|
|| m_fillStyle.changed();
|
|
}
|
|
|
|
virtual bool updateViewImpl() = 0;
|
|
|
|
virtual void resetChanged()
|
|
{
|
|
m_drawOrder.reset();
|
|
m_positions.reset();
|
|
m_visibility.reset();
|
|
m_selected.reset();
|
|
m_pickable.reset();
|
|
m_scale.reset();
|
|
m_lineStyle.reset();
|
|
m_fillStyle.reset();
|
|
}
|
|
|
|
|
|
virtual bool create() = 0;
|
|
|
|
|
|
const Esri::ArcGISRuntime::GeoView *m_geoView = nullptr;
|
|
Esri::ArcGISRuntime::GraphicsOverlay *m_graphicsLayer = nullptr;
|
|
Esri::ArcGISRuntime::Graphic *m_graphic = nullptr;
|
|
SimpleValue<int> m_drawOrder = 0;
|
|
|
|
// Data
|
|
UniqueMapId m_uniqueMapId;
|
|
|
|
|
|
QString m_debugInfo; ///< for debugging
|
|
|
|
SimpleValue<PositionCont> m_positions;
|
|
|
|
SimpleValue<bool> m_visibility = true;
|
|
|
|
SimpleValue<bool> m_selected = false;
|
|
SimpleValue<bool> m_pickable = true;
|
|
|
|
SimpleValue<float> m_scale = 1.0;
|
|
|
|
SimpleValue<LineStyle> m_lineStyle;
|
|
SimpleValue<FillStyle> m_fillStyle;
|
|
QPointer<Esri::ArcGISRuntime::SimpleLineSymbol> m_esriSimpleLineSymbol = nullptr;
|
|
QPointer<Esri::ArcGISRuntime::SimpleFillSymbol> m_esriSimpleFillSymbol = nullptr;
|
|
|
|
private:
|
|
LOGGER_T m_logger; ///< Interface of the Logging-Facility
|
|
};
|
|
|
|
|
|
|
|
} // namespace SituationMap
|
|
|