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

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