Skip to content

Commit 5462e40

Browse files
committed
Fix missing labels when map is rotated (fix #12388)
1 parent b284668 commit 5462e40

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

src/core/qgspallabeling.cpp

+21-3
Original file line numberDiff line numberDiff line change
@@ -3325,6 +3325,11 @@ int QgsPalLabeling::prepareLayer( QgsVectorLayer* layer, QStringList& attrNames,
33253325

33263326
// rect for clipping
33273327
lyr.extentGeom = QgsGeometry::fromRect( mMapSettings->visibleExtent() );
3328+
if ( !qgsDoubleNear( mMapSettings->rotation(), 0.0 ) )
3329+
{
3330+
//PAL features are prerotated, so extent also needs to be unrotated
3331+
lyr.extentGeom->rotate( -mMapSettings->rotation(), mMapSettings->visibleExtent().center() );
3332+
}
33283333

33293334
lyr.mFeatsSendingToPal = 0;
33303335

@@ -3562,6 +3567,11 @@ void QgsPalLabeling::registerDiagramFeature( const QString& layerID, QgsFeature&
35623567
//convert geom to geos
35633568
const QgsGeometry* geom = feat.constGeometry();
35643569
QScopedPointer<QgsGeometry> extentGeom( QgsGeometry::fromRect( mMapSettings->visibleExtent() ) );
3570+
if ( !qgsDoubleNear( mMapSettings->rotation(), 0.0 ) )
3571+
{
3572+
//PAL features are prerotated, so extent also needs to be unrotated
3573+
extentGeom->rotate( -mMapSettings->rotation(), mMapSettings->visibleExtent().center() );
3574+
}
35653575

35663576
const GEOSGeometry* geos_geom = 0;
35673577
QScopedPointer<QgsGeometry> preparedGeom;
@@ -4036,7 +4046,16 @@ void QgsPalLabeling::drawLabeling( QgsRenderContext& context )
40364046
{
40374047
Q_ASSERT( mMapSettings != NULL );
40384048
QPainter* painter = context.painter();
4039-
QgsRectangle extent = context.extent();
4049+
4050+
QgsGeometry* extentGeom( QgsGeometry::fromRect( mMapSettings->visibleExtent() ) );
4051+
if ( !qgsDoubleNear( mMapSettings->rotation(), 0.0 ) )
4052+
{
4053+
//PAL features are prerotated, so extent also needs to be unrotated
4054+
extentGeom->rotate( -mMapSettings->rotation(), mMapSettings->visibleExtent().center() );
4055+
}
4056+
4057+
QgsRectangle extent = extentGeom->boundingBox();
4058+
delete extentGeom;
40404059

40414060
mPal->registerCancellationCallback( &_palIsCancelled, &context );
40424061

@@ -4048,8 +4067,7 @@ void QgsPalLabeling::drawLabeling( QgsRenderContext& context )
40484067

40494068
// do the labeling itself
40504069
double scale = mMapSettings->scale(); // scale denominator
4051-
QgsRectangle r = extent;
4052-
double bbox[] = { r.xMinimum(), r.yMinimum(), r.xMaximum(), r.yMaximum() };
4070+
double bbox[] = { extent.xMinimum(), extent.yMinimum(), extent.xMaximum(), extent.yMaximum() };
40534071

40544072
std::list<LabelPosition*>* labels;
40554073
pal::Problem* problem;

0 commit comments

Comments
 (0)