@@ -379,50 +379,28 @@ bool QgsMapToolFreezeLabels::freezeThawLabel( QgsVectorLayer* vlayer,
379
379
QgsDebugMsg ( QString ( " Label is diagram, skipping" ) );
380
380
return false ;
381
381
}
382
- // verify attribute table has proper fields setup
383
- bool xColOk, yColOk, rColOk;
384
- int xCol, yCol, rCol;
385
382
386
- QVariant xColumn = vlayer->customProperty ( " labeling/dataDefinedProperty9" );
387
- if ( !xColumn.isValid () )
388
- {
389
- QgsDebugMsg ( QString ( " X column not set" ) );
390
- return false ;
391
- }
392
- xCol = xColumn.toInt ( &xColOk );
393
- if ( !xColOk )
394
- {
395
- QgsDebugMsg ( QString ( " X column not convertible to integer" ) );
396
- return false ;
397
- }
383
+ // verify attribute table has x, y fields mapped
384
+ int xCol, yCol;
385
+ double xPosOrig, yPosOrig;
386
+ bool xSuccess, ySuccess;
398
387
399
- QVariant yColumn = vlayer->customProperty ( " labeling/dataDefinedProperty10" );
400
- if ( !yColumn.isValid () )
401
- {
402
- QgsDebugMsg ( QString ( " Y column not set" ) );
403
- return false ;
404
- }
405
- yCol = yColumn.toInt ( &yColOk );
406
- if ( !yColOk )
388
+ if ( !dataDefinedPosition ( vlayer, mCurrentLabelPos .featureId , xPosOrig, xSuccess, yPosOrig, ySuccess, xCol, yCol ) )
407
389
{
408
- QgsDebugMsg ( QString ( " Y column not convertible to integer " ) );
390
+ QgsDebugMsg ( QString ( " Label X or Y column not mapped, skipping " ) );
409
391
return false ;
410
392
}
411
393
412
- // rotation field is optional, but will be used if available
413
- bool hasRCol = true ;
414
- QVariant rColumn = vlayer->customProperty ( " labeling/dataDefinedProperty14" );
415
- if ( !rColumn.isValid () )
416
- {
417
- QgsDebugMsg ( QString ( " Rotation column not set" ) );
418
- hasRCol = false ;
419
- }
420
- rCol = rColumn.toInt ( &rColOk );
421
- if ( !rColOk )
422
- {
423
- QgsDebugMsg ( QString ( " Rotation column not convertible to integer" ) );
424
- hasRCol = false ;
425
- }
394
+ // rotation field is optional, but will be used if available, unless data exists
395
+ int rCol;
396
+ bool rSuccess = false ;
397
+ double defRot;
398
+
399
+ bool hasRCol = ( layerIsRotatable ( vlayer, rCol )
400
+ && dataDefinedRotation ( vlayer, mCurrentLabelPos .featureId , defRot, rSuccess, true ) );
401
+
402
+ // get whether to preserve predefined rotation data during label freeze/thaw operations
403
+ bool preserveRot = preserveRotation ();
426
404
427
405
// edit attribute table
428
406
int fid = labelpos.featureId ;
@@ -464,7 +442,7 @@ bool QgsMapToolFreezeLabels::freezeThawLabel( QgsVectorLayer* vlayer,
464
442
QgsDebugMsg ( failedWrite );
465
443
return false ;
466
444
}
467
- if ( hasRCol )
445
+ if ( hasRCol && !preserveRot )
468
446
{
469
447
if ( !vlayer->changeAttributeValue ( fid, rCol, labelR, false ) )
470
448
{
@@ -487,7 +465,7 @@ bool QgsMapToolFreezeLabels::freezeThawLabel( QgsVectorLayer* vlayer,
487
465
QgsDebugMsg ( failedWrite );
488
466
return false ;
489
467
}
490
- if ( hasRCol )
468
+ if ( hasRCol && !preserveRot )
491
469
{
492
470
if ( !vlayer->changeAttributeValue ( fid, rCol, QVariant (), false ) )
493
471
{
0 commit comments