@@ -2249,12 +2249,50 @@ void QgsPalLayerSettings::registerFeature( QgsFeature& f, const QgsRenderContext
2249
2249
#endif
2250
2250
lbl->setDefinedFont ( labelFont );
2251
2251
2252
+ // set repeat distance
2253
+ // data defined repeat distance?
2254
+ double repeatDist = repeatDistance;
2255
+ if ( dataDefinedEvaluate ( QgsPalLayerSettings::RepeatDistance, exprVal ) )
2256
+ {
2257
+ bool ok;
2258
+ double distD = exprVal.toDouble ( &ok );
2259
+ if ( ok )
2260
+ {
2261
+ repeatDist = distD;
2262
+ }
2263
+ }
2264
+
2265
+ // data defined label-repeat distance units?
2266
+ bool repeatdistinmapunit = repeatDistanceUnit == QgsPalLayerSettings::MapUnits;
2267
+ if ( dataDefinedEvaluate ( QgsPalLayerSettings::RepeatDistanceUnit, exprVal ) )
2268
+ {
2269
+ QString units = exprVal.toString ().trimmed ();
2270
+ QgsDebugMsgLevel ( QString ( " exprVal RepeatDistanceUnits:%1" ).arg ( units ), 4 );
2271
+ if ( !units.isEmpty () )
2272
+ {
2273
+ repeatdistinmapunit = ( _decodeUnits ( units ) == QgsPalLayerSettings::MapUnits );
2274
+ }
2275
+ }
2276
+
2277
+ if ( repeatDist != 0 )
2278
+ {
2279
+ if ( repeatdistinmapunit ) // convert distance from mm/map units to pixels
2280
+ {
2281
+ repeatDist /= repeatDistanceMapUnitScale.computeMapUnitsPerPixel ( context ) * context.scaleFactor ();
2282
+ }
2283
+ else // mm
2284
+ {
2285
+ repeatDist *= vectorScaleFactor;
2286
+ }
2287
+ repeatDist *= qAbs ( ptOne.x () - ptZero.x () );
2288
+ }
2289
+
2252
2290
// feature to the layer
2253
2291
try
2254
2292
{
2255
2293
if ( !palLayer->registerFeature ( lbl->strId (), lbl, labelX, labelY, labelText.toUtf8 ().constData (),
2256
2294
xPos, yPos, dataDefinedPosition, angle, dataDefinedRotation,
2257
- quadOffsetX, quadOffsetY, offsetX, offsetY, alwaysShow ) )
2295
+ quadOffsetX, quadOffsetY, offsetX, offsetY, alwaysShow, repeatDist ) )
2258
2296
return ;
2259
2297
}
2260
2298
catch ( std::exception &e )
@@ -3375,45 +3413,6 @@ int QgsPalLabeling::prepareLayer( QgsVectorLayer* layer, QStringList& attrNames,
3375
3413
// set whether location of centroid must be inside of polygons
3376
3414
l->setCentroidInside ( lyr.centroidInside );
3377
3415
3378
- // set repeat distance
3379
- // data defined repeat distance?
3380
- QVariant exprVal;
3381
- double repeatDist = lyr.repeatDistance ;
3382
- if ( lyr.dataDefinedEvaluate ( QgsPalLayerSettings::RepeatDistance, exprVal ) )
3383
- {
3384
- bool ok;
3385
- double distD = exprVal.toDouble ( &ok );
3386
- if ( ok )
3387
- {
3388
- repeatDist = distD;
3389
- }
3390
- }
3391
-
3392
- // data defined label-repeat distance units?
3393
- bool repeatdistinmapunit = lyr.repeatDistanceUnit == QgsPalLayerSettings::MapUnits;
3394
- if ( lyr.dataDefinedEvaluate ( QgsPalLayerSettings::RepeatDistanceUnit, exprVal ) )
3395
- {
3396
- QString units = exprVal.toString ().trimmed ();
3397
- QgsDebugMsgLevel ( QString ( " exprVal RepeatDistanceUnits:%1" ).arg ( units ), 4 );
3398
- if ( !units.isEmpty () )
3399
- {
3400
- repeatdistinmapunit = ( _decodeUnits ( units ) == QgsPalLayerSettings::MapUnits );
3401
- }
3402
- }
3403
-
3404
- if ( repeatDist != 0 )
3405
- {
3406
- if ( !repeatdistinmapunit ) // convert distance from mm/map units to pixels
3407
- {
3408
- repeatDist *= lyr.repeatDistanceMapUnitScale .computeMapUnitsPerPixel ( ctx ) * ctx.scaleFactor ();
3409
- }
3410
- else // mm
3411
- {
3412
- repeatDist *= lyr.vectorScaleFactor ;
3413
- }
3414
- }
3415
- l->setRepeatDistance ( repeatDist );
3416
-
3417
3416
// set how to show upside-down labels
3418
3417
Layer::UpsideDownLabels upsdnlabels;
3419
3418
switch ( lyr.upsidedownLabels )
0 commit comments