Quantum GIS API Documentation
1.7.4
|
00001 00002 #ifndef QGSRENDERERV2_H 00003 #define QGSRENDERERV2_H 00004 00005 #include "qgis.h" 00006 00007 #include <QList> 00008 #include <QString> 00009 #include <QVariant> 00010 #include <QPair> 00011 #include <QPixmap> 00012 00013 class QDomDocument; 00014 class QDomElement; 00015 00016 class QgsSymbolV2; 00017 class QgsRenderContext; 00018 class QgsFeature; 00019 class QgsVectorLayer; 00020 00021 typedef QList<QgsSymbolV2*> QgsSymbolV2List; 00022 typedef QMap<QString, QgsSymbolV2* > QgsSymbolV2Map; 00023 00024 typedef QList< QPair<QString, QPixmap> > QgsLegendSymbologyList; 00025 typedef QList< QPair<QString, QgsSymbolV2*> > QgsLegendSymbolList; 00026 00027 #define RENDERER_TAG_NAME "renderer-v2" 00028 00030 // symbol levels 00031 00032 class CORE_EXPORT QgsSymbolV2LevelItem 00033 { 00034 public: 00035 QgsSymbolV2LevelItem( QgsSymbolV2* symbol, int layer ) : mSymbol( symbol ), mLayer( layer ) {} 00036 QgsSymbolV2* symbol() { return mSymbol; } 00037 int layer() { return mLayer; } 00038 protected: 00039 QgsSymbolV2* mSymbol; 00040 int mLayer; 00041 }; 00042 00043 // every level has list of items: symbol + symbol layer num 00044 typedef QList< QgsSymbolV2LevelItem > QgsSymbolV2Level; 00045 00046 // this is a list of levels 00047 typedef QList< QgsSymbolV2Level > QgsSymbolV2LevelOrder; 00048 00049 00051 // renderers 00052 00053 class CORE_EXPORT QgsFeatureRendererV2 00054 { 00055 public: 00056 // renderer takes ownership of its symbols! 00057 00059 static QgsFeatureRendererV2* defaultRenderer( QGis::GeometryType geomType ); 00060 00061 QString type() const { return mType; } 00062 00063 // to be overridden 00064 virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature ) = 0; 00065 00066 virtual void startRender( QgsRenderContext& context, const QgsVectorLayer *vlayer ) = 0; 00067 00068 virtual void stopRender( QgsRenderContext& context ) = 0; 00069 00070 virtual QList<QString> usedAttributes() = 0; 00071 00072 virtual ~QgsFeatureRendererV2() {} 00073 00074 virtual QgsFeatureRendererV2* clone() = 0; 00075 00076 virtual void renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false ); 00077 00079 virtual QString dump(); 00080 00082 virtual QgsSymbolV2List symbols() = 0; 00083 00084 bool usingSymbolLevels() const { return mUsingSymbolLevels; } 00085 void setUsingSymbolLevels( bool usingSymbolLevels ) { mUsingSymbolLevels = usingSymbolLevels; } 00086 00087 bool usingFirstRule() const { return mUsingFirstRule; } 00088 void setUsingFirstRule( bool usingFirstRule ) { mUsingFirstRule = usingFirstRule; } 00089 00090 00092 static QgsFeatureRendererV2* load( QDomElement& symbologyElem ); 00093 00095 virtual QDomElement save( QDomDocument& doc ); 00096 00098 virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ); 00099 00102 virtual QgsLegendSymbolList legendSymbolItems(); 00103 00105 void setVertexMarkerAppearance( int type, int size ); 00106 00107 protected: 00108 QgsFeatureRendererV2( QString type ); 00109 00111 void renderVertexMarker( QPointF& pt, QgsRenderContext& context ); 00113 void renderVertexMarkerPolyline( QPolygonF& pts, QgsRenderContext& context ); 00115 void renderVertexMarkerPolygon( QPolygonF& pts, QList<QPolygonF>* rings, QgsRenderContext& context ); 00116 00117 static unsigned char* _getPoint( QPointF& pt, QgsRenderContext& context, unsigned char* wkb ); 00118 static unsigned char* _getLineString( QPolygonF& pts, QgsRenderContext& context, unsigned char* wkb ); 00119 static unsigned char* _getPolygon( QPolygonF& pts, QList<QPolygonF>& holes, QgsRenderContext& context, unsigned char* wkb ); 00120 00121 QString mType; 00122 00123 bool mUsingSymbolLevels; 00124 bool mUsingFirstRule; 00125 00127 int mCurrentVertexMarkerType; 00129 int mCurrentVertexMarkerSize; 00130 }; 00131 00132 00133 #endif