54 #include "QwtFunctionPlot.hh" 64 #include <qwt_curve_fitter.h> 65 #include <qwt_plot_panner.h> 66 #include <qwt_symbol.h> 69 #if QWT_VERSION >= 0x060000 70 #include <qwt_plot_histogram.h> 72 #include <qwt_interval_data.h> 77 #include "TextureMath.hh" 87 QwtFunctionPlot::QwtFunctionPlot(QWidget* _parent) :
89 Ui::QwtFunctionPlotBase(),
100 plot_zoomer_ =
new QwtPlotZoomer( qwtPlot->canvas());
101 plot_zoomer_->initKeyPattern();
102 connect(zoomInButton, SIGNAL( clicked() ),
this,SLOT( zoomIn() ) );
103 connect(zoomOutButton,SIGNAL( clicked() ),
this,SLOT( zoomOut() ) );
104 connect(clampButton, SIGNAL( clicked() ),
this,SLOT( clamp() ) );
106 QwtPlotPanner *panner =
new QwtPlotPanner( qwtPlot->canvas() );
107 panner->setMouseButton( Qt::MidButton );
110 setAttribute(Qt::WA_DeleteOnClose,
true);
112 #if QWT_VERSION >= 0x060000 123 void QwtFunctionPlot::setFunction( std::vector<double>& _values)
131 for ( uint i=0; i < values_.size(); i++){
132 min_ = std::min(min_, values_[i] );
133 max_ = std::max(max_, values_[i] );
140 void QwtFunctionPlot::setParameters(
const TexParameters& _parameters)
142 parameters_ = _parameters;
145 void QwtFunctionPlot::setParameters(
156 parameters_.repeat = _repeat;
157 parameters_.repeatMax = _repeatMax;
158 parameters_.clamp = _clamp;
159 parameters_.clampMin = _clampMin;
160 parameters_.clampMax = _clampMax;
161 parameters_.center = _center;
162 parameters_.abs = _absolute;
163 parameters_.scale = _scale;
169 void QwtFunctionPlot::setImage(QImage* _image)
176 void QwtFunctionPlot::zoomIn()
178 emit plot_zoomer_->zoom(1);
183 void QwtFunctionPlot::zoomOut()
185 emit plot_zoomer_->zoom(-1);
190 void QwtFunctionPlot::clamp()
192 QRectF clamped = plot_zoomer_->zoomRect();
193 clamped.setLeft( min_ );
194 clamped.setRight( max_ );
195 emit plot_zoomer_->zoom(clamped);
200 void QwtFunctionPlot::replot()
203 const int intervalCount = 100;
205 #if QWT_VERSION >= 0x060000 206 QVector<QwtIntervalSample> intervals(intervalCount);
208 QwtArray<QwtDoubleInterval> intervals(intervalCount);
209 QwtArray<double> count(intervalCount);
211 std::vector< QColor > colors;
214 double width = ( max_ - min_ ) / intervalCount;
216 QColor lastColor = Qt::black;
220 for (
int i = 0; i < (int)intervals.size(); i++ )
223 #if QWT_VERSION >= 0x060000 224 intervals[i] = QwtIntervalSample(0.0,pos, pos + width);
226 intervals[i] = QwtDoubleInterval(pos, pos + width);
233 const double intervalCenter = pos + (width/2.0);
235 const double value = convert.transform(intervalCenter);
236 int val = int( value * ( image_->width() - 1) );
238 val = val % image_->width();
239 colors.push_back( QColor( image_->pixel(val, 0) ) );
240 lastColor = colors.back();
245 for ( uint i=0; i < values_.size(); i++)
246 for (
int j = 0; j < (int)intervals.size(); j++ )
247 #
if QWT_VERSION >= 0x060000
248 if ( intervals[j].interval.contains( values_[i] ) )
249 intervals[j].value++;
251 if ( intervals[j].contains( values_[i] ) )
258 for (
int i = 0; i < (int)intervals.size(); i++ )
259 #
if QWT_VERSION >= 0x060000
260 maxCount = std::max(maxCount, intervals[i].value);
262 maxCount = std::max(maxCount, count[i]);
266 #if QWT_VERSION >= 0x060000 267 QwtIntervalSeriesData* data =
new QwtIntervalSeriesData(intervals);
268 histogram_->setData(data);
270 histogram_->setData(QwtIntervalData(intervals, count));
272 histogram_->setColors(colors);
273 histogram_->attach(qwtPlot);
275 qwtPlot->setAxisScale(QwtPlot::yLeft, 0.0, maxCount);
276 qwtPlot->setAxisScale(QwtPlot::xBottom, min_, max_);
278 qwtPlot->setAxisTitle(QwtPlot::yLeft,
"count" );
279 qwtPlot->setAxisTitle(QwtPlot::xBottom,
"values" );
282 plot_zoomer_->setZoomBase();
285 if ( parameters_.clamp ) {
286 if ( ! clampMinMarker_ ) {
287 clampMinMarker_ =
new QwtPlotMarker();
288 minSymbol_ =
new QwtSymbol(QwtSymbol::VLine);
289 minSymbol_->setColor(QColor(255,0,0));
290 minSymbol_->setSize(200,1000);
291 QPen pen = minSymbol_->pen();
293 minSymbol_->setPen(pen);
294 clampMinMarker_->setSymbol(minSymbol_);
295 clampMinMarker_->attach(qwtPlot);
299 if ( parameters_.clampMin < min_ )
300 clampMinMarker_->setXValue(min_);
302 clampMinMarker_->setXValue(parameters_.clampMin);
306 clampMinMarker_->show();
308 if ( ! clampMaxMarker_ ) {
309 clampMaxMarker_ =
new QwtPlotMarker();
310 maxSymbol_ =
new QwtSymbol(QwtSymbol::VLine);
311 maxSymbol_->setColor(QColor(0,255,0));
312 maxSymbol_->setSize(200,1000);
313 QPen pen = maxSymbol_->pen();
315 maxSymbol_->setPen(pen);
316 clampMaxMarker_->setSymbol(maxSymbol_);
317 clampMaxMarker_->attach(qwtPlot);
321 if ( parameters_.clampMax < max_ )
322 clampMaxMarker_->setXValue(parameters_.clampMax);
324 clampMaxMarker_->setXValue(max_);
326 clampMaxMarker_->show();
329 if ( clampMinMarker_ )
330 clampMinMarker_->hide();
332 if ( clampMaxMarker_ )
333 clampMaxMarker_->hide();
Histogram plotting widget.
Namespace providing different geometric functions concerning angles.