/** * Handler for all Language HMI objects * $Id$ * $HeadURL$ * $Author$ * Created by Hanna E. Rathje, SLSE, 2015-09-03 */ #pragma once #include #include "aes_db.h" #include "handler_base.h" #include "object_mine_area.h" namespace TrainingAreaBase { class MineTriggered; } namespace AreaEffectSimulation { class ObjectMineArea; class ObjectMineAreaNull; class HandlerMineArea final : public HandlerBaseTmpl , protected Interface::Fts::MineAreaModifyRequestHandler , protected Interface::Fts::MineAreaRemoveRequestHandler , protected Interface::Fts::MineResetRequestHandler , protected Interface::Fts::MineTriggeredRequestHandler , protected Interface::Fts::MineAreaModifyFromCtaDataRequestHandler , protected Interface::Fts::MineAreaReferenceModifyRequestHandler { Q_OBJECT public: explicit HandlerMineArea(MainHandler *mainHandler); ~HandlerMineArea() = default; bool init(); int maxSingleMinesCount() const { return s_maxSingleMinesCount; } int maxCentralSingleMinesCount() const { return s_maxCentralSingleMinesCount; } private slots: void redistributeMines(int aesId, QList mines); void assignMinesFromNullArea(int aesId); private: void onMineAreaModifyRequest(const rti::core::SampleIdentity &cookie, const MineAreaModifyRequest &request) override; template Core::FunctionReplyObject mineAreaCreateRequest(const T &request); template Core::FunctionReplyObject mineAreaModifyRequest(const T &request); void onMineAreaRemoveRequest(const rti::core::SampleIdentity &cookie, const Core::RemoveElementRequest &request) override; void onMineResetRequest(const rti::core::SampleIdentity &cookie, const MineResetRequest &request) override; Core::FunctionReplyObject mineResetRequest(const MineResetRequest &request); void onMineTriggeredRequest(const rti::core::SampleIdentity &cookie, const MineTriggeredRequest &request) override; Core::FunctionReplyObject mineTriggeredRequest(const MineTriggeredRequest &request); void onMineAreaModifyFromCtaDataRequest(const rti::core::SampleIdentity &cookie, const MineArea &request) override; void onNewMineCorridor(const AesItemView &aiv); Core::FunctionReplyObject mineAreaReferenceCreateRequest(const MineAreaReferenceModifyRequest &refRequest); Core::FunctionReplyObject mineAreaReferenceModifyRequest(const MineAreaReferenceModifyRequest &refRequest); void onMineAreaReferenceModifyRequest(const rti::core::SampleIdentity &cookie, const MineAreaReferenceModifyRequest &request) override; ObjectMineArea *getObjecMapByreferenceAesItemId(int referenceAesItemId); bool fillFromMineAreaReferenceRequest(const MineAreaReferenceModifyRequest &inReq, Database::AesMineArea &dbData); int totalAreas() const override; int totalAreasCentral() const override; void onMineTriggered(const TrainingAreaBase::MineTriggered &data, DataModification modType); void onMinelayerPositionChanged(const TrainingAreaBase::MinelayerTrailerPosition &data, DataModification modType); bool removeDuplicateMine(int mineId); void onTimeoutEquipNo(int equipNo, int chargeTypeId); double msGetDistanceFromLine(float px, float py, float px0, float py0, float px1, float py1); QPolygonF msGetBoundingBoxPolygon(const QPolygonF &minen, double *widthBoundingBox); bool triggerUnpairedMine(const MineTriggeredRequest &request); bool containsPointInExpandedMinefield(const QPointF &positionGeo, const QPolygonF &polygon, double distance) const; bool checkIfNullMineIsInArea(const std::vector &segments, const Database::AesMineArea &data, double distance); bool checkIfNullMineIsInArea(const std::vector &segments, const Database::AesMineArea &data, double distance); bool checkIfNullMineIsInArea(const QVector &segments, const Database::AesMineArea &data, double distance); private: ObjectMineAreaNull *m_nullArea; bool isDusMineArea(int chargeTypeId, int igniterTypeId, int igniterFunctionId) const; bool isConcreteMine(int chargeTypeId, int igniterTypeId, int igniterFunctionId) const; bool isFromMineLayer(int chargeTypeId, int igniterTypeId, int igniterFunctionId) const; bool isSingleVirtualMine(int chargeTypeId, int igniterTypeId = 0, int igniterFunctionId = 0) const; bool isVirtualMine(int chargeTypeId, int igniterTypeId = 0, int igniterFunctionId = 0) const; int m_totalPzAbwWMis = 0; // QMultiMap QMap m_dusMinePosMapUtm; QMap m_dusMinePosMapGeo; // QMultiMap m_dusMinePosMapUtm; // QMultiMap m_dusMinePosMapGeo; // QMap QMap m_timerMap; // QMap QMap m_zoneMap; }; } // namespace AreaEffectSimulation