27 #include "../../../dataaccess/dataset/DataSet.h"
28 #include "../../../dataaccess/utils/Utils.h"
29 #include "../../../maptools/Chart.h"
34 #include <boost/lexical_cast.hpp>
40 : te::map::AbstractChartRenderer()
43 m_brush.setStyle(Qt::SolidPattern);
60 result = drawPies(chart, dataset, width);
64 result = drawBars(chart, dataset, width);
85 result = drawPies(chart, chartValue, width);
89 result = drawBars(chart, chartValue, width);
103 m_painter.begin(img);
104 m_painter.setRenderHints(QPainter::Antialiasing);
115 QImage* img =
new QImage(chart->
getWidth(), chart->
getHeight(), QImage::Format_ARGB32_Premultiplied);
116 img->fill(Qt::transparent);
123 std::vector<double> values;
124 getValues(chart, dataset, values);
129 double sum = computeSum(values);
134 for(std::size_t i = 0; i < values.size(); ++i)
136 int currentAngle =
static_cast<int>((values[i] * 5760) / sum);
140 shadowColor.setAlpha(128);
142 QPen shadowPen(shadowColor);
143 shadowPen.setWidth(2);
144 m_painter.setPen(shadowPen);
145 m_painter.drawPie(img->rect(), lastAngle, currentAngle);
148 m_painter.setPen(m_pen);
151 m_painter.drawPie(img->rect(), lastAngle, currentAngle);
153 lastAngle += currentAngle;
164 QImage* img =
new QImage(chart->
getWidth(), chart->
getHeight(), QImage::Format_ARGB32_Premultiplied);
165 img->fill(Qt::transparent);
172 std::vector<double> values;
173 getValues(chart, chartValue, values);
178 double sum = computeSum(values);
183 for(std::size_t i = 0; i < values.size(); ++i)
185 int currentAngle =
static_cast<int>((values[i] * 5760) / sum);
189 shadowColor.setAlpha(128);
191 QPen shadowPen(shadowColor);
192 shadowPen.setWidth(2);
193 m_painter.setPen(shadowPen);
194 m_painter.drawPie(img->rect(), lastAngle, currentAngle);
197 m_painter.setPen(m_pen);
200 m_painter.drawPie(img->rect(), lastAngle, currentAngle);
202 lastAngle += currentAngle;
213 QImage* img =
new QImage(chart->
getWidth(), chart->
getHeight(), QImage::Format_ARGB32_Premultiplied);
214 img->fill(Qt::transparent);
220 m_painter.setPen(m_pen);
222 std::vector<double> values;
223 getValues(chart, dataset, values);
230 assert(maxValue > 0.0);
234 int shadowOffset = 2;
237 for(std::size_t i = 0; i < values.size(); ++i)
239 int barHeight =
static_cast<int>((values[i] * chart->
getHeight()) / maxValue);
242 QRect shadowBar(lastx - shadowOffset, -shadowOffset, chart->
getBarWidth() + shadowOffset, barHeight + shadowOffset);
244 shadowColor.setAlpha(128);
245 m_painter.setBrush(shadowColor);
247 m_painter.setPen(Qt::NoPen);
248 m_painter.drawRect(shadowBar);
251 QRect bar(lastx, 0, chart->
getBarWidth(), barHeight);
254 m_painter.setPen(m_pen);
257 m_painter.drawRect(bar);
265 QImage* mirroed =
new QImage(img->mirrored());
275 QImage* img =
new QImage(chart->
getWidth(), chart->
getHeight(), QImage::Format_ARGB32_Premultiplied);
276 img->fill(Qt::transparent);
282 m_painter.setPen(m_pen);
284 std::vector<double> values;
285 getValues(chart, chartValue, values);
292 assert(maxValue > 0.0);
296 int shadowOffset = 2;
299 for(std::size_t i = 0; i < values.size(); ++i)
301 int barHeight =
static_cast<int>((values[i] * chart->
getHeight()) / maxValue);
304 QRect shadowBar(lastx - shadowOffset, -shadowOffset, chart->
getBarWidth() + shadowOffset, barHeight + shadowOffset);
306 shadowColor.setAlpha(128);
307 m_painter.setBrush(shadowColor);
309 m_painter.setPen(Qt::NoPen);
310 m_painter.drawRect(shadowBar);
313 QRect bar(lastx, 0, chart->
getBarWidth(), barHeight);
316 m_painter.setPen(m_pen);
319 m_painter.drawRect(bar);
327 QImage* mirroed =
new QImage(img->mirrored());
336 const std::vector<std::string>& properties = chart->
getProperties();
337 size_t psize = properties.size();
339 for(std::size_t i = 0; i < psize; ++i)
341 if(dataset->
isNull(properties[i]))
359 std::map<std::string, double>::const_iterator it;
360 const std::vector<std::string>& properties = chart->
getProperties();
361 for(std::size_t i = 0; i < properties.size(); ++i)
363 it = chartValue.find(properties[i]);
364 if(it != chartValue.end())
365 values.push_back(it->second);
378 for(std::size_t i = 0; i < values.size(); ++i)
388 for(std::size_t i = 0; i < values.size(); ++i)
389 if(std::abs(values[i]) > max)
ChartType getType() const
const std::vector< std::string > & getProperties() const
std::size_t getBarWidth() const
TEDATAACCESSEXPORT std::size_t GetPropertyPos(const DataSet *dataset, const std::string &name)
TEDATAACCESSEXPORT double GetValueAsDouble(const te::da::DataSet *ds, const size_t pos)
It gets the value as double.
double getMaxValue() const
A concrete chart renderer based on Qt4.
const te::color::RGBAColor & getColor(std::size_t i) const
This class represents the informations needed to build map charts.
virtual bool isNull(std::size_t i) const =0
It checks if the attribute value is NULL.
std::size_t getHeight() const
A dataset is the unit of information manipulated by the data access module of TerraLib.
std::size_t getContourWidth() const
const te::color::RGBAColor & getContourColor() const
const std::vector< size_t > & getPropertiesPos() const
A helper class for 32-bit RGBA (Red-Green-Blue-Alpha channel) color.
std::size_t getWidth() const