void QgsComposerPicture::setPictureRotation( double r ) { double oldRotation = mPictureRotation; mPictureRotation = r; if ( mResizeMode == Zoom ) { //find largest scaling of picture with this rotation which fits in item QSizeF currentPictureSize = pictureSize(); QRectF rotatedImageRect = QgsComposerUtils::largestRotatedRectWithinBounds( QRectF( 0, 0, currentPictureSize.width(), currentPictureSize.height() ), rect(), mPictureRotation ); mPictureWidth = rotatedImageRect.width(); mPictureHeight = rotatedImageRect.height(); update(); } else if ( mResizeMode == ZoomResizeFrame ) { QSizeF currentPictureSize = pictureSize(); QRectF oldRect = QRectF( pos().x(), pos().y(), rect().width(), rect().height() ); //calculate actual size of image inside frame QRectF rotatedImageRect = QgsComposerUtils::largestRotatedRectWithinBounds( QRectF( 0, 0, currentPictureSize.width(), currentPictureSize.height() ), rect(), oldRotation ); //rotate image rect by new rotation and get bounding box QTransform tr; tr.rotate( mPictureRotation ); QRectF newRect = tr.mapRect( QRectF( 0, 0, rotatedImageRect.width(), rotatedImageRect.height() ) ); //keep the center in the same location newRect.moveCenter( oldRect.center() ); QgsComposerItem::setSceneRect( newRect ); emit itemChanged(); } emit pictureRotationChanged( mPictureRotation ); }
void QgsLayoutItemPicture::setRotationMap( const QString &mapUuid ) { if ( !mLayout ) { return; } if ( mRotationMap ) { disconnect( mRotationMap, &QgsLayoutItemMap::mapRotationChanged, this, &QgsLayoutItemPicture::updateMapRotation ); disconnect( mRotationMap, &QgsLayoutItemMap::extentChanged, this, &QgsLayoutItemPicture::updateMapRotation ); } if ( mapUuid.isEmpty() ) //disable rotation from map { mRotationMap = nullptr; } else { QgsLayoutItemMap *map = qobject_cast< QgsLayoutItemMap * >( mLayout->itemByUuid( mapUuid ) ); if ( !map ) { return; } mPictureRotation = map->mapRotation(); connect( map, &QgsLayoutItemMap::mapRotationChanged, this, &QgsLayoutItemPicture::updateMapRotation ); connect( map, &QgsLayoutItemMap::extentChanged, this, &QgsLayoutItemPicture::updateMapRotation ); mRotationMap = map; updateMapRotation(); emit pictureRotationChanged( mPictureRotation ); } }
void QgsComposerPicture::setPictureRotation( double r ) { mPictureRotation = r; if ( mResizeMode == Zoom ) { //find largest scaling of picture with this rotation which fits in item QSizeF currentPictureSize = pictureSize(); QRectF rotatedImageRect = largestRotatedRectWithinBounds( QRectF( 0, 0, currentPictureSize.width(), currentPictureSize.height() ), rect(), mPictureRotation ); mPictureWidth = rotatedImageRect.width(); mPictureHeight = rotatedImageRect.height(); update(); } emit pictureRotationChanged( mPictureRotation ); }