@@ -79,10 +79,27 @@ QgsMeasureDialog::QgsMeasureDialog( QgsMeasureTool *tool, Qt::WindowFlags f )
79
79
connect ( mUnitsCombo , static_cast <void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this , &QgsMeasureDialog::unitsChanged );
80
80
connect ( buttonBox, &QDialogButtonBox::rejected, this , &QgsMeasureDialog::reject );
81
81
connect ( mCanvas , &QgsMapCanvas::destinationCrsChanged, this , &QgsMeasureDialog::crsChanged );
82
+ connect ( mCartesian , &QRadioButton::toggled, this , &QgsMeasureDialog::projChanged );
82
83
83
84
groupBox->setCollapsed ( true );
84
85
}
85
86
87
+ void QgsMeasureDialog::projChanged ()
88
+ {
89
+ if ( mCartesian ->isChecked () )
90
+ {
91
+ mDa .setEllipsoid ( GEO_NONE );
92
+ }
93
+ else
94
+ {
95
+ mDa .setEllipsoid ( QgsProject::instance ()->ellipsoid () );
96
+ }
97
+
98
+ mTable ->clear ();
99
+ mTotal = 0 .;
100
+ updateUi ();
101
+ }
102
+
86
103
void QgsMeasureDialog::openConfigTab ()
87
104
{
88
105
QgisApp::instance ()->showOptionsDialog ( this , QStringLiteral ( " mOptionsPageMapTools" ) );
@@ -102,6 +119,9 @@ void QgsMeasureDialog::crsChanged()
102
119
{
103
120
mUnitsCombo ->setEnabled ( true );
104
121
}
122
+
123
+ mTable ->clear ();
124
+ mTotal = 0 .;
105
125
updateUi ();
106
126
}
107
127
@@ -116,23 +136,18 @@ void QgsMeasureDialog::updateSettings()
116
136
mMapDistanceUnits = QgsProject::instance ()->crs ().mapUnits ();
117
137
mAreaUnits = QgsProject::instance ()->areaUnits ();
118
138
mDa .setSourceCrs ( mCanvas ->mapSettings ().destinationCrs (), QgsProject::instance ()->transformContext () );
119
- mDa . setEllipsoid ( QgsProject::instance ()-> ellipsoid () );
139
+ projChanged ( );
120
140
121
- mTable ->clear ();
122
- mTotal = 0 ;
123
- updateUi ();
124
141
125
- if ( !mCanvas ->mapSettings ().destinationCrs ().isValid () ||
142
+ if ( mCartesian -> isChecked () || !mCanvas ->mapSettings ().destinationCrs ().isValid () ||
126
143
( mCanvas ->mapSettings ().destinationCrs ().mapUnits () == QgsUnitTypes::DistanceDegrees
127
144
&& mDistanceUnits == QgsUnitTypes::DistanceDegrees ) )
128
145
{
129
146
mDa .setEllipsoid ( GEO_NONE );
130
- mForceCartesian = true ;
131
147
}
132
148
else
133
149
{
134
150
mDa .setEllipsoid ( QgsProject::instance ()->ellipsoid () );
135
- mForceCartesian = false ;
136
151
}
137
152
}
138
153
@@ -164,6 +179,7 @@ void QgsMeasureDialog::unitsChanged( int index )
164
179
mUseMapUnits = false ;
165
180
}
166
181
}
182
+
167
183
mTable ->clear ();
168
184
mTotal = 0 .;
169
185
updateUi ();
@@ -188,19 +204,6 @@ void QgsMeasureDialog::restart()
188
204
189
205
void QgsMeasureDialog::mouseMove ( const QgsPointXY &point )
190
206
{
191
- if ( !mCanvas ->mapSettings ().destinationCrs ().isValid () ||
192
- ( mCanvas ->mapSettings ().destinationCrs ().mapUnits () == QgsUnitTypes::DistanceDegrees
193
- && mDistanceUnits == QgsUnitTypes::DistanceDegrees ) )
194
- {
195
- mDa .setEllipsoid ( GEO_NONE );
196
- mForceCartesian = true ;
197
- }
198
- else
199
- {
200
- mDa .setEllipsoid ( QgsProject::instance ()->ellipsoid () );
201
- mForceCartesian = false ;
202
- }
203
-
204
207
mLastMousePoint = point;
205
208
// show current distance/area while moving the point
206
209
// by creating a temporary copy of point array
@@ -217,9 +220,8 @@ void QgsMeasureDialog::mouseMove( const QgsPointXY &point )
217
220
QVector< QgsPointXY > tmpPoints = mTool ->points ();
218
221
QgsPointXY p1 ( tmpPoints.at ( tmpPoints.size () - 1 ) ), p2 ( point );
219
222
double d = mDa .measureLine ( p1, p2 );
220
- editTotal->setText ( formatDistance ( mTotal + d, !mForceCartesian ) );
221
- if ( !mForceCartesian )
222
- d = convertLength ( d, mDistanceUnits );
223
+ editTotal->setText ( formatDistance ( mTotal + d, mConvertToDisplayUnits ) );
224
+ d = convertLength ( d, mDistanceUnits );
223
225
224
226
// Set moving
225
227
QTreeWidgetItem *item = mTable ->topLevelItem ( mTable ->topLevelItemCount () - 1 );
@@ -250,7 +252,7 @@ void QgsMeasureDialog::addPoint()
250
252
if ( numPoints > 1 )
251
253
{
252
254
mTotal = mDa .measureLine ( mTool ->points () );
253
- editTotal->setText ( formatDistance ( mTotal , ! mForceCartesian ) );
255
+ editTotal->setText ( formatDistance ( mTotal , mConvertToDisplayUnits ) );
254
256
}
255
257
}
256
258
}
@@ -294,7 +296,7 @@ void QgsMeasureDialog::removeLastPoint()
294
296
}
295
297
else
296
298
{
297
- editTotal->setText ( formatDistance ( mTotal , ! mForceCartesian ) );
299
+ editTotal->setText ( formatDistance ( mTotal , mConvertToDisplayUnits ) );
298
300
}
299
301
}
300
302
}
@@ -359,19 +361,25 @@ void QgsMeasureDialog::updateUi()
359
361
QString toolTip = tr ( " The calculations are based on:" );
360
362
361
363
mDa .setEllipsoid ( QgsProject::instance ()->ellipsoid () );
362
- mForceCartesian = false ;
363
- bool convertToDisplayUnits = true ;
364
+ mConvertToDisplayUnits = true ;
364
365
365
366
if ( mMeasureArea )
366
367
{
367
- if ( !mCanvas ->mapSettings ().destinationCrs ().isValid () )
368
+ if ( mCartesian -> isChecked () || !mCanvas ->mapSettings ().destinationCrs ().isValid () )
368
369
{
369
- // no CRS => no units, newb!
370
- toolTip += " <br> * " + tr ( " No map projection set, so area is calculated using Cartesian calculations." );
371
- toolTip += " <br> * " + tr ( " Units are unknown." );
370
+ toolTip += " <br> * " ;
371
+ if ( mCartesian ->isChecked () )
372
+ {
373
+ toolTip += tr ( " Cartesian calculation selected, so area is calculated using Cartesian calculations." );
374
+ mConvertToDisplayUnits = true ;
375
+ }
376
+ else
377
+ {
378
+ toolTip += tr ( " No map projection set, so area is calculated using Cartesian calculations." );
379
+ toolTip += " <br> * " + tr ( " Units are unknown." );
380
+ mConvertToDisplayUnits = false ;
381
+ }
372
382
mDa .setEllipsoid ( GEO_NONE );
373
- mForceCartesian = true ;
374
- convertToDisplayUnits = false ;
375
383
}
376
384
else if ( mCanvas ->mapSettings ().destinationCrs ().mapUnits () == QgsUnitTypes::DistanceDegrees
377
385
&& ( mAreaUnits == QgsUnitTypes::AreaSquareDegrees || mAreaUnits == QgsUnitTypes::AreaUnknownUnit ) )
@@ -380,8 +388,7 @@ void QgsMeasureDialog::updateUi()
380
388
toolTip += " <br> * " + tr ( " Both project CRS (%1) and measured area are in degrees, so area is calculated using Cartesian calculations in square degrees." ).arg (
381
389
mCanvas ->mapSettings ().destinationCrs ().description () );
382
390
mDa .setEllipsoid ( GEO_NONE );
383
- mForceCartesian = true ;
384
- convertToDisplayUnits = false ; // not required since we will be measuring in degrees
391
+ mConvertToDisplayUnits = false ; // not required since we will be measuring in degrees
385
392
}
386
393
else
387
394
{
@@ -436,14 +443,21 @@ void QgsMeasureDialog::updateUi()
436
443
}
437
444
else
438
445
{
439
- if ( !mCanvas ->mapSettings ().destinationCrs ().isValid () )
446
+ if ( mCartesian -> isChecked () || !mCanvas ->mapSettings ().destinationCrs ().isValid () )
440
447
{
441
- // no CRS => no units, newb!
442
- toolTip += " <br> * " + tr ( " No map projection set, so distance is calculated using Cartesian calculations." );
443
- toolTip += " <br> * " + tr ( " Units are unknown." );
448
+ toolTip += " <br> * " ;
449
+ if ( mCartesian ->isChecked () )
450
+ {
451
+ toolTip += tr ( " Cartesian calculation selected, so area is calculated using Cartesian calculations." );
452
+ mConvertToDisplayUnits = true ;
453
+ }
454
+ else
455
+ {
456
+ toolTip += tr ( " No map projection set, so area is calculated using Cartesian calculations." );
457
+ toolTip += " <br> * " + tr ( " Units are unknown." );
458
+ mConvertToDisplayUnits = false ;
459
+ }
444
460
mDa .setEllipsoid ( GEO_NONE );
445
- mForceCartesian = true ;
446
- convertToDisplayUnits = false ;
447
461
}
448
462
else if ( mCanvas ->mapSettings ().destinationCrs ().mapUnits () == QgsUnitTypes::DistanceDegrees
449
463
&& mDistanceUnits == QgsUnitTypes::DistanceDegrees )
@@ -452,8 +466,7 @@ void QgsMeasureDialog::updateUi()
452
466
toolTip += " <br> * " + tr ( " Both project CRS (%1) and measured length are in degrees, so distance is calculated using Cartesian calculations in degrees." ).arg (
453
467
mCanvas ->mapSettings ().destinationCrs ().description () );
454
468
mDa .setEllipsoid ( GEO_NONE );
455
- mForceCartesian = true ;
456
- convertToDisplayUnits = false ; // not required since we will be measuring in degrees
469
+ mConvertToDisplayUnits = false ; // not required since we will be measuring in degrees
457
470
}
458
471
else
459
472
{
@@ -560,7 +573,7 @@ void QgsMeasureDialog::updateUi()
560
573
{
561
574
double d = -1 ;
562
575
d = mDa .measureLine ( p1, p2 );
563
- if ( ! mForceCartesian )
576
+ if ( mConvertToDisplayUnits )
564
577
{
565
578
if ( mDistanceUnits == QgsUnitTypes::DistanceUnknownUnit && mMapDistanceUnits != QgsUnitTypes::DistanceUnknownUnit )
566
579
d = convertLength ( d, mMapDistanceUnits );
@@ -579,7 +592,7 @@ void QgsMeasureDialog::updateUi()
579
592
580
593
mTotal = mDa .measureLine ( mTool ->points () );
581
594
mTable ->show (); // Show the table with items
582
- editTotal->setText ( formatDistance ( mTotal , convertToDisplayUnits ) );
595
+ editTotal->setText ( formatDistance ( mTotal , mConvertToDisplayUnits ) );
583
596
}
584
597
}
585
598
0 commit comments