/** ** ** @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 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 */