#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include "logger.h" namespace TrainingAreaBase { class MainHandler; class PositionHandler; class IsmHandler : public QObject { Q_OBJECT public: struct OpsData { int opsCode = 0; int assetId = 0; int structureElementId = 0; int mainStructureElementId = 0; int roomId = 0; bool opsTunnel = false; int mountingPointTypeId = 0; Core::GeoPosition position; }; explicit IsmHandler(MainHandler *mainHandler); bool init(); OpsData dataFromOpsCode(int ipsCode) ; int getAssetTypeIdFromStructureElementId (int structureElementId) {return m_structure_ElementId2AssetTypeId.value(structureElementId);} bool posInExtendedBuildingFootprint(int mainStructureElementId, const Core::GeoPosition &position, const int mountPointTypeId) const; private Q_SLOTS: void onInstrumentationAssetChanged(const InfrastructureManagement::InstrumentationAsset &data, DataModification modType = DataModification::eAdded); void onMountingPointAssetChanged(const InfrastructureManagement::MountingPointAsset &data, DataModification modType = DataModification::eAdded); void onMainStructureElementChanged(const InfrastructureManagement::MainStructureElement &data, DataModification modType = DataModification::eAdded); void onMainFootprintChanged(const InfrastructureManagement::MainFootprint &data, DataModification modType); private: void rotateBuildingFootprint(int mseId); void removeOpsDataByStructureElementId(int structureElementId); void removeOpsAsset(int assetId); int getOpsCodeFromJSon(const std::string &s) const; bool getIsOpsTunnel(const std::string &s) const; void updateOpsData(OpsData &data, bool force = false); double distancePointLine(const QPointF &p, const QPointF &l1, const QPointF &l2) const; static double squareLen(const QPointF &p1, const QPointF &p2); private: NGL::INGLLogger &m_logger; MainHandler *m_mainHandler; QHash m_opsData; QMap m_structure_ElementId2AssetTypeId; QMap m_structureElementId2AssetId; QMap m_assetId2StructureElementId; QMap m_buildingBoundingBoxes; QMap m_relBuildingFootprints; QMap m_relBuildingFootprintsRotated; QMap m_buildingBoundingBoxesMgrs; QMap m_relBuildingFootprintsRotatedMgrs; std::shared_ptr m_dtcIsm; int m_distanceIpsToGps; int m_distanceOpsToGps; }; }