/** * Exercise object * $Id$ * $HeadURL$ * $Author$ */ #pragma once #include "aes_db.h" #include "object_base.h" #include #include #include namespace AreaEffectSimulation { class ObjectDangerArea final : public ObjectBaseTmpl { Q_OBJECT public: explicit ObjectDangerArea(MainHandler *mainHandler, QObject *parent = nullptr); ~ObjectDangerArea(); Core::FunctionReplyObject createObject(const Database::AesDangerArea &data, const std::vector &segmentsDds, const QVector &segmentsDb); Core::FunctionReplyObject updateObject(const Database::AesDangerArea &data, const std::vector &segments); Database::AesDangerArea get() const { return m_data; } QVector segments() const { return m_segments; } std::vector form() const override { return m_aiv.form(); } QPolygonF generateForm() override; AesType aesType() const override { return AesType::AtDangerArea; } bool isCentral() const override { return m_data.isCentral; } static inline bool intersects(const QPolygonF &p1, const QPolygonF &p2) { QPainterPath pp1; pp1.addPolygon(p1); QPainterPath pp2; pp2.addPolygon(p2); return pp1.intersects(pp2); } protected Q_SLOTS: void onPublishData() override; protected: void removeTopics(); private Q_SLOTS: void onUpdateCorrelation(); void onNewAiv(const AesItemView &itemView); void onRemoveAiv(int32_t aesItemId); private: void publishAiv(); int idForCorrelatedItem(int corItemId) const { return 1000000 * m_data.id + corItemId; } private: QVector m_segments; AesItemView m_aiv; QSet m_correlatedAesItems; QPolygonF m_utmPoly; int m_zone; QPolygonF utmPolyFromGeoVec(const std::vector &geoPos, int zone); }; }