14 #include <qwt_painter.h> 16 #include <qwt_scale_map.h> 20 class QmitkHistogram::HistogramData
23 QwtIntervalSeriesData
data;
43 void QmitkHistogram::init()
45 m_Data =
new HistogramData();
46 m_Data->reference = 0.0;
48 setItemAttribute(QwtPlotItem::AutoScale,
true);
49 setItemAttribute(QwtPlotItem::Legend,
true);
56 if (m_Data->reference != reference)
58 m_Data->reference = reference;
65 return m_Data->reference;
70 m_Data->data.setSamples(data.samples());
81 if (m_Data->color != color)
83 m_Data->color =
color;
95 QRectF rect = m_Data->data.boundingRect();
99 if (rect.bottom() < m_Data->reference)
100 rect.setBottom(m_Data->reference);
101 else if (rect.top() > m_Data->reference)
102 rect.setTop(m_Data->reference);
107 void QmitkHistogram::draw(QPainter *painter,
const QwtScaleMap &xMap,
const QwtScaleMap &yMap,
const QRectF &)
const 109 const QwtIntervalSeriesData &iData = m_Data->data;
111 painter->setPen(QPen(m_Data->color));
113 const int y0 = yMap.transform(
baseline());
115 for (
int i = 0; i < (int)iData.size(); i++)
117 const int y2 = yMap.transform(iData.sample(i).value);
121 int x1 = xMap.transform(iData.sample(i).interval.minValue());
122 int x2 = xMap.transform(iData.sample(i).interval.maxValue());
126 if (i < (
int)iData.size() - 2)
128 const int xx1 = xMap.transform(iData.sample(i + 1).interval.minValue());
129 const int xx2 = xMap.transform(iData.sample(i + 1).interval.maxValue());
131 if (x2 == qMin(xx1, xx2))
133 const int yy2 = yMap.transform(iData.sample(i + 1).value);
134 if (yy2 != y0 && ((yy2 < y0 && y2 < y0) || (yy2 > y0 && y2 > y0)))
141 drawBar(painter, Qt::Vertical, QRect(x1, y0, x2 - x1, y2 - y0));
149 const QColor
color(painter->pen().color());
150 const QRect r = rect.normalized();
151 const int factor = 125;
152 const QColor light(
color.light(factor));
153 const QColor dark(
color.dark(factor));
155 painter->setBrush(
color);
156 painter->setPen(Qt::NoPen);
157 QwtPainter::drawRect(painter, r.x() + 1, r.y() + 1, r.width() - 2, r.height() - 2);
158 painter->setBrush(Qt::NoBrush);
160 painter->setPen(QPen(light, 2));
162 QwtPainter::drawLine(painter, r.left() + 1, r.top() + 2, r.right() + 1, r.top() + 2);
164 painter->setPen(QPen(dark, 2));
166 QwtPainter::drawLine(painter, r.left() + 1, r.bottom(), r.right() + 1, r.bottom());
168 painter->setPen(QPen(light, 1));
170 QwtPainter::drawLine(painter, r.left(), r.top() + 1, r.left(), r.bottom());
171 QwtPainter::drawLine(painter, r.left() + 1, r.top() + 2, r.left() + 1, r.bottom() - 1);
173 painter->setPen(QPen(dark, 1));
175 QwtPainter::drawLine(painter, r.right() + 1, r.top() + 1, r.right() + 1, r.bottom());
176 QwtPainter::drawLine(painter, r.right(), r.top() + 2, r.right(), r.bottom() - 1);
const QwtIntervalSeriesData & data() const
void setColor(const QColor &)
void draw(QPainter *, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &) const override
QmitkHistogram(const QString &title=QString::null)
QRectF boundingRect() const override
void setData(const QwtIntervalSeriesData &data)
~QmitkHistogram() override
virtual void drawBar(QPainter *, Qt::Orientation o, const QRect &) const
void setBaseline(double reference)