예제 #1
0
/**
 * 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 ) );
    }
예제 #2
0
		// 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));
		}