@@ -106,87 +106,86 @@ QgsComposerMap::~QgsComposerMap()
106
106
107
107
void QgsComposerMap::draw ( QPainter *painter, QgsRect *extent, QgsMapToPixel *transform)
108
108
{
109
- mMapCanvas ->freeze (true ); // necessary ?
110
- int nlayers = mMapCanvas ->layerCount ();
111
-
112
- for ( int i = 0 ; i < nlayers; i++ ) {
113
- QgsMapLayer *layer = mMapCanvas ->getZpos (i);
114
-
115
- if ( !layer->visible () ) continue ;
116
-
117
- if ( layer->type () == QgsMapLayer::VECTOR ) {
118
- QgsVectorLayer *vector = dynamic_cast <QgsVectorLayer*> (layer);
119
-
120
- double widthScale = mWidthScale * mComposition ->scale ();
121
- if ( plotStyle () == QgsComposition::Preview && mPreviewMode == Render ) {
122
- widthScale *= mComposition ->viewScale ();
123
- }
124
- double symbolScale = mSymbolScale * mComposition ->scale ();
125
-
126
- QgsRect r1, r2;
127
- r1 = *extent;
128
- bool split = layer->projectExtent (r1, r2);
129
- vector->draw ( painter, &r1, transform, FALSE , widthScale, symbolScale);
130
-
131
- if ( split )
132
- {
133
- vector->draw ( painter, &r2, transform, FALSE , widthScale, symbolScale);
134
- }
135
- } else {
136
- // raster
137
- if ( plotStyle () == QgsComposition::Print || plotStyle () == QgsComposition::Postscript ) {
138
- // we have to rescale the raster to get requested resolution
139
-
140
- // calculate relation between composition point size and requested resolution (in mm)
141
- double multip = (1 . / mComposition ->scale ()) / (25.4 / mComposition ->resolution ()) ;
142
-
143
- double sc = mExtent .width () / (multip*Q3CanvasRectangle::width ());
144
-
145
- QgsMapToPixel trans ( sc, multip*Q3CanvasRectangle::height (), mExtent .yMin (), mExtent .xMin () );
146
-
147
- painter->save ();
148
- painter->scale ( 1 ./multip, 1 ./multip);
149
-
150
- layer->draw ( painter, extent, &trans, FALSE );
109
+ mMapCanvas ->freeze (true ); // necessary ?
110
+ int nlayers = mMapCanvas ->layerCount ();
111
+
112
+ for ( int i = 0 ; i < nlayers; i++ ) {
113
+ QgsMapLayer *layer = mMapCanvas ->getZpos (i);
114
+
115
+ if ( !layer->visible () ) continue ;
116
+
117
+ if ( layer->type () == QgsMapLayer::VECTOR ) {
118
+ QgsVectorLayer *vector = dynamic_cast <QgsVectorLayer*> (layer);
119
+
120
+ double widthScale = mWidthScale * mComposition ->scale ();
121
+ if ( plotStyle () == QgsComposition::Preview && mPreviewMode == Render ) {
122
+ widthScale *= mComposition ->viewScale ();
123
+ }
124
+ double symbolScale = mSymbolScale * mComposition ->scale ();
125
+
126
+ QgsRect r1, r2;
127
+ r1 = *extent;
128
+ bool split = layer->projectExtent (r1, r2);
129
+ vector->draw ( painter, &r1, transform, FALSE , widthScale, symbolScale);
130
+
131
+ if ( split )
132
+ {
133
+ vector->draw ( painter, &r2, transform, FALSE , widthScale, symbolScale);
134
+ }
135
+ } else {
136
+ // raster
137
+ if ( plotStyle () == QgsComposition::Print || plotStyle () == QgsComposition::Postscript ) {
138
+ // we have to rescale the raster to get requested resolution
139
+
140
+ // calculate relation between composition point size and requested resolution (in mm)
141
+ double multip = (1 . / mComposition ->scale ()) / (25.4 / mComposition ->resolution ()) ;
142
+
143
+ double sc = mExtent .width () / (multip*Q3CanvasRectangle::width ());
144
+
145
+ QgsMapToPixel trans ( sc, multip*Q3CanvasRectangle::height (), mExtent .yMin (), mExtent .xMin () );
146
+
147
+ painter->save ();
148
+ painter->scale ( 1 ./multip, 1 ./multip);
149
+
150
+ layer->draw ( painter, extent, &trans, FALSE );
151
151
152
- painter->restore ();
153
- }
154
- else
155
- {
156
- layer->draw ( painter, extent, transform, FALSE );
157
- }
152
+ painter->restore ();
153
+ }
154
+ else
155
+ {
156
+ layer->draw ( painter, extent, transform, FALSE );
158
157
}
159
158
}
159
+ }
160
160
161
- // Draw vector labels
162
- for ( int i = 0 ; i < nlayers; i++ ) {
163
- QgsMapLayer *layer = mMapCanvas ->getZpos (i);
164
-
165
- if ( !layer->visible () ) continue ;
166
-
167
- if ( layer->type () == QgsMapLayer::VECTOR ) {
168
- QgsVectorLayer *vector = dynamic_cast <QgsVectorLayer*> (layer);
169
-
170
- if ( vector->labelOn () ) {
171
- double fontScale = 25.4 * mFontScale * mComposition ->scale () / 72 ;
172
- if ( plotStyle () == QgsComposition::Postscript )
173
- {
174
- // fontScale = QgsComposition::psFontScaleFactor() * 72.0 / mComposition->resolution();
175
-
176
- // TODO
177
- // This is not completely correct because fonts written to postscript
178
- // should use size metrics.ascent() * 72.0 / mComposition->resolution();
179
- // We could add a factor for metrics.ascent()/size but it is variable
180
- // Add a parrameter in drawLables() ?
181
- fontScale = 72.0 / mComposition ->resolution ();
182
- }
183
- vector->drawLabels ( painter, extent, transform, fontScale );
184
- }
185
-
161
+ // Draw vector labels
162
+ for ( int i = 0 ; i < nlayers; i++ ) {
163
+ QgsMapLayer *layer = mMapCanvas ->getZpos (i);
164
+
165
+ if ( !layer->visible () ) continue ;
166
+
167
+ if ( layer->type () == QgsMapLayer::VECTOR ) {
168
+ QgsVectorLayer *vector = dynamic_cast <QgsVectorLayer*> (layer);
169
+
170
+ if ( vector->labelOn () ) {
171
+ double fontScale = 25.4 * mFontScale * mComposition ->scale () / 72 ;
172
+ if ( plotStyle () == QgsComposition::Postscript )
173
+ {
174
+ // fontScale = QgsComposition::psFontScaleFactor() * 72.0 / mComposition->resolution();
175
+
176
+ // TODO
177
+ // This is not completely correct because fonts written to postscript
178
+ // should use size metrics.ascent() * 72.0 / mComposition->resolution();
179
+ // We could add a factor for metrics.ascent()/size but it is variable
180
+ // Add a parrameter in drawLables() ?
181
+ fontScale = 72.0 / mComposition ->resolution ();
182
+ }
183
+ vector->drawLabels ( painter, extent, transform, fontScale );
186
184
}
187
185
}
186
+ }
188
187
189
- mMapCanvas ->freeze (false );
188
+ mMapCanvas ->freeze (false );
190
189
}
191
190
192
191
void QgsComposerMap::setUserExtent ( QgsRect const & rect )
@@ -210,7 +209,7 @@ void QgsComposerMap::cache ( void )
210
209
int h = (int ) ( mExtent .height () * w / mExtent .width () );
211
210
// It can happen that extent is not initialised well -> check
212
211
if ( h < 1 || h > 10000 ) h = w;
213
-
212
+
214
213
std::cout << " extent = " << mExtent .width () << " x " << mExtent .height () << std::endl;
215
214
std::cout << " cache = " << w << " x " << h << std::endl;
216
215
@@ -239,83 +238,83 @@ void QgsComposerMap::cache ( void )
239
238
240
239
void QgsComposerMap::draw ( QPainter & painter )
241
240
{
242
- if ( mDrawing ) return ;
243
- mDrawing = true ;
241
+ if ( mDrawing ) return ;
242
+ mDrawing = true ;
244
243
245
- std::cout << " draw mPlotStyle = " << plotStyle ()
246
- << " mPreviewMode = " << mPreviewMode << std::endl;
244
+ std::cout << " draw mPlotStyle = " << plotStyle ()
245
+ << " mPreviewMode = " << mPreviewMode << std::endl;
247
246
248
- if ( plotStyle () == QgsComposition::Preview && mPreviewMode == Cache ) { // Draw from cache
249
- std::cout << " use cache" << std::endl;
247
+ if ( plotStyle () == QgsComposition::Preview && mPreviewMode == Cache ) { // Draw from cache
248
+ std::cout << " use cache" << std::endl;
250
249
251
- if ( !mCacheUpdated || mMapCanvas ->layerCount () != mNumCachedLayers ) {
250
+ if ( !mCacheUpdated || mMapCanvas ->layerCount () != mNumCachedLayers )
251
+ {
252
252
cache ();
253
- }
253
+ }
254
254
255
- // Scale so that the cache fills the map rectangle
256
- double scale = 1.0 * Q3CanvasRectangle::width () / mCachePixmap .width ();
255
+ // Scale so that the cache fills the map rectangle
256
+ double scale = 1.0 * Q3CanvasRectangle::width () / mCachePixmap .width ();
257
257
258
+ painter.save ();
259
+
260
+ painter.translate ( Q3CanvasRectangle::x (), Q3CanvasRectangle::y () );
261
+ painter.scale (scale,scale);
262
+ std::cout << " scale = " << scale << std::endl;
263
+ std::cout << " translate: " << Q3CanvasRectangle::x () << " , " << Q3CanvasRectangle::y () << std::endl;
264
+ // Note: drawing only a visible part of the pixmap doesn't make it much faster
265
+ painter.drawPixmap (0 ,0 , mCachePixmap );
266
+
267
+ painter.restore ();
268
+ }
269
+ else if ( (plotStyle () == QgsComposition::Preview && mPreviewMode == Render) ||
270
+ plotStyle () == QgsComposition::Print ||
271
+ plotStyle () == QgsComposition::Postscript )
272
+ {
273
+ std::cout << " render" << std::endl;
258
274
259
- painter.save ();
260
-
261
- painter.translate ( Q3CanvasRectangle::x (), Q3CanvasRectangle::y () );
262
- painter.scale (scale,scale);
263
- std::cout << " scale = " << scale << std::endl;
264
- std::cout << " translate: " << Q3CanvasRectangle::x () << " , " << Q3CanvasRectangle::y () << std::endl;
265
- // Note: drawing only a visible part of the pixmap doesn't make it much faster
266
- painter.drawPixmap (0 ,0 , mCachePixmap );
267
-
268
- painter.restore ();
269
-
270
- } else if ( (plotStyle () == QgsComposition::Preview && mPreviewMode == Render) ||
271
- plotStyle () == QgsComposition::Print ||
272
- plotStyle () == QgsComposition::Postscript )
273
- {
274
- std::cout << " render" << std::endl;
275
-
276
- double scale = mExtent .width () / Q3CanvasRectangle::width ();
277
- QgsMapToPixel transform (scale, Q3CanvasRectangle::height (), mExtent .yMin (), mExtent .xMin () );
275
+ double scale = mExtent .width () / Q3CanvasRectangle::width ();
276
+ QgsMapToPixel transform (scale, Q3CanvasRectangle::height (), mExtent .yMin (), mExtent .xMin () );
278
277
279
- painter.save ();
280
- painter.translate ( Q3CanvasRectangle::x (), Q3CanvasRectangle::y () );
281
-
282
- // TODO: Qt4 appears to force QPainter::CoordDevice - need to check if this is actually valid.
283
- painter.setClipRect ( 0 , 0 , Q3CanvasRectangle::width (), Q3CanvasRectangle::height () );
284
-
285
- draw ( &painter, &mExtent , &transform);
286
- painter.restore ();
287
- }
288
-
289
- // Draw frame around
290
- if ( mFrame ) {
291
- QPen pen (QColor (0 ,0 ,0 ));
292
- pen.setWidthF (0.6 *mComposition ->scale ());
293
- painter.setPen ( pen );
294
- painter.setBrush ( Qt::NoBrush );
295
- painter.save ();
296
- painter.translate ( Q3CanvasRectangle::x (), Q3CanvasRectangle::y () );
297
- painter.drawRect ( 0 , 0 , Q3CanvasRectangle::width (), Q3CanvasRectangle::height () );
298
- painter.restore ();
299
- }
278
+ painter.save ();
279
+ painter.translate ( Q3CanvasRectangle::x (), Q3CanvasRectangle::y () );
280
+
281
+ // TODO: Qt4 appears to force QPainter::CoordDevice - need to check if this is actually valid.
282
+ painter.setClipRect ( 0 , 0 , Q3CanvasRectangle::width (), Q3CanvasRectangle::height () );
283
+
284
+ draw ( &painter, &mExtent , &transform);
285
+ painter.restore ();
286
+ }
287
+
288
+ // Draw frame around
289
+ if ( mFrame ) {
290
+ QPen pen (QColor (0 ,0 ,0 ));
291
+ pen.setWidthF (0.6 *mComposition ->scale ());
292
+ painter.setPen ( pen );
293
+ painter.setBrush ( Qt::NoBrush );
294
+ painter.save ();
295
+ painter.translate ( Q3CanvasRectangle::x (), Q3CanvasRectangle::y () );
296
+ painter.drawRect ( 0 , 0 , Q3CanvasRectangle::width (), Q3CanvasRectangle::height () );
297
+ painter.restore ();
298
+ }
300
299
301
- // Show selected / Highlight
302
- if ( mSelected && plotStyle () == QgsComposition::Preview ) {
303
- painter.setPen ( mComposition ->selectionPen () );
304
- painter.setBrush ( mComposition ->selectionBrush () );
305
- int x = (int ) Q3CanvasRectangle::x ();
306
- int y = (int ) Q3CanvasRectangle::y ();
307
- int s = mComposition ->selectionBoxSize ();
308
-
309
- painter.drawRect ( x, y, s, s );
310
- x += Q3CanvasRectangle::width ();
311
- painter.drawRect ( x-s, y, s, s );
312
- y += Q3CanvasRectangle::height ();
313
- painter.drawRect ( x-s, y-s, s, s );
314
- x -= Q3CanvasRectangle::width ();
315
- painter.drawRect ( x, y-s, s, s );
316
- }
300
+ // Show selected / Highlight
301
+ if ( mSelected && plotStyle () == QgsComposition::Preview ) {
302
+ painter.setPen ( mComposition ->selectionPen () );
303
+ painter.setBrush ( mComposition ->selectionBrush () );
304
+ int x = (int ) Q3CanvasRectangle::x ();
305
+ int y = (int ) Q3CanvasRectangle::y ();
306
+ int s = mComposition ->selectionBoxSize ();
307
+
308
+ painter.drawRect ( x, y, s, s );
309
+ x += Q3CanvasRectangle::width ();
310
+ painter.drawRect ( x-s, y, s, s );
311
+ y += Q3CanvasRectangle::height ();
312
+ painter.drawRect ( x-s, y-s, s, s );
313
+ x -= Q3CanvasRectangle::width ();
314
+ painter.drawRect ( x, y-s, s, s );
315
+ }
317
316
318
- mDrawing = false ;
317
+ mDrawing = false ;
319
318
}
320
319
321
320
void QgsComposerMap::sizeChanged ( void )
@@ -342,54 +341,54 @@ void QgsComposerMap::on_mCalculateComboBox_activated( int )
342
341
mCalculate = mCalculateComboBox ->currentItem ();
343
342
344
343
if ( mCalculate == Scale ) { // return to extent defined by user
345
- recalculate ();
344
+ recalculate ();
346
345
347
- mCacheUpdated = false ;
348
- // QCanvasRectangle::canvas()->setAllChanged(); // must be setAllChanged(), not sure why
349
- Q3CanvasRectangle::canvas ()->setChanged ( Q3CanvasRectangle::boundingRect () );
350
- Q3CanvasRectangle::canvas ()->update ();
346
+ mCacheUpdated = false ;
347
+ // QCanvasRectangle::canvas()->setAllChanged(); // must be setAllChanged(), not sure why
348
+ Q3CanvasRectangle::canvas ()->setChanged ( Q3CanvasRectangle::boundingRect () );
349
+ Q3CanvasRectangle::canvas ()->update ();
351
350
352
- mComposition ->emitMapChanged ( mId );
351
+ mComposition ->emitMapChanged ( mId );
353
352
}
354
353
setOptions ();
355
354
writeSettings ();
356
355
}
357
356
358
357
double QgsComposerMap::scaleFromUserScale ( double us )
359
358
{
360
- double s;
359
+ double s;
361
360
362
- switch ( QgsProject::instance ()->mapUnits () ) {
363
- case QGis::METERS :
361
+ switch ( QgsProject::instance ()->mapUnits () ) {
362
+ case QGis::METERS :
364
363
s = 1000 . * mComposition ->scale () / us;
365
364
break ;
366
- case QGis::FEET :
365
+ case QGis::FEET :
367
366
s = 304.8 * mComposition ->scale () / us;
368
367
break ;
369
- case QGis::DEGREES :
368
+ case QGis::DEGREES :
370
369
s = mComposition ->scale () / us;
371
370
break ;
372
- }
373
- return s;
371
+ }
372
+ return s;
374
373
}
375
374
376
375
double QgsComposerMap::userScaleFromScale ( double s )
377
376
{
378
- double us;
377
+ double us;
379
378
380
- switch ( QgsProject::instance ()->mapUnits () ) {
381
- case QGis::METERS :
379
+ switch ( QgsProject::instance ()->mapUnits () ) {
380
+ case QGis::METERS :
382
381
us = 1000 . * mComposition ->scale () / s;
383
382
break ;
384
- case QGis::FEET :
383
+ case QGis::FEET :
385
384
us = 304.8 * mComposition ->scale () / s;
386
385
break ;
387
- case QGis::DEGREES :
386
+ case QGis::DEGREES :
388
387
us = mComposition ->scale () / s;
389
388
break ;
390
- }
389
+ }
391
390
392
- return us;
391
+ return us;
393
392
}
394
393
395
394
void QgsComposerMap::on_mScaleLineEdit_returnPressed ()
@@ -512,38 +511,38 @@ void QgsComposerMap::on_mFrameCheckBox_clicked ( )
512
511
513
512
void QgsComposerMap::setOptions ( void )
514
513
{
515
- std::cout << " QgsComposerMap::setOptions" << std::endl;
514
+ std::cout << " QgsComposerMap::setOptions" << std::endl;
516
515
517
- mNameLabel ->setText ( mName );
516
+ mNameLabel ->setText ( mName );
518
517
519
- mCalculateComboBox ->setCurrentItem ( mCalculate );
518
+ mCalculateComboBox ->setCurrentItem ( mCalculate );
520
519
521
- mWidthLineEdit ->setText ( QString (" %1" ).arg ( mComposition ->toMM (Q3CanvasRectangle::width ()), 0 ,' g' ) );
522
- mHeightLineEdit ->setText ( QString (" %1" ).arg ( mComposition ->toMM (Q3CanvasRectangle::height ()),0 ,' g' ) );
520
+ mWidthLineEdit ->setText ( QString (" %1" ).arg ( mComposition ->toMM (Q3CanvasRectangle::width ()), 0 ,' g' ) );
521
+ mHeightLineEdit ->setText ( QString (" %1" ).arg ( mComposition ->toMM (Q3CanvasRectangle::height ()),0 ,' g' ) );
523
522
524
- // Scale
525
- switch ( QgsProject::instance ()->mapUnits () ) {
526
- case QGis::METERS :
527
- case QGis::FEET :
528
- mScaleLineEdit ->setText ( QString (" %1" ).arg ((int )mUserScale ) );
523
+ // Scale
524
+ switch ( QgsProject::instance ()->mapUnits () ) {
525
+ case QGis::METERS :
526
+ case QGis::FEET :
527
+ mScaleLineEdit ->setText ( QString (" %1" ).arg ((int )mUserScale ) );
529
528
break ;
530
- case QGis::DEGREES :
531
- mScaleLineEdit ->setText ( QString (" %1" ).arg (mUserScale ,0 ,' f' ) );
529
+ case QGis::DEGREES :
530
+ mScaleLineEdit ->setText ( QString (" %1" ).arg (mUserScale ,0 ,' f' ) );
532
531
break ;
533
- }
534
- if ( mCalculate == Scale ) {
535
- mScaleLineEdit ->setEnabled (false );
536
- } else {
537
- mScaleLineEdit ->setEnabled (true );
538
- }
532
+ }
533
+ if ( mCalculate == Scale ) {
534
+ mScaleLineEdit ->setEnabled (false );
535
+ } else {
536
+ mScaleLineEdit ->setEnabled (true );
537
+ }
539
538
540
- mWidthScaleLineEdit ->setText ( QString (" %1" ).arg (mWidthScale ,0 ,' g' ,2 ) );
541
- mSymbolScaleLineEdit ->setText ( QString (" %1" ).arg (mSymbolScale ,0 ,' g' ,2 ) );
542
- mFontScaleLineEdit ->setText ( QString (" %1" ).arg (mFontScale ,0 ,' g' ,2 ) );
539
+ mWidthScaleLineEdit ->setText ( QString (" %1" ).arg (mWidthScale ,0 ,' g' ,2 ) );
540
+ mSymbolScaleLineEdit ->setText ( QString (" %1" ).arg (mSymbolScale ,0 ,' g' ,2 ) );
541
+ mFontScaleLineEdit ->setText ( QString (" %1" ).arg (mFontScale ,0 ,' g' ,2 ) );
543
542
544
- mFrameCheckBox ->setChecked ( mFrame );
543
+ mFrameCheckBox ->setChecked ( mFrame );
545
544
546
- mPreviewModeComboBox ->setCurrentItem ( mPreviewMode );
545
+ mPreviewModeComboBox ->setCurrentItem ( mPreviewMode );
547
546
}
548
547
549
548
void QgsComposerMap::on_mSetCurrentExtentButton_clicked ( void )
0 commit comments