Files
qt5-legatus-legacy/Lts/Viewer/SituationMap/Rubberbands/rubberband_transform.cpp
T
2026-08-13 18:33:10 +02:00

93 lines
2.7 KiB
C++
Executable File

/**
**
** @RDE_HEADER@
** Implementation of rubberband class to define moving transforms
** $Id$
** $HeadURL$
** $Author$
**
** -----------------------------------------------------------------------------------------------
**
** Hardware-Environment: Intel-PC
** Software-Environment: Windows 7, Qt 5.4. ArcGIS 10.2.5
**
** Language ........: C++ 11
**
** -----------------------------------------------------------------------------------------------
**
** Author ...........: Jörg Turla, SPD G, Tel. 3132
**
** -----------------------------------------------------------------------------------------------
**
** Notes .........:
**
** 07.04.2015, JT : First edition for use with Qt5
**
** -----------------------------------------------------------------------------------------------
*/
#include "rubberband_transform.h"
#include "rubberband_internal.h"
#include <MathUtils/math_const.h>
namespace SituationMap { namespace RB
{
struct RubberbandTransform::InternalData
{
Q_DISABLE_COPY(InternalData)
MathUtils::Matrix2D _transformCoordinates;
LOGGER_T _logger;
InternalData()
: _transformCoordinates()
, _logger(getLogger("RubberbandTransform"))
{
} /* InternalData */
}; /* RubberbandTransform::InternalData */
RubberbandTransform::RubberbandTransform( SituationMap::Map * map, QObject * parent )
: RubberbandRectangle(map,parent)
, _internal(new InternalData())
{
} /* RubberbandTransform::RubberbandTransform */
RubberbandTransform::~RubberbandTransform()
{
delete _internal;
_internal = nullptr;
} /* RubberbandTransform::~RubberbandTransform */
const MathUtils::Matrix2D & RubberbandTransform::transformMatrix() const { return _internal->_transformCoordinates; }
void RubberbandTransform::update()
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* It is importent here to call RubberbandRectangle::update(); first to do an update, because
* in other case the RubberbandRectangle::_lastCoordinateChange variable will have wrong values.
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
RubberbandRectangle::update();
if (!_lastCoordinateChange.isIdentity())
{
_internal->_transformCoordinates = _lastCoordinateChange * _internal->_transformCoordinates;
}
emit updatePreview( this, _lastCoordinateChange );
_lastCoordinateChange.setToIdentity(); // reset matrix
} /* RubberbandTransform::update */
} } /* namespace SituationMap::RB */