diff --git a/include/air_space/air_space_data.h b/include/air_space/air_space_data.h index 2e656bc..2ad69ce 100644 --- a/include/air_space/air_space_data.h +++ b/include/air_space/air_space_data.h @@ -7,11 +7,16 @@ #include -struct BlockedAirCorridor { +struct Point { + Vec3D vec; + std::size_t id {0}; +}; + +struct AirCorridor { std::size_t id1{0}; std::size_t id2{0}; - bool operator==(const BlockedAirCorridor& other) const { + bool operator==(const AirCorridor& other) const { return (id1 == other.id1 && id2 == other.id2) || (id1 == other.id2 && id2 == other.id1); } @@ -28,16 +33,14 @@ struct HighReliefZone { }; struct AirSpace { - QVector points; - QSet air_corridors; + QVector points; + QSet air_corridors; QVector pvo_list; QVector high_relief_zones; }; -inline unsigned int qHash(const BlockedAirCorridor& key, uint seed = 0) { - std::size_t id_a = std::min(key.id1, key.id2); - std::size_t id_b = std::max(key.id1, key.id2); - return qHash(std::make_pair(id_a, id_b), seed); +inline uint qHash(const AirCorridor& corridor, uint seed = 0) { + return ::qHash(corridor.id1, seed) ^ ::qHash(corridor.id2, seed); } #endif \ No newline at end of file diff --git a/include/json/airspace_loader/airspace_loader.h b/include/json/airspace_loader/airspace_loader.h index 4008d54..63e8303 100644 --- a/include/json/airspace_loader/airspace_loader.h +++ b/include/json/airspace_loader/airspace_loader.h @@ -13,13 +13,7 @@ #include #include "math/vec3D.h" - -struct AirSpace { - QVector points; - QSet air_corridors; - QVector pvo_list; - QVector high_relief_zones; -}; +#include class AirspaceLoader { public: @@ -31,6 +25,4 @@ class AirspaceLoader { static AirSpace _ConstructAirspace(QJsonArray& arr); }; -#endif - #endif \ No newline at end of file diff --git a/include/math/vec3D.h b/include/math/vec3D.h index 2c21cf3..3dd5ca8 100644 --- a/include/math/vec3D.h +++ b/include/math/vec3D.h @@ -10,7 +10,7 @@ class Vec3D { double z { 0.0 }; Vec3D() = default; - Vec3D(double x_, double y_, double z_) : x(x_), y(y_), z(z_) {} + Vec3D(double x_, double y_, double z_ = 0) : x(x_), y(y_), z(z_) {} Vec3D operator+(const Vec3D& other) const { return {x + other.x, y + other.y, z + other.z}; } Vec3D operator-(const Vec3D& other) const { return {x - other.x, y - other.y, z - other.z}; } diff --git a/src/json/airspace_loader/airspace.loader.cpp b/src/json/airspace_loader/airspace.loader.cpp index dbc9312..39fc354 100644 --- a/src/json/airspace_loader/airspace.loader.cpp +++ b/src/json/airspace_loader/airspace.loader.cpp @@ -37,17 +37,18 @@ AirSpace AirspaceLoader::_ConstructAirspace(QJsonArray& arr) { QJsonArray pointsArray = arr[0].toArray(); for (const auto& item : pointsArray) { QJsonObject obj = item.toObject(); - Vec3D point; - point.x = obj["x"].toDouble(); - point.y = obj["y"].toDouble(); - point.z = 0; + Point point; + point.id = obj["id"].toInt(); + point.vec.x = obj["x"].toDouble(); + point.vec.y = obj["y"].toDouble(); + point.vec.z = 0; result.points.append(point); } QJsonArray corridorsArray = arr[1].toArray(); for (const auto& item : corridorsArray) { QJsonObject obj = item.toObject(); - BlockedAirCorridor corridor; + AirCorridor corridor; corridor.id1 = obj["id1"].toInteger(); corridor.id2 = obj["id2"].toInteger(); result.air_corridors.insert(corridor);