1
/***************************************************************************
2
qgssinglesymbolrenderer.cpp - description
5
copyright : (C) 2003 by Marco Hugentobler
6
email : mhugent@geo.unizh.ch
7
***************************************************************************/
9
/***************************************************************************
11
* This program is free software; you can redistribute it and/or modify *
12
* it under the terms of the GNU General Public License as published by *
13
* the Free Software Foundation; either version 2 of the License, or *
14
* (at your option) any later version. *
16
***************************************************************************/
17
/* $Id: qgssinglesymbolrenderer.cpp 5705 2006-08-17 10:40:00Z g_j_m $ */
19
#include "qgssinglesymbolrenderer.h"
20
#include "qgsfeature.h"
22
#include "qgsvectorlayer.h"
23
#include "qgslegenditem.h"
24
#include "qgssymbologyutils.h"
31
QgsSingleSymbolRenderer::QgsSingleSymbolRenderer(QGis::VectorType type)
34
//call superclass method to set up selection colour
35
initialiseSelectionColor();
37
//initial setting based on random color
38
QgsSymbol* sy = new QgsSymbol(mVectorType);
40
//random fill colors for points and polygons and pen colors for lines
41
int red = 1 + (int) (255.0 * rand() / (RAND_MAX + 1.0));
42
int green = 1 + (int) (255.0 * rand() / (RAND_MAX + 1.0));
43
int blue = 1 + (int) (255.0 * rand() / (RAND_MAX + 1.0));
45
if (type == QGis::Line)
47
sy->setColor(QColor(red, green, blue));
51
sy->setFillColor(QColor(red, green, blue));
52
sy->setFillStyle(Qt::SolidPattern);
53
sy->setColor(QColor(0, 0, 0));
59
QgsSingleSymbolRenderer::QgsSingleSymbolRenderer(const QgsSingleSymbolRenderer& other)
61
mVectorType = other.mVectorType;
62
mSymbol = new QgsSymbol(*other.mSymbol);
65
QgsSingleSymbolRenderer& QgsSingleSymbolRenderer::operator=(const QgsSingleSymbolRenderer& other)
69
mVectorType = other.mVectorType;
71
mSymbol = new QgsSymbol(*other.mSymbol);
76
QgsSingleSymbolRenderer::~QgsSingleSymbolRenderer()
81
void QgsSingleSymbolRenderer::addSymbol(QgsSymbol* sy)
87
void QgsSingleSymbolRenderer::renderFeature(QPainter * p, QgsFeature * f, QPixmap* pic,
88
double* scalefactor, bool selected, double widthScale)
91
if ( pic && mVectorType == QGis::Point) {
92
*pic = mSymbol->getPointSymbolAsPixmap( widthScale,
93
selected, mSelectionColor );
95
if ( scalefactor ) *scalefactor = 1;
99
if ( mVectorType != QGis::Point )
103
QPen pen=mSymbol->pen();
104
pen.setWidthF ( widthScale * pen.width() );
106
p->setBrush(mSymbol->brush());
110
QPen pen=mSymbol->pen();
111
pen.setWidthF ( widthScale * pen.width() );
112
if (mVectorType == QGis::Line)
113
pen.setColor(mSelectionColor);
114
QBrush brush=mSymbol->brush();
115
brush.setColor(mSelectionColor);
122
void QgsSingleSymbolRenderer::readXML(const QDomNode& rnode, QgsVectorLayer& vl)
124
mVectorType = vl.vectorType();
125
QgsSymbol* sy = new QgsSymbol(mVectorType);
127
QDomNode synode = rnode.namedItem("symbol");
129
if ( synode.isNull() )
131
qDebug( "%s:%d in project file no symbol node in renderitem DOM" );
136
sy->readXML ( synode );
139
//create a renderer and add it to the vector layer
141
vl.setRenderer(this);
144
bool QgsSingleSymbolRenderer::writeXML( QDomNode & layer_node, QDomDocument & document ) const
146
bool returnval=false;
147
QDomElement singlesymbol=document.createElement("singlesymbol");
148
layer_node.appendChild(singlesymbol);
151
returnval=mSymbol->writeXML(singlesymbol,document);
157
std::list<int> QgsSingleSymbolRenderer::classificationAttributes() const
160
return list;//return an empty list
163
QString QgsSingleSymbolRenderer::name() const
165
return "Single Symbol";
168
const std::list<QgsSymbol*> QgsSingleSymbolRenderer::symbols() const
170
std::list<QgsSymbol*> list;
171
list.push_back(mSymbol);
175
QgsRenderer* QgsSingleSymbolRenderer::clone() const
177
QgsSingleSymbolRenderer* r = new QgsSingleSymbolRenderer(*this);