1
/***************************************************************************
6
copyright : (C) 2004 by Marco Hugentobler
7
email : mhugent@geo.unizh.ch
8
***************************************************************************/
10
/***************************************************************************
12
* This program is free software; you can redistribute it and/or modify *
13
* it under the terms of the GNU General Public License as published by *
14
* the Free Software Foundation; either version 2 of the License, or *
15
* (at your option) any later version. *
17
***************************************************************************/
18
/* $Id: qgssimarenderer.cpp,v 1.20 2004/11/27 12:41:02 mhugent Exp $ */
20
#include "qgssimarenderer.h"
21
#include "qgssimadialog.h"
22
#include "qgssvgcache.h"
23
#include "qgsdlgvectorlayerproperties.h"
24
#include "qgsvectorlayer.h"
25
#include "qgsmarkersymbol.h"
26
#include "qgssymbologyutils.h"
30
void QgsSiMaRenderer::initializeSymbology(QgsVectorLayer* layer, QgsDlgVectorLayerProperties* pr)
32
bool toproperties = false; //if false: rendererDialog is associated with the vector layer and image is rendered, true: rendererDialog is associated with buffer dialog of vector layer properties and no image is rendered
40
QgsMarkerSymbol* sy=new QgsMarkerSymbol();
41
sy->brush().setStyle(Qt::NoBrush);
42
sy->pen().setStyle(Qt::NoPen);
43
sy->pen().setWidth(1);//set width 1 as default instead of width 0
45
QgsRenderItem* ri = new QgsRenderItem();
49
//todo: add a pixmap for the legend
52
QgsSiMaDialog *dialog = new QgsSiMaDialog(layer);
55
pr->setBufferDialog(dialog);
59
layer->setRendererDialog(dialog);
64
void QgsSiMaRenderer::renderFeature(QPainter* p, QgsFeature* f, QPicture* pic, double* scalefactor, bool selected)
67
p->setBrush(Qt::NoBrush);
69
QgsMarkerSymbol* ms=dynamic_cast<QgsMarkerSymbol*>(mItem->getSymbol());
72
QPainter painter(pic);
73
QPixmap pm = QgsSVGCache::instance().getPixmap(ms->picture(),
75
painter.drawPixmap(0, 0, pm);
80
painter.setBrush(QColor(255,255,0));
81
painter.drawRect(0,0,pm.width(),pm.height());
86
void QgsSiMaRenderer::readXML(const QDomNode& rnode, QgsVectorLayer& vl)
88
QgsMarkerSymbol* msy = new QgsMarkerSymbol();
95
QDomNode rinode = rnode.namedItem("renderitem");
97
QDomNode vnode = rinode.namedItem("value");
98
QDomElement velement = vnode.toElement();
99
value = velement.text();
101
QDomNode synode = rinode.namedItem("markersymbol");
104
QDomNode svgnode = synode.namedItem("svgpath");
105
svgpath = svgnode.toElement().text();
107
QDomNode scalenode = synode.namedItem("scalefactor");
108
scalefactor = scalenode.toElement().text().toDouble();
110
QDomNode outlcnode = synode.namedItem("outlinecolor");
111
QDomElement oulcelement = outlcnode.toElement();
112
int red = oulcelement.attribute("red").toInt();
113
int green = oulcelement.attribute("green").toInt();
114
int blue = oulcelement.attribute("blue").toInt();
115
pen.setColor(QColor(red, green, blue));
117
QDomNode outlstnode = synode.namedItem("outlinestyle");
118
QDomElement outlstelement = outlstnode.toElement();
119
pen.setStyle(QgsSymbologyUtils::qString2PenStyle(outlstelement.text()));
121
QDomNode outlwnode = synode.namedItem("outlinewidth");
122
QDomElement outlwelement = outlwnode.toElement();
123
pen.setWidth(outlwelement.text().toInt());
125
QDomNode fillcnode = synode.namedItem("fillcolor");
126
QDomElement fillcelement = fillcnode.toElement();
127
red = fillcelement.attribute("red").toInt();
128
green = fillcelement.attribute("green").toInt();
129
blue = fillcelement.attribute("blue").toInt();
130
brush.setColor(QColor(red, green, blue));
132
QDomNode fillpnode = synode.namedItem("fillpattern");
133
QDomElement fillpelement = fillpnode.toElement();
134
brush.setStyle(QgsSymbologyUtils::qString2BrushStyle(fillpelement.text()));
136
QDomNode lnode = rinode.namedItem("label");
137
QDomElement lnodee = lnode.toElement();
138
label = lnodee.text();
140
//create a renderer and add it to the vector layer
141
msy->setBrush(brush);
143
msy->setPicture(svgpath);
145
qWarning("the svgpath: "+svgpath);
147
msy->setScaleFactor(scalefactor);
149
qWarning("the scalefactor: "+QString::number(scalefactor,'f',2));
151
QgsRenderItem* ri = new QgsRenderItem();
157
vl.setRenderer(this);
158
QgsSiMaDialog *smdialog = new QgsSiMaDialog(&vl);
159
vl.setRendererDialog(smdialog);
161
QgsDlgVectorLayerProperties *properties = new QgsDlgVectorLayerProperties(&vl);
162
vl.setLayerProperties(properties);
163
properties->setLegendType("Single Marker");
168
void QgsSiMaRenderer::writeXML(std::ostream& xml)
171
qWarning("in QgsSiMaRenderer::writeXML");
172
qWarning("label seems to make problems");
173
qWarning(this->item()->label());
175
xml << "\t\t<singlemarker>\n";
176
xml << "\t\t\t<renderitem>\n";
177
xml << "\t\t\t\t<value>" + this->item()->value() + "</value>\n";
179
QgsMarkerSymbol *markersymbol = dynamic_cast<QgsMarkerSymbol*>(this->item()->getSymbol());
182
xml << "\t\t\t\t<markersymbol>\n";
183
xml << "\t\t\t\t\t<svgpath>" << (const char *) markersymbol->picture() << "</svgpath>\n";
184
xml << "\t\t\t\t\t<scalefactor>" << markersymbol->scaleFactor() << "</scalefactor>\n";
185
xml << "\t\t\t\t\t<outlinecolor red=\""
186
<< markersymbol->pen().color().red()
188
<< markersymbol->pen().color().green()
190
<< markersymbol->pen().color().blue()
192
xml << "\t\t\t\t\t<outlinestyle>" << (const char *) QgsSymbologyUtils::penStyle2QString(markersymbol->pen().style()) << "</outlinestyle>\n";
193
xml << "\t\t\t\t\t<outlinewidth>" << markersymbol->pen().width() << "</outlinewidth>\n";
194
xml << "\t\t\t\t\t<fillcolor red=\"" << markersymbol->brush().color().red()
196
<< markersymbol->brush().color().green()
198
<< markersymbol->brush().color().blue()
200
xml << "\t\t\t\t\t<fillpattern>"
201
<< (const char *)QgsSymbologyUtils::brushStyle2QString(markersymbol->brush().style())
202
<< "</fillpattern>\n";
203
xml << "\t\t\t\t</markersymbol>\n";
204
xml << "\t\t\t\t<label>" + this->item()->label() + "</label>\n";
205
xml << "\t\t\t</renderitem>\n";
206
xml << "\t\t</singlemarker>\n";
209
qWarning("warning, type cast failed in qgsprojectio.cpp line 715");
213
std::list<int> QgsSiMaRenderer::classificationAttributes()
216
return list;//return an empty list
219
QString QgsSiMaRenderer::name()
221
return "Single Marker";