diff --git a/src/blackmisc/aviation/aircraftsituation.h b/src/blackmisc/aviation/aircraftsituation.h index 25d4d52cd..6f8f0e3a7 100644 --- a/src/blackmisc/aviation/aircraftsituation.h +++ b/src/blackmisc/aviation/aircraftsituation.h @@ -92,6 +92,9 @@ namespace BlackMisc //! \copydoc ICoordinateGeodetic::normalVector virtual QVector3D normalVector() const override { return this->m_position.normalVector(); } + //! \copydoc ICoordinateGeodetic::normalVectorDouble + virtual std::array normalVectorDouble() const override { return this->m_position.normalVectorDouble(); } + //! Elevation //! \sa geodeticHeight const BlackMisc::PhysicalQuantities::CLength getElevation() const { return this->geodeticHeight(); } diff --git a/src/blackmisc/aviation/airport.h b/src/blackmisc/aviation/airport.h index 668ab5c8b..65b00f794 100644 --- a/src/blackmisc/aviation/airport.h +++ b/src/blackmisc/aviation/airport.h @@ -99,6 +99,9 @@ namespace BlackMisc //! \copydoc ICoordinateGeodetic::normalVector virtual QVector3D normalVector() const override { return this->getPosition().normalVector(); } + //! \copydoc ICoordinateGeodetic::normalVectorDouble + virtual std::array normalVectorDouble() const override { return this->getPosition().normalVectorDouble(); } + //! \copydoc CValueObject::propertyByIndex CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; diff --git a/src/blackmisc/aviation/atcstation.cpp b/src/blackmisc/aviation/atcstation.cpp index 52fed937b..92eb10259 100644 --- a/src/blackmisc/aviation/atcstation.cpp +++ b/src/blackmisc/aviation/atcstation.cpp @@ -337,6 +337,11 @@ namespace BlackMisc return this->m_position.normalVector(); } + std::array CAtcStation::normalVectorDouble() const + { + return this->m_position.normalVectorDouble(); + } + CVariant CAtcStation::propertyByIndex(const BlackMisc::CPropertyIndex &index) const { if (index.isMyself()) { return CVariant::from(*this); } diff --git a/src/blackmisc/aviation/atcstation.h b/src/blackmisc/aviation/atcstation.h index f7182384b..44697fde8 100644 --- a/src/blackmisc/aviation/atcstation.h +++ b/src/blackmisc/aviation/atcstation.h @@ -233,6 +233,9 @@ namespace BlackMisc //! \copydoc ICoordinateGeodetic::normalVector virtual QVector3D normalVector() const override; + //! \copydoc ICoordinateGeodetic::normalVectorDouble + virtual std::array normalVectorDouble() const override; + //! \copydoc CValueObject::propertyByIndex CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; diff --git a/src/blackmisc/geo/coordinategeodetic.cpp b/src/blackmisc/geo/coordinategeodetic.cpp index b9a6e5e05..bb9309b60 100644 --- a/src/blackmisc/geo/coordinategeodetic.cpp +++ b/src/blackmisc/geo/coordinategeodetic.cpp @@ -186,6 +186,11 @@ namespace BlackMisc }; } + std::array CCoordinateGeodetic::normalVectorDouble() const + { + return { this->m_x, this->m_y, this->m_z }; + } + void CCoordinateGeodetic::setLatitude(const CLatitude &latitude) { this->setLatLong(latitude, this->longitude()); diff --git a/src/blackmisc/geo/coordinategeodetic.h b/src/blackmisc/geo/coordinategeodetic.h index d1ca9cf89..c149856ec 100644 --- a/src/blackmisc/geo/coordinategeodetic.h +++ b/src/blackmisc/geo/coordinategeodetic.h @@ -18,6 +18,7 @@ #include "blackmisc/pq/length.h" #include "blackmisc/propertyindex.h" #include +#include namespace BlackMisc { @@ -64,6 +65,9 @@ namespace BlackMisc //! \sa http://www.movable-type.co.uk/scripts/latlong-vectors.html virtual QVector3D normalVector() const = 0; + //! Normal vector with double precision + virtual std::array normalVectorDouble() const = 0; + //! \copydoc CValueObject::propertyByIndex CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; @@ -167,6 +171,9 @@ namespace BlackMisc //! \copydoc ICoordinateGeodetic::normalVector virtual QVector3D normalVector() const; + //! \copydoc ICoordinateGeodetic::normalVectorDouble + virtual std::array normalVectorDouble() const; + //! \copydoc CValueObject::propertyByIndex CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; @@ -191,6 +198,9 @@ namespace BlackMisc //! Set normal vector void setNormalVector(const QVector3D &normal) { this->m_x = normal.x(); this->m_y = normal.y(); this->m_z = normal.z(); } + //! Set normal vector + void setNormalVector(double x, double y, double z) { this->m_x = x; this->m_y = y; this->m_z = z; } + //! Coordinate by WGS84 position data static CCoordinateGeodetic fromWgs84(const QString &latitudeWgs84, const QString &longitudeWgs84, const BlackMisc::PhysicalQuantities::CLength &geodeticHeight = {}); diff --git a/src/blackmisc/simulation/simulatedaircraft.h b/src/blackmisc/simulation/simulatedaircraft.h index f04c45832..e48a27bb5 100644 --- a/src/blackmisc/simulation/simulatedaircraft.h +++ b/src/blackmisc/simulation/simulatedaircraft.h @@ -173,6 +173,9 @@ namespace BlackMisc //! \copydoc BlackMisc::Geo::ICoordinateGeodetic::normalVector virtual QVector3D normalVector() const override { return this->m_situation.normalVector(); } + //! \copydoc BlackMisc::Geo::ICoordinateGeodetic::normalVectorDouble + virtual std::array normalVectorDouble() const override { return this->m_situation.normalVectorDouble(); } + //! Elevation //! \sa geodeticHeight const BlackMisc::PhysicalQuantities::CLength getElevation() const { return this->geodeticHeight(); } diff --git a/src/blackmisc/simulation/xplane/navdatareference.h b/src/blackmisc/simulation/xplane/navdatareference.h index a65a07a2a..e4ff015f6 100644 --- a/src/blackmisc/simulation/xplane/navdatareference.h +++ b/src/blackmisc/simulation/xplane/navdatareference.h @@ -44,6 +44,7 @@ namespace BlackMisc virtual Geo::CLongitude longitude() const override { return m_position.longitude(); } virtual const PhysicalQuantities::CLength &geodeticHeight() const override { return m_position.geodeticHeight(); } virtual QVector3D normalVector() const override { return m_position.normalVector(); } + virtual std::array normalVectorDouble() const override { return this->m_position.normalVectorDouble(); } //! \copydoc CValueObject::propertyByIndex CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const;