/** * Sets the line color used by the line. */ void LinePath::setLineColor( const QColor &color ) { uint linewidth = 0; Q3CanvasLine * line = 0; Q_FOREACH( line, m_LineList ) { linewidth = line->pen().width(); line->setPen( QPen( color, linewidth ) ); }
// creates a polygon from a given vector RegularData1D * data void RegularData1DWidget::createPlot() { // no data => no polygon if (data_ == 0 || data_->size() == 0) { return; } // find the data min and max float min = (*data_)[0]; float max = (*data_)[0]; float dif_min = min; float old = min; //last point if (dif_min == 0) dif_min = 1; for (int i=0; i<(int)data_->size(); i++) { if ((*data_)[i] >= max) max = (*data_)[i]; if ((*data_)[i] <= min) min = (*data_)[i]; float dif = (*data_)[i] - old; if ( (dif > 1e-3) && (dif < dif_min) ) { dif_min = dif; } old = (*data_)[i]; } int height_ = (int)ceil(((max-min) / dif_min) * 5); if (height_ > 1000) { // the resulting picture would be much too large height_ = 1000; dif_min = (max - min)/200.; } // resize the canvas to fit the data canvas_.resize(5*(data_->size()+2), height_+10); int x_new; int y_new; int x_old = 5; int y_old = height_+5 - (int)((((*data_)[0]-min)/dif_min)*5); Q3CanvasLine *ql; try { for (int i=0; i<(int)data_->size(); i++) { x_new = 5*(i+1); y_new = height_+5 - (int)(((data_->getData(i)-min)/dif_min)*5); ql = new Q3CanvasLine(&canvas_); ql->setPen(diagram_color_); ql->show(); ql->setPoints(x_old, y_old, x_new, y_new); objects_.push_back(dynamic_cast<Q3CanvasItem*> (ql)); x_old = x_new; y_old = y_new; } } catch(...) { setStatusbarText("Error: Point in dataset out of grid!"); Log.error() << "Error: Point in dataset out of grid!" << std::endl; return; } //add the x-axis ql = new Q3CanvasLine(&canvas_); int startx = 1; int starty = height_+5 - (int)/*round*/(((startx-min)/dif_min)*5); int endx = data_->size()*5; ql->setPoints(startx, starty, endx, starty); ql->setPen(axis_color_); ql->show(); objects_.push_back(dynamic_cast<Q3CanvasItem*> (ql)); //add the y-axis ql = new Q3CanvasLine(&canvas_); startx = 4; starty = 0; int endy = height_+5 - (int)/*round*/((((*data_)[endx]-min)/dif_min)*5); ql->setPoints(startx, starty, startx, endy); ql->setPen(QColor(Qt::red)); ql->show(); objects_.push_back(dynamic_cast<Q3CanvasItem*> (ql)); }