Quantum GIS API Documentation  1.7.5-Wroclaw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
qgsrendererv2.h
Go to the documentation of this file.
1 
2 #ifndef QGSRENDERERV2_H
3 #define QGSRENDERERV2_H
4 
5 #include "qgis.h"
6 
7 #include <QList>
8 #include <QString>
9 #include <QVariant>
10 #include <QPair>
11 #include <QPixmap>
12 
13 class QDomDocument;
14 class QDomElement;
15 
16 class QgsSymbolV2;
17 class QgsRenderContext;
18 class QgsFeature;
20 
21 typedef QList<QgsSymbolV2*> QgsSymbolV2List;
22 typedef QMap<QString, QgsSymbolV2* > QgsSymbolV2Map;
23 
24 typedef QList< QPair<QString, QPixmap> > QgsLegendSymbologyList;
25 typedef QList< QPair<QString, QgsSymbolV2*> > QgsLegendSymbolList;
26 
27 #define RENDERER_TAG_NAME "renderer-v2"
28 
30 // symbol levels
31 
32 class CORE_EXPORT QgsSymbolV2LevelItem
33 {
34  public:
35  QgsSymbolV2LevelItem( QgsSymbolV2* symbol, int layer ) : mSymbol( symbol ), mLayer( layer ) {}
36  QgsSymbolV2* symbol() { return mSymbol; }
37  int layer() { return mLayer; }
38  protected:
40  int mLayer;
41 };
42 
43 // every level has list of items: symbol + symbol layer num
44 typedef QList< QgsSymbolV2LevelItem > QgsSymbolV2Level;
45 
46 // this is a list of levels
47 typedef QList< QgsSymbolV2Level > QgsSymbolV2LevelOrder;
48 
49 
51 // renderers
52 
53 class CORE_EXPORT QgsFeatureRendererV2
54 {
55  public:
56  // renderer takes ownership of its symbols!
57 
59  static QgsFeatureRendererV2* defaultRenderer( QGis::GeometryType geomType );
60 
61  QString type() const { return mType; }
62 
63  // to be overridden
64  virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature ) = 0;
65 
66  virtual void startRender( QgsRenderContext& context, const QgsVectorLayer *vlayer ) = 0;
67 
68  virtual void stopRender( QgsRenderContext& context ) = 0;
69 
70  virtual QList<QString> usedAttributes() = 0;
71 
72  virtual ~QgsFeatureRendererV2() {}
73 
74  virtual QgsFeatureRendererV2* clone() = 0;
75 
76  virtual void renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
77 
79  virtual QString dump();
80 
82  virtual QgsSymbolV2List symbols() = 0;
83 
84  bool usingSymbolLevels() const { return mUsingSymbolLevels; }
85  void setUsingSymbolLevels( bool usingSymbolLevels ) { mUsingSymbolLevels = usingSymbolLevels; }
86 
87  bool usingFirstRule() const { return mUsingFirstRule; }
88  void setUsingFirstRule( bool usingFirstRule ) { mUsingFirstRule = usingFirstRule; }
89 
90 
92  static QgsFeatureRendererV2* load( QDomElement& symbologyElem );
93 
95  virtual QDomElement save( QDomDocument& doc );
96 
98  virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
99 
102  virtual QgsLegendSymbolList legendSymbolItems();
103 
105  void setVertexMarkerAppearance( int type, int size );
106 
107  protected:
108  QgsFeatureRendererV2( QString type );
109 
111  void renderVertexMarker( QPointF& pt, QgsRenderContext& context );
113  void renderVertexMarkerPolyline( QPolygonF& pts, QgsRenderContext& context );
115  void renderVertexMarkerPolygon( QPolygonF& pts, QList<QPolygonF>* rings, QgsRenderContext& context );
116 
117  static unsigned char* _getPoint( QPointF& pt, QgsRenderContext& context, unsigned char* wkb );
118  static unsigned char* _getLineString( QPolygonF& pts, QgsRenderContext& context, unsigned char* wkb );
119  static unsigned char* _getPolygon( QPolygonF& pts, QList<QPolygonF>& holes, QgsRenderContext& context, unsigned char* wkb );
120 
121  QString mType;
122 
125 
130 };
131 
132 
133 #endif