Skip to content

Commit 1be5fbd

Browse files
committedJun 9, 2017
More consistency across scale API
Use a real scale widget for point displacement label scale
1 parent a3d919d commit 1be5fbd

36 files changed

+296
-224
lines changed
 

‎doc/api_break.dox

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1067,6 +1067,8 @@ QgsDxfExport {#qgis_api_break_3_0_QgsDxfExport}
10671067
- The signature for writeLine() has changed.
10681068
- writePoint(), writeFilledCircle(), writeCircle(), writeText() and writeMText() now take QgsPointV2 arguments
10691069
- setMapUnits() was removed. The map units are dictated by the units for the destination CRS.
1070+
- setSymbologyScaleDenominator() and symbologyScaleDenominator() were renamed to setSymbologyScale() and symbologyScale()
1071+
for consistency with other parts of the QGIS API.
10701072

10711073

10721074
QgsEditFormConfig {#qgis_api_break_3_0_QgsEditFormConfig}
@@ -1781,6 +1783,8 @@ QgsPointDisplacementRenderer {#qgis_api_break_3_0_QgsPointDisplacementRen
17811783
----------------------------
17821784

17831785
- The deprecated method setDisplacementGroups() has been removed. This method has had no effect since QGIS 2.4
1786+
- setMaxLabelScaleDenominator() and maxLabelScaleDenominator() were renamed to setMinimumLabelScale() and
1787+
minimumLabelScale() for consistency with other areas in the QGIS API.
17841788

17851789

17861790
QgsPointLocator {#qgis_api_break_3_0_QgsPointLocator}
@@ -2442,6 +2446,8 @@ QgsCoordinateReferenceSystem is now implicitly shared, using references to QgsCo
24422446
pointers makes for more robust, safer code. Use an invalid (default constructed) QgsCoordinateReferenceSystem
24432447
in code which previously passed a null pointer to QgsVectorFileWriter.
24442448
- writeAsVectorFormat() now takes a QgsCoordinateTransform reference, not a pointer. An invalid QgsCoordinateTransform should be used instead of a null pointer if no transformation is required.
2449+
- setSymbologyScaleDenominator() and symbologyScaleDenominator() were renamed to setSymbologyScale() and symbologyScale()
2450+
for consistency with other parts of the QGIS API.
24452451

24462452

24472453
QgsWMSLegendNode {#qgis_api_break_3_0_QgsWMSLegendNode}

‎python/core/dxf/qgsdxfexport.sip

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,20 @@ class QgsDxfExport
4343

4444
int writeToFile( QIODevice *d, const QString &codec ); //maybe add progress dialog? other parameters (e.g. scale, dpi)?
4545

46-
void setSymbologyScaleDenominator( double d );
46+
void setSymbologyScale( double scale );
4747
%Docstring
48-
Set reference scale for output
49-
\param d scale denominator
48+
Set reference ``scale`` for output.
49+
The ``scale`` value indicates the scale denominator, e.g. 1000.0 for a 1:1000 map.
50+
.. versionadded:: 3.0
51+
.. seealso:: symbologyScale()
5052
%End
5153

52-
double symbologyScaleDenominator() const;
54+
double symbologyScale() const;
5355
%Docstring
54-
Retrieve reference scale for output
55-
:return: reference scale
56-
.. seealso:: setSymbologyScaleDenominator
56+
Returns the reference scale for output.
57+
The scale value indicates the scale denominator, e.g. 1000.0 for a 1:1000 map.
58+
.. versionadded:: 3.0
59+
.. seealso:: setSymbologyScale()
5760
:rtype: float
5861
%End
5962

@@ -263,9 +266,10 @@ class QgsDxfExport
263266
.. versionadded:: 2.15
264267
%End
265268

266-
static double mapUnitScaleFactor( double scaleDenominator, QgsUnitTypes::RenderUnit symbolUnits, QgsUnitTypes::DistanceUnit mapUnits );
269+
static double mapUnitScaleFactor( double scale, QgsUnitTypes::RenderUnit symbolUnits, QgsUnitTypes::DistanceUnit mapUnits );
267270
%Docstring
268-
Calculates a scaling factor to convert from map units to a specified symbol unit.
271+
Calculates a scaling factor to convert from map units to a specified symbol unit.
272+
The ``scale`` parameter indicates the scale denominator, e.g. 1000.0 for a 1:1000 map.
269273
:rtype: float
270274
%End
271275

‎python/core/layertree/qgslayertreemodel.sip

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,12 +211,22 @@ Return at what number of legend nodes the layer node should be collapsed. -1 mea
211211
:rtype: int
212212
%End
213213

214-
void setLegendFilterByScale( double scaleDenominator );
214+
void setLegendFilterByScale( double scale );
215215
%Docstring
216+
Force only display of legend nodes which are valid for a given ``scale``.
217+
The ``scale`` value indicates the scale denominator, e.g. 1000.0 for a 1:1000 map.
218+
Setting ``scale`` <= 0 will disable the functionality.
216219
.. versionadded:: 2.6
220+
.. seealso:: legendFilterByScale()
217221
%End
222+
218223
double legendFilterByScale() const;
219224
%Docstring
225+
Returns the scale which restricts the legend nodes which are visible.
226+
The scale value indicates the scale denominator, e.g. 1000.0 for a 1:1000 map.
227+
A scale <= 0 indicates that no scale filtering is being performed.
228+
.. versionadded:: 2.6
229+
.. seealso:: setLegendFilterByScale()
220230
:rtype: float
221231
%End
222232

‎python/core/qgsvectorfilewriter.sip

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -544,11 +544,22 @@ Close opened shapefile for writing
544544
%End
545545
void setSymbologyExport( QgsVectorFileWriter::SymbologyExport symExport );
546546

547-
double symbologyScaleDenominator() const;
547+
double symbologyScale() const;
548548
%Docstring
549+
Returns the reference scale for output.
550+
The scale value indicates the scale denominator, e.g. 1000.0 for a 1:1000 map.
551+
.. versionadded:: 3.0
552+
.. seealso:: setSymbologyScale()
549553
:rtype: float
550554
%End
551-
void setSymbologyScaleDenominator( double d );
555+
556+
void setSymbologyScale( double scale );
557+
%Docstring
558+
Set reference ``scale`` for output.
559+
The ``scale`` value indicates the scale denominator, e.g. 1000.0 for a 1:1000 map.
560+
.. versionadded:: 3.0
561+
.. seealso:: symbologyScale()
562+
%End
552563

553564
static bool driverMetadata( const QString &driverName, MetaData &driverMetadata );
554565
%Docstring

‎python/core/symbology-ng/qgspointdistancerenderer.sip

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ Optional label text
106106
.. seealso:: labelAttributeName()
107107
.. seealso:: setLabelFont()
108108
.. seealso:: setLabelColor()
109-
.. seealso:: setMaxLabelScaleDenominator()
109+
.. seealso:: setMinimumLabelScale()
110110
%End
111111

112112
QString labelAttributeName() const;
@@ -115,7 +115,7 @@ Optional label text
115115
will be done by the renderer.
116116
.. seealso:: setLabelAttributeName()
117117
.. seealso:: labelFont()
118-
.. seealso:: maxLabelScaleDenominator()
118+
.. seealso:: minimumLabelScale()
119119
.. seealso:: labelColor()
120120
:rtype: str
121121
%End
@@ -138,18 +138,19 @@ Optional label text
138138
:rtype: QFont
139139
%End
140140

141-
void setMaxLabelScaleDenominator( double denominator );
141+
void setMinimumLabelScale( double scale );
142142
%Docstring
143-
Sets the maximum scale at which points should be labeled by the renderer.
144-
\param denominator maximum scale denominator
145-
.. seealso:: maxLabelScaleDenominator()
143+
Sets the minimum map ``scale`` (i.e. most "zoomed out") at which points should be labeled by the renderer.
144+
The ``scale`` value indicates the scale denominator, e.g. 1000.0 for a 1:1000 map.
145+
.. seealso:: minimumLabelScale()
146146
.. seealso:: setLabelAttributeName()
147147
%End
148148

149-
double maxLabelScaleDenominator() const;
149+
double minimumLabelScale() const;
150150
%Docstring
151-
Returns the denominator for the maximum scale at which points should be labeled by the renderer.
152-
.. seealso:: setMaxLabelScaleDenominator()
151+
Returns the minimum map scale (i.e. most "zoomed out") at which points should be labeled by the renderer.
152+
The scale value indicates the scale denominator, e.g. 1000.0 for a 1:1000 map.
153+
.. seealso:: setMinimumLabelScale()
153154
.. seealso:: labelAttributeName()
154155
:rtype: float
155156
%End

‎src/app/main.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ int main( int argc, char *argv[] )
511511

512512
QString dxfOutputFile;
513513
QgsDxfExport::SymbologyExport dxfSymbologyMode = QgsDxfExport::SymbolLayerSymbology;
514-
double dxfScaleDenom = 50000.0;
514+
double dxfScale = 50000.0;
515515
QString dxfEncoding = QStringLiteral( "CP1252" );
516516
QString dxfPreset;
517517
QgsRectangle dxfExtent;
@@ -702,7 +702,7 @@ int main( int argc, char *argv[] )
702702
{
703703
bool ok;
704704
QString scale( args[++i] );
705-
dxfScaleDenom = scale.toDouble( &ok );
705+
dxfScale = scale.toDouble( &ok );
706706
if ( !ok )
707707
{
708708
std::cerr << "invalid dxf scale " << scale.toStdString() << std::endl;
@@ -1236,7 +1236,7 @@ int main( int argc, char *argv[] )
12361236
qgis->hide();
12371237

12381238
QgsDxfExport dxfExport;
1239-
dxfExport.setSymbologyScaleDenominator( dxfScaleDenom );
1239+
dxfExport.setSymbologyScale( dxfScale );
12401240
dxfExport.setSymbologyExport( dxfSymbologyMode );
12411241
dxfExport.setExtent( dxfExtent );
12421242

‎src/app/qgisapp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5406,7 +5406,7 @@ void QgisApp::dxfExport()
54065406
settings.setLayerStyleOverrides( QgsProject::instance()->mapThemeCollection()->mapThemeStyleOverrides( d.mapTheme() ) );
54075407
dxfExport.setMapSettings( settings );
54085408
dxfExport.addLayers( d.layers() );
5409-
dxfExport.setSymbologyScaleDenominator( d.symbologyScale() );
5409+
dxfExport.setSymbologyScale( d.symbologyScale() );
54105410
dxfExport.setSymbologyExport( d.symbologyMode() );
54115411
dxfExport.setLayerTitleAsName( d.layerTitleAsName() );
54125412
dxfExport.setDestinationCrs( d.crs() );

‎src/core/dxf/qgsdxfexport.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ const char *QgsDxfExport::DXF_ENCODINGS[][2] =
367367
};
368368

369369
QgsDxfExport::QgsDxfExport()
370-
: mSymbologyScaleDenominator( 1.0 )
370+
: mSymbologyScale( 1.0 )
371371
, mSymbologyExport( NoSymbology )
372372
, mMapUnits( QgsUnitTypes::DistanceMeters )
373373
, mLayerTitleAsName( false )
@@ -387,7 +387,7 @@ QgsDxfExport &QgsDxfExport::operator=( const QgsDxfExport &dxfExport )
387387
{
388388
mMapSettings = dxfExport.mMapSettings;
389389
mLayerNameAttribute = dxfExport.mLayerNameAttribute;
390-
mSymbologyScaleDenominator = dxfExport.mSymbologyScaleDenominator;
390+
mSymbologyScale = dxfExport.mSymbologyScale;
391391
mSymbologyExport = dxfExport.mSymbologyExport;
392392
mMapUnits = dxfExport.mMapUnits;
393393
mLayerTitleAsName = dxfExport.mLayerTitleAsName;
@@ -540,7 +540,7 @@ int QgsDxfExport::writeToFile( QIODevice *d, const QString &encoding )
540540
mMapSettings.setExtent( mExtent );
541541

542542
int dpi = 96;
543-
mFactor = 1000 * dpi / mSymbologyScaleDenominator / 25.4 * QgsUnitTypes::fromUnitToUnitFactor( mapUnits, QgsUnitTypes::DistanceMeters );
543+
mFactor = 1000 * dpi / mSymbologyScale / 25.4 * QgsUnitTypes::fromUnitToUnitFactor( mapUnits, QgsUnitTypes::DistanceMeters );
544544
mMapSettings.setOutputSize( QSize( mExtent.width() * mFactor, mExtent.height() * mFactor ) );
545545
mMapSettings.setOutputDpi( dpi );
546546
if ( mCrs.isValid() )
@@ -921,13 +921,13 @@ void QgsDxfExport::writeBlocks()
921921
// x/y/z coordinates of reference point
922922
// todo: consider anchor point
923923
// double size = ml->size();
924-
// size *= mapUnitScaleFactor( mSymbologyScaleDenominator, ml->sizeUnit(), mMapUnits );
924+
// size *= mapUnitScaleFactor( mSymbologyScale, ml->sizeUnit(), mMapUnits );
925925
writeGroup( 0, QgsPoint( QgsWkbTypes::PointZ ) );
926926
writeGroup( 3, block );
927927
writeGroup( 1, QLatin1String( "" ) );
928928

929929
// maplayer 0 -> block receives layer from INSERT statement
930-
ml->writeDxf( *this, mapUnitScaleFactor( mSymbologyScaleDenominator, ml->sizeUnit(), mMapUnits ), QStringLiteral( "0" ), ctx );
930+
ml->writeDxf( *this, mapUnitScaleFactor( mSymbologyScale, ml->sizeUnit(), mMapUnits ), QStringLiteral( "0" ), ctx );
931931

932932
writeGroup( 0, QStringLiteral( "ENDBLK" ) );
933933
writeHandle();
@@ -956,7 +956,7 @@ void QgsDxfExport::writeEntities()
956956

957957
QgsRenderContext ctx;
958958
ctx.setPainter( &painter );
959-
ctx.setRendererScale( mSymbologyScaleDenominator );
959+
ctx.setRendererScale( mSymbologyScale );
960960
ctx.setExtent( mExtent );
961961

962962
ctx.setScaleFactor( 96.0 / 25.4 );
@@ -3398,7 +3398,7 @@ void QgsDxfExport::writePoint( const QgsPoint &pt, const QString &layer, const Q
33983398
const QgsMarkerSymbolLayer *msl = dynamic_cast< const QgsMarkerSymbolLayer * >( symbolLayer );
33993399
if ( msl )
34003400
{
3401-
double halfSize = msl->size() * mapUnitScaleFactor( mSymbologyScaleDenominator,
3401+
double halfSize = msl->size() * mapUnitScaleFactor( mSymbologyScale,
34023402
msl->sizeUnit(), mMapUnits ) / 2.0;
34033403
writeGroup( 0, "SOLID" );
34043404
writeGroup( 8, layer );
@@ -3418,7 +3418,7 @@ void QgsDxfExport::writePoint( const QgsPoint &pt, const QString &layer, const Q
34183418
const QgsMarkerSymbolLayer *msl = dynamic_cast< const QgsMarkerSymbolLayer * >( symbolLayer );
34193419
if ( msl && symbol )
34203420
{
3421-
if ( symbolLayer->writeDxf( *this, mapUnitScaleFactor( mSymbologyScaleDenominator, msl->sizeUnit(), mMapUnits ), layer, ctx, QPointF( pt.x(), pt.y() ) ) )
3421+
if ( symbolLayer->writeDxf( *this, mapUnitScaleFactor( mSymbologyScale, msl->sizeUnit(), mMapUnits ), layer, ctx, QPointF( pt.x(), pt.y() ) ) )
34223422
{
34233423
return;
34243424
}
@@ -3960,18 +3960,18 @@ QRgb QgsDxfExport::createRgbEntry( qreal r, qreal g, qreal b )
39603960
QgsRenderContext QgsDxfExport::renderContext() const
39613961
{
39623962
QgsRenderContext context;
3963-
context.setRendererScale( mSymbologyScaleDenominator );
3963+
context.setRendererScale( mSymbologyScale );
39643964
return context;
39653965
}
39663966

3967-
double QgsDxfExport::mapUnitScaleFactor( double scaleDenominator, QgsUnitTypes::RenderUnit symbolUnits, QgsUnitTypes::DistanceUnit mapUnits )
3967+
double QgsDxfExport::mapUnitScaleFactor( double scale, QgsUnitTypes::RenderUnit symbolUnits, QgsUnitTypes::DistanceUnit mapUnits )
39683968
{
39693969
if ( symbolUnits == QgsUnitTypes::RenderMapUnits )
39703970
{
39713971
return 1.0;
39723972
}
39733973
// MM symbol unit
3974-
return scaleDenominator * QgsUnitTypes::fromUnitToUnitFactor( QgsUnitTypes::DistanceMeters, mapUnits ) / 1000.0;
3974+
return scale * QgsUnitTypes::fromUnitToUnitFactor( QgsUnitTypes::DistanceMeters, mapUnits ) / 1000.0;
39753975
}
39763976

39773977
QList< QPair< QgsSymbolLayer *, QgsSymbol * > > QgsDxfExport::symbolLayers( QgsRenderContext &context )
@@ -4102,7 +4102,7 @@ void QgsDxfExport::writeLinetype( const QString &styleName, const QVector<qreal>
41024102
QVector<qreal>::const_iterator dashIt = pattern.constBegin();
41034103
for ( ; dashIt != pattern.constEnd(); ++dashIt )
41044104
{
4105-
length += ( *dashIt * mapUnitScaleFactor( mSymbologyScaleDenominator, u, mMapUnits ) );
4105+
length += ( *dashIt * mapUnitScaleFactor( mSymbologyScale, u, mMapUnits ) );
41064106
}
41074107

41084108
writeGroup( 0, QStringLiteral( "LTYPE" ) );
@@ -4123,7 +4123,7 @@ void QgsDxfExport::writeLinetype( const QString &styleName, const QVector<qreal>
41234123
{
41244124
// map units or mm?
41254125
double segmentLength = ( isGap ? -*dashIt : *dashIt );
4126-
segmentLength *= mapUnitScaleFactor( mSymbologyScaleDenominator, u, mMapUnits );
4126+
segmentLength *= mapUnitScaleFactor( mSymbologyScale, u, mMapUnits );
41274127
writeGroup( 49, segmentLength );
41284128
writeGroup( 74, 0 );
41294129
isGap = !isGap;
@@ -4147,19 +4147,19 @@ bool QgsDxfExport::hasDataDefinedProperties( const QgsSymbolLayer *sl, const Qgs
41474147

41484148
double QgsDxfExport::dashSize() const
41494149
{
4150-
double size = mSymbologyScaleDenominator * 0.002;
4150+
double size = mSymbologyScale * 0.002;
41514151
return sizeToMapUnits( size );
41524152
}
41534153

41544154
double QgsDxfExport::dotSize() const
41554155
{
4156-
double size = mSymbologyScaleDenominator * 0.0006;
4156+
double size = mSymbologyScale * 0.0006;
41574157
return sizeToMapUnits( size );
41584158
}
41594159

41604160
double QgsDxfExport::dashSeparatorSize() const
41614161
{
4162-
double size = mSymbologyScaleDenominator * 0.0006;
4162+
double size = mSymbologyScale * 0.0006;
41634163
return sizeToMapUnits( size );
41644164
}
41654165

@@ -4227,7 +4227,7 @@ bool QgsDxfExport::layerIsScaleBasedVisible( const QgsMapLayer *layer ) const
42274227
if ( mSymbologyExport == QgsDxfExport::NoSymbology )
42284228
return true;
42294229

4230-
return layer->isInScaleRange( mSymbologyScaleDenominator );
4230+
return layer->isInScaleRange( mSymbologyScale );
42314231
}
42324232

42334233
QString QgsDxfExport::layerName( const QString &id, const QgsFeature &f ) const

‎src/core/dxf/qgsdxfexport.h

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -79,17 +79,20 @@ class CORE_EXPORT QgsDxfExport
7979
int writeToFile( QIODevice *d, const QString &codec ); //maybe add progress dialog? other parameters (e.g. scale, dpi)?
8080

8181
/**
82-
* Set reference scale for output
83-
* \param d scale denominator
82+
* Set reference \a scale for output.
83+
* The \a scale value indicates the scale denominator, e.g. 1000.0 for a 1:1000 map.
84+
* \since QGIS 3.0
85+
* \see symbologyScale()
8486
*/
85-
void setSymbologyScaleDenominator( double d ) { mSymbologyScaleDenominator = d; }
87+
void setSymbologyScale( double scale ) { mSymbologyScale = scale; }
8688

8789
/**
88-
* Retrieve reference scale for output
89-
* \returns reference scale
90-
* \see setSymbologyScaleDenominator
90+
* Returns the reference scale for output.
91+
* The scale value indicates the scale denominator, e.g. 1000.0 for a 1:1000 map.
92+
* \since QGIS 3.0
93+
* \see setSymbologyScale()
9194
*/
92-
double symbologyScaleDenominator() const { return mSymbologyScaleDenominator; }
95+
double symbologyScale() const { return mSymbologyScale; }
9396

9497
/**
9598
* Retrieve map units
@@ -300,8 +303,11 @@ class CORE_EXPORT QgsDxfExport
300303
//! \since QGIS 2.15
301304
void writeMText( const QString &layer, const QString &text, const QgsPoint &pt, double width, double angle, const QColor &color );
302305

303-
//! Calculates a scaling factor to convert from map units to a specified symbol unit.
304-
static double mapUnitScaleFactor( double scaleDenominator, QgsUnitTypes::RenderUnit symbolUnits, QgsUnitTypes::DistanceUnit mapUnits );
306+
/**
307+
* Calculates a scaling factor to convert from map units to a specified symbol unit.
308+
* The \a scale parameter indicates the scale denominator, e.g. 1000.0 for a 1:1000 map.
309+
*/
310+
static double mapUnitScaleFactor( double scale, QgsUnitTypes::RenderUnit symbolUnits, QgsUnitTypes::DistanceUnit mapUnits );
305311

306312
//! Return cleaned layer name for use in DXF
307313
static QString dxfLayerName( const QString &name );
@@ -332,7 +338,7 @@ class CORE_EXPORT QgsDxfExport
332338
//! Extent for export, only intersecting features are exported. If the extent is an empty rectangle, all features are exported
333339
QgsRectangle mExtent;
334340
//! Scale for symbology export (used if symbols units are mm)
335-
double mSymbologyScaleDenominator;
341+
double mSymbologyScale;
336342
SymbologyExport mSymbologyExport;
337343
QgsUnitTypes::DistanceUnit mMapUnits;
338344
bool mLayerTitleAsName;

0 commit comments

Comments
 (0)
Please sign in to comment.