/** * @RDE_HEADER@ * AbstractGraphicalObject * $Id$ * $HeadURL$ * $Author$ */ #pragma once // Own #include #include #include #include #include // ESRI #include #include // Qt #include // 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 m_drawOrder = 0; // Data UniqueMapId m_uniqueMapId; QString m_debugInfo; ///< for debugging SimpleValue m_positions; SimpleValue m_visibility = true; SimpleValue m_selected = false; SimpleValue m_pickable = true; SimpleValue m_scale = 1.0; SimpleValue m_lineStyle; SimpleValue m_fillStyle; QPointer m_esriSimpleLineSymbol = nullptr; QPointer m_esriSimpleFillSymbol = nullptr; private: LOGGER_T m_logger; ///< Interface of the Logging-Facility }; } // namespace SituationMap