18
18
#include " qgsmapcanvas.h"
19
19
#include " qgspointrotationitem.h"
20
20
#include " qgsrenderer.h"
21
+ #include " qgsrendererv2.h"
21
22
#include " qgssymbol.h"
23
+ #include " qgssymbolv2.h"
22
24
#include " qgsvectorlayer.h"
23
25
#include < QGraphicsPixmapItem>
24
26
#include < QMessageBox>
@@ -222,37 +224,54 @@ void QgsMapToolRotatePointSymbols::canvasReleaseEvent( QMouseEvent *e )
222
224
mCanvas ->refresh ();
223
225
}
224
226
225
- int QgsMapToolRotatePointSymbols::layerRotationAttributes ( const QgsVectorLayer* vl, QList<int >& attList )
227
+ int QgsMapToolRotatePointSymbols::layerRotationAttributes ( QgsVectorLayer* vl, QList<int >& attList )
226
228
{
227
229
attList.clear ();
228
230
if ( !vl )
229
231
{
230
232
return 1 ;
231
233
}
232
234
233
- // get renderer
235
+ // old symbology
234
236
const QgsRenderer* layerRenderer = vl->renderer ();
235
- if ( ! layerRenderer )
237
+ if ( layerRenderer )
236
238
{
237
- return 2 ;
238
- }
239
+ // get renderer symbols
240
+ const QList<QgsSymbol*> rendererSymbols = layerRenderer->symbols ();
241
+ int currentRotationAttribute;
239
242
240
- // get renderer symbols
241
- const QList<QgsSymbol*> rendererSymbols = layerRenderer->symbols ();
242
- int currentRotationAttribute;
243
+ QList<QgsSymbol*>::const_iterator symbolIt = rendererSymbols.constBegin ();
244
+ for ( ; symbolIt != rendererSymbols.constEnd (); ++symbolIt )
245
+ {
246
+ currentRotationAttribute = ( *symbolIt )->rotationClassificationField ();
247
+ if ( currentRotationAttribute >= 0 )
248
+ {
249
+ attList.push_back ( currentRotationAttribute );
250
+ }
251
+ }
252
+ return 0 ;
253
+ }
243
254
244
- QList<QgsSymbol*>::const_iterator symbolIt = rendererSymbols.constBegin ();
245
- for ( ; symbolIt != rendererSymbols.constEnd (); ++symbolIt )
255
+ // new symbology
256
+ const QgsFeatureRendererV2* symbologyNgRenderer = vl->rendererV2 ();
257
+ if ( symbologyNgRenderer )
246
258
{
247
- currentRotationAttribute = ( *symbolIt )->rotationClassificationField ();
248
- if ( currentRotationAttribute >= 0 )
259
+ // rotation field is supported for QgsSingleSymbolRendererV2, QgsCategorizedRendererV2, QgsUniqueCategorizedRendererV2
260
+ QString rotationFieldName = symbologyNgRenderer->rotationField ();
261
+
262
+ if ( !rotationFieldName.isEmpty () )
249
263
{
250
- attList.push_back ( currentRotationAttribute );
264
+ attList.push_back ( vl-> fieldNameIndex ( rotationFieldName ) );
251
265
}
266
+ return 0 ;
252
267
}
253
- return 0 ;
268
+
269
+ // no renderer
270
+ return 2 ;
254
271
}
255
272
273
+
274
+
256
275
double QgsMapToolRotatePointSymbols::calculateAzimut ( const QPoint& mousePos )
257
276
{
258
277
int dx = mousePos.x () - mSnappedPoint .x ();
@@ -267,10 +286,20 @@ void QgsMapToolRotatePointSymbols::createPixmapItem( QgsFeature& f )
267
286
return ;
268
287
}
269
288
270
- if ( mActiveLayer && mActiveLayer ->renderer () )
289
+ // get reference to current render context
290
+ QgsMapRenderer* mapRenderer = mCanvas ->mapRenderer ();
291
+ if ( !mapRenderer )
292
+ {
293
+ return ;
294
+ }
295
+
296
+ // get the image that is used for that symbol, but without point rotation
297
+ QImage pointImage;
298
+ QgsRenderer* r = 0 ;
299
+ QgsFeatureRendererV2* rv2 = 0 ;
300
+
301
+ if ( mActiveLayer && mActiveLayer ->renderer () ) // old symbology
271
302
{
272
- // get the image that is used for that symbol, but without point rotation
273
- QImage pointImage;
274
303
// copy renderer
275
304
QgsRenderer* r = mActiveLayer ->renderer ()->clone ();
276
305
@@ -282,14 +311,6 @@ void QgsMapToolRotatePointSymbols::createPixmapItem( QgsFeature& f )
282
311
( *it )->setRotationClassificationField ( -1 );
283
312
}
284
313
285
-
286
- // get reference to current render context
287
- QgsMapRenderer* mapRenderer = mCanvas ->mapRenderer ();
288
- if ( !mapRenderer )
289
- {
290
- delete r;
291
- return ;
292
- }
293
314
QgsRenderContext* renderContext = mCanvas ->mapRenderer ()->rendererContext (); // todo: check if pointers are not 0
294
315
if ( !renderContext )
295
316
{
@@ -298,16 +319,32 @@ void QgsMapToolRotatePointSymbols::createPixmapItem( QgsFeature& f )
298
319
}
299
320
300
321
r->renderFeature ( *renderContext, f, &pointImage, false );
301
- mRotationItem = new QgsPointRotationItem ( mCanvas );
302
- mRotationItem ->setSymbol ( pointImage );
303
- delete r;
304
322
}
323
+ else if ( mActiveLayer && mActiveLayer ->rendererV2 () ) // symbology-ng
324
+ {
325
+ rv2 = mActiveLayer ->rendererV2 ()->clone ();
326
+ rv2->setRotationField ( " " );
327
+
328
+ QgsSymbolV2* symbolV2 = rv2->symbolForFeature ( f );
329
+ if ( symbolV2 )
330
+ {
331
+ pointImage = symbolV2->bigSymbolPreviewImage ();
332
+ }
333
+ }
334
+
335
+ mRotationItem = new QgsPointRotationItem ( mCanvas );
336
+ mRotationItem ->setSymbol ( pointImage );
337
+ delete r;
338
+ delete rv2;
305
339
}
306
340
307
341
void QgsMapToolRotatePointSymbols::setPixmapItemRotation ( double rotation )
308
342
{
309
- mRotationItem ->setSymbolRotation ( rotation );
310
- mRotationItem ->update ();
343
+ if ( mRotationItem )
344
+ {
345
+ mRotationItem ->setSymbolRotation ( rotation );
346
+ mRotationItem ->update ();
347
+ }
311
348
}
312
349
313
350
int QgsMapToolRotatePointSymbols::roundTo15Degrees ( double n )
0 commit comments