Files
qt5-legatus-legacy/Lts/Viewer/SituationMap/MapImpl/coordinate_translation.h
T
2026-08-13 18:33:10 +02:00

191 lines
4.4 KiB
C++
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @RDE_HEADER@
* CoordinateTranslation
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
// Own
#include <Map/situation_map_types.h>
// #define WITH_LOGGING
#ifdef WITH_LOGGING
# include <Common/situation_map_logging.h>
#endif // WITH_LOGGING
// ESRI
// Qt
#include <QMutex>
//----------------------------------------------------------------------------
namespace SituationMap
{
//forward:
class CoordTranslationFunctor;
class AbstractMapObjectImpl;
class SITUATIONMAP_EXPORT TranslatedBase
{
public:
explicit TranslatedBase() = default;
virtual ~TranslatedBase() = default;
// use ONE of the following methods to set functor:
void setCoordTransFunctor(CoordTranslationFunctor *functor); // set functor direct
void setMapObjectImpl(AbstractMapObjectImpl *mapObjectImpl); // MapObject->Map->functor
bool isTranslated() const
{
return m_translated;
}
virtual bool isEmpty() const = 0;
protected:
mutable CoordTranslationFunctor *m_coordTransFunctor = nullptr;
AbstractMapObjectImpl *m_mapObjectImpl = nullptr; ///< parent / host
mutable bool m_translated = false;
};
class SITUATIONMAP_EXPORT OriginTranslated final : public TranslatedBase
{
public:
OriginTranslated();
Point3D origin() const;
bool setOrigin(const Point3D &origin);
const Point3D &originTranslated() const;
void clear()
{
m_origin = Point3D();
}
bool isEmpty() const
{
return m_origin.isNull();
}
/**
* @brief operator== Compare two objects
* @param other to be compared with
* @return True if identical, otherwise false.
*/
bool operator==(const OriginTranslated &other) const
{
// m_positionsTranslated must be skipped!
return ((this->m_origin == other.m_origin));
}
/**
* @brief operator!= Compare two objects
* @param other to be compared with
* @return True if NOT identical, otherwise false.
*/
bool operator!=(const OriginTranslated &other) const
{
return !(*this == other);
}
private:
#ifdef WITH_LOGGING
LOGGER_T m_logger; ///< Interface of the Logging-Facility
#endif
Point3D m_origin;
mutable Point3D m_originTranslated;
};
/**
* @brief The PositionsTranslated class to translate positions of simulation world to map coordinate.
* A the translation is done using the CoordTranslationFunctor.
* (A copy of this object is not allowed since inner mutex can´t be copied.)
*/
class SITUATIONMAP_EXPORT PositionsTranslated : public TranslatedBase
{
public:
PositionsTranslated();
// disable copy
PositionsTranslated(const PositionsTranslated &) = delete;
PositionsTranslated &operator=(const PositionsTranslated &) = delete;
PositionCont positions() const;
bool setPositions(const PositionCont &posCont);
void addSinglePosition(const Point3D &singlePositions);
bool setPositionsTranslated(const PositionCont &posCont);
int size() const;
bool isEmpty() const;
void clear();
Point3D first();
Point3D last();
bool isTranslated() const { return m_translated && m_singlePositions.isEmpty(); }
const PositionCont &positionsTranslated() const;
const Point3D &startPointTranslated() const;
const Point3D &endPointTranslated() const;
double angleOfStartSegment() const;
double angleOfEndSegment() const;
double angleOfClosingSegment() const; ///< Angle between end and start
/**
* @brief operator== Compare two objects
* @param other to be compared with
* @return True if identical, otherwise false.
*/
bool operator==(const PositionsTranslated &other) const
{
// m_positionsTranslated must be skipped!
return ((this->m_positions == other.m_positions));
}
/**
* @brief operator!= Compare two objects
* @param other to be compared with
* @return True if NOT identical, otherwise false.
*/
bool operator!=(const PositionsTranslated &other) const
{
return !(*this == other);
}
protected:
void consolidate() const; // method is const
private:
#ifdef WITH_LOGGING
LOGGER_T m_logger; ///< Interface of the Logging-Facility
#endif
PositionCont geographicToMap(const PositionCont &positions) const;
mutable PositionCont m_positions; // mutable to enable consolidate
mutable PositionCont m_singlePositions; // mutable to enable consolidate
mutable PositionCont m_positionsTranslated; // mutable to enable positionsTranslated
mutable QMutex m_mutex;
};
} // namespace SituationMap