93 lines
2.7 KiB
C++
Executable File
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 */
|