1 /*************************************************************************** 2 qgsquickmaptransform.cpp 3 -------------------------------------- 4 Date : 27.12.2014 5 Copyright : (C) 2014 by Matthias Kuhn 6 Email : matthias (at) opengis.ch 7 *************************************************************************** 8 * * 9 * This program is free software; you can redistribute it and/or modify * 10 * it under the terms of the GNU General Public License as published by * 11 * the Free Software Foundation; either version 2 of the License, or * 12 * (at your option) any later version. * 13 * * 14 ***************************************************************************/ 15 16 #include "qgsquickmaptransform.h" 17 #include "qgsquickmapsettings.h" 18 applyTo(QMatrix4x4 * matrix) const19void QgsQuickMapTransform::applyTo( QMatrix4x4 *matrix ) const 20 { 21 *matrix *= mMatrix; 22 matrix->optimize(); 23 } 24 mapSettings() const25QgsQuickMapSettings *QgsQuickMapTransform::mapSettings() const 26 { 27 return mMapSettings; 28 } 29 setMapSettings(QgsQuickMapSettings * mapSettings)30void QgsQuickMapTransform::setMapSettings( QgsQuickMapSettings *mapSettings ) 31 { 32 if ( mapSettings == mMapSettings ) 33 return; 34 35 if ( mMapSettings ) 36 disconnect( mMapSettings, &QgsQuickMapSettings::visibleExtentChanged, this, &QgsQuickMapTransform::updateMatrix ); 37 38 mMapSettings = mapSettings; 39 40 if ( mMapSettings ) 41 connect( mMapSettings, &QgsQuickMapSettings::visibleExtentChanged, this, &QgsQuickMapTransform::updateMatrix ); 42 43 updateMatrix(); 44 45 emit mapSettingsChanged(); 46 } 47 updateMatrix()48void QgsQuickMapTransform::updateMatrix() 49 { 50 QMatrix4x4 matrix; 51 float scaleFactor = static_cast<float>( 1.0 / mMapSettings->mapUnitsPerPixel() ); 52 53 matrix.scale( scaleFactor, -scaleFactor ); 54 matrix.translate( static_cast<float>( -mMapSettings->visibleExtent().xMinimum( ) ), 55 static_cast<float>( -mMapSettings->visibleExtent().yMaximum() ) ); 56 57 mMatrix = matrix; 58 update(); 59 } 60