27 #include "../../../dataaccess/dataset/DataSet.h"
28 #include "../../../maptools/Chart.h"
33 #include <boost/lexical_cast.hpp>
39 : te::map::AbstractChartRenderer()
42 m_brush.setStyle(Qt::SolidPattern);
59 result = drawPies(chart, dataset, width);
63 result = drawBars(chart, dataset, width);
78 m_painter.setRenderHints(QPainter::Antialiasing);
89 QImage* img =
new QImage(chart->
getWidth(), chart->
getHeight(), QImage::Format_ARGB32_Premultiplied);
90 img->fill(Qt::transparent);
97 std::vector<double> values;
98 getValues(chart, dataset, values);
100 double sum = computeSum(values);
105 for(std::size_t i = 0; i < values.size(); ++i)
107 int currentAngle =
static_cast<int>((values[i] * 5760) / sum);
111 shadowColor.setAlpha(128);
113 QPen shadowPen(shadowColor);
114 shadowPen.setWidth(2);
115 m_painter.setPen(shadowPen);
116 m_painter.drawPie(img->rect(), lastAngle, currentAngle);
119 m_painter.setPen(m_pen);
122 m_painter.drawPie(img->rect(), lastAngle, currentAngle);
124 lastAngle += currentAngle;
135 QImage* img =
new QImage(chart->
getWidth(), chart->
getHeight(), QImage::Format_ARGB32_Premultiplied);
136 img->fill(Qt::transparent);
142 m_painter.setPen(m_pen);
144 std::vector<double> values;
145 getValues(chart, dataset, values);
149 assert(maxValue > 0.0);
153 int shadowOffset = 2;
156 for(std::size_t i = 0; i < values.size(); ++i)
158 int barHeight =
static_cast<int>((values[i] * chart->
getHeight()) / maxValue);
161 QRect shadowBar(lastx - shadowOffset, -shadowOffset, chart->
getBarWidth() + shadowOffset, barHeight + shadowOffset);
163 shadowColor.setAlpha(128);
164 m_painter.setBrush(shadowColor);
166 m_painter.setPen(Qt::NoPen);
167 m_painter.drawRect(shadowBar);
170 QRect bar(lastx, 0, chart->
getBarWidth(), barHeight);
173 m_painter.setPen(m_pen);
176 m_painter.drawRect(bar);
184 QImage* mirroed =
new QImage(img->mirrored());
193 std::size_t precision = 5;
195 const std::vector<std::string>& properties = chart->
getProperties();
197 for(std::size_t i = 0; i < properties.size(); ++i)
199 std::string value = dataset->
getAsString(properties[i], precision);
200 values.push_back(boost::lexical_cast<double>(value));
208 for(std::size_t i = 0; i < values.size(); ++i)
218 for(std::size_t i = 0; i < values.size(); ++i)
219 if(std::abs(values[i]) > max)
ChartType getType() const
const std::vector< std::string > & getProperties() const
std::size_t getBarWidth() const
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.
std::size_t getHeight() const
virtual std::string getAsString(std::size_t i, int precision=0) const
Method for retrieving a data value as a string plain representation.
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
A helper class for 32-bit RGBA (Red-Green-Blue-Alpha channel) color.
std::size_t getWidth() const