/** * @RDE_HEADER@ * Interface of SoundArea * $Id$ * $HeadURL$ * $Author$ */ #pragma once #include "abstract_multi_point_map_object.h" #include //---------------------------------------------------------------------------- namespace SituationMap { class MarkerData { public: MarkerData() = default; /// ctor for marker MarkerData(MarkerSymbolType _markerSymbolType, int _proxyMarkerSize, const QColor &_markerColor) : m_proxyMarker(_markerSymbolType), m_proxyMarkerSize(_proxyMarkerSize), m_proxyMarkerColor(_markerColor) {} /** * @brief proxyImage to set a proxy image be displayed on the map (instead of marker) * @param _proxyImage proxy image be displayed on the map * @param _proxyImageDefaultSize default size image if (user) scale is 1.0. * The image will be scaled to the proxyImageDefaultSize * scale. * To ensure that the image will be displayed with high resolution, the proxyImage must have this resolution. * Example: * Set an image of QSize(100,100), and set a proxyImageDefaultSize of QSize(20,20). * Initially (scale = 1.0) the image will be downscaled to QSize(20,20). * If the user increases the scale to 4.0, the image will be scaled to QSize(80,80) * This should ensure a good image quality. */ MarkerData(const QImage &_proxyImage, const QSize &_proxyImageDefaultSize) : m_proxyImage(_proxyImage) , m_proxyImageDefaultSize(_proxyImageDefaultSize) {} /** * @brief operator== Compare two objects * @param other to be compared with * @return true if identical, otherwise false. */ bool operator==(const MarkerData &other) const { return ((this->m_proxyImage == other.m_proxyImage) && (this->m_proxyMarkerSize == other.m_proxyMarkerSize) && (this->m_proxyMarkerColor == other.m_proxyMarkerColor) && (this->m_proxyMarker == other.m_proxyMarker) ); } /** * @brief operator!= Compare two objects * @param other to be compared with * @return true if NOT identical, otherwise false. */ bool operator!=(const MarkerData &other) const { return !(*this == other); } bool hasMarker() const { return m_proxyMarker != MarkerSymbolType::Undefined; } bool hasProxyImage() const { return !m_proxyImage.isNull(); } QImage proxyImage() const { return m_proxyImage; } bool isEmpty() const { return !hasMarker() && !hasProxyImage(); } QString toString() const { QString str = QLatin1String("GeoImage("); if (m_proxyImage.isNull()) str.append(QLatin1String("noProxyImage, ")); else str.append(QLatin1String("withProxyImage, ")); return str; } protected: friend class SoundAreaImpl; MarkerSymbolType m_proxyMarker{MarkerSymbolType::Undefined}; int m_proxyMarkerSize{20}; QColor m_proxyMarkerColor{Qt::red}; QImage m_proxyImage; ///< if not set, marker will be used QSize m_proxyImageDefaultSize; }; /** * @brief The SoundArea class supports SoundArea. */ class SoundArea : public virtual AbstractMultiPointMapObject, public virtual AbstractEffectSimulation { public: SoundArea() ///< Contructor : AbstractMultiPointMapObject(), AbstractEffectSimulation() {} virtual ~SoundArea() = default; ///< Destructor /*! \name Point symbol */ //@{ virtual Point3D markerOrigin() const = 0; virtual void setMarkerOrigin(const Point3D &origin) = 0; virtual const MarkerData &markerData() const = 0; virtual void setMarkerData(const MarkerData &markerData) = 0; //@} }; } // namespace SituationMap