예제 #1
0
void BoxCurve::drawSymbols(QPainter *painter, const QwtScaleMap &xMap,
                           const QwtScaleMap &yMap, double *dat,
                           int size) const {
  const int px = xMap.transform(x(0));

  QwtSymbol s = this->symbol();
  if (min_style != QwtSymbol::NoSymbol) {
    const int py_min = yMap.transform(y(0));
    s.setStyle(min_style);
    s.draw(painter, px, py_min);
  }
  if (max_style != QwtSymbol::NoSymbol) {
    const int py_max = yMap.transform(y(size - 1));
    s.setStyle(max_style);
    s.draw(painter, px, py_max);
  }
  if (p1_style != QwtSymbol::NoSymbol) {
    const int p1 =
        yMap.transform(gsl_stats_quantile_from_sorted_data(dat, 1, size, 0.01));
    s.setStyle(p1_style);
    s.draw(painter, px, p1);
  }
  if (p99_style != QwtSymbol::NoSymbol) {
    const int p99 =
        yMap.transform(gsl_stats_quantile_from_sorted_data(dat, 1, size, 0.99));
    s.setStyle(p99_style);
    s.draw(painter, px, p99);
  }
  if (mean_style != QwtSymbol::NoSymbol) {
    const int mean = yMap.transform(gsl_stats_mean(dat, 1, size));
    s.setStyle(mean_style);
    s.draw(painter, px, mean);
  }
}
예제 #2
0
/*!
 \brief Draw symbols
 \param painter Painter
 \param symbol Curve symbol
 \param xMap x map
 \param yMap y map
 \param from index of the first point to be painted
 \param to index of the last point to be painted

 \sa setSymbol(), draw(), drawCurve()
 */
void PlotCurve::drawSymbols(QPainter *painter, const QwtSymbol &symbol,
                            const QwtScaleMap &xMap, const QwtScaleMap &yMap,
                            int from, int to) const {
  if (d_skip_symbols < 2) {
    QwtPlotCurve::drawSymbols(painter, symbol, xMap, yMap, from, to);
    return;
  }

  painter->setBrush(symbol.brush());
  // QtiPlot has added method to QwtPainter:
  // painter->setPen(QwtPainter::scaledPen(symbol.pen()));
  painter->setPen(symbol.pen());

  const QwtMetricsMap &metricsMap = QwtPainter::metricsMap();

  QRect rect;
  rect.setSize(metricsMap.screenToLayout(symbol.size()));

  for (int i = from; i <= to; i += d_skip_symbols) {
    const int xi = xMap.transform(x(i));
    const int yi = yMap.transform(y(i));

    rect.moveCenter(QPoint(xi, yi));
    symbol.draw(painter, rect);
  }
}
예제 #3
0
/*!
 \brief Draw symbols
 \param painter Painter
 \param symbol Curve symbol
 \param xMap x map
 \param yMap y map
 \param from index of the first point to be painted
 \param to index of the last point to be painted

 \sa setSymbol(), draw(), drawCurve()
 */
void PlotCurve::drawSymbols(QPainter *painter, const QwtSymbol &symbol, const QwtScaleMap &xMap,
    const QwtScaleMap &yMap, int from, int to) const
{
  painter->translate(d_x_offset,-d_y_offset);  // For waterfall plots (will be zero otherwise)
                                               // Don't really know why you'd want symbols on a waterfall plot, but just in case...

  if (d_skip_symbols < 2)
  {
    QwtPlotCurve::drawSymbols(painter, symbol, xMap, yMap, from, to);
    return;
  }

  painter->setBrush(symbol.brush());
  //QtiPlot has added method to QwtPainter: painter->setPen(QwtPainter::scaledPen(symbol.pen()));
  painter->setPen(symbol.pen());

  const QwtMetricsMap &metricsMap = QwtPainter::metricsMap();

  QRect rect;
  rect.setSize(metricsMap.screenToLayout(symbol.size()));

  for (int i = from; i <= to; i += d_skip_symbols)
  {
    const int xi = xMap.transform(x(i));
    const int yi = yMap.transform(y(i));

    rect.moveCenter(QPoint(xi, yi));
    symbol.draw(painter, rect);
  }
}
예제 #4
0
/*!
  \brief Draw symbols
  \param painter Painter
  \param symbol Curve symbol
  \param xMap x map
  \param yMap y map
  \param from index of the first point to be painted
  \param to index of the last point to be painted

  \sa setSymbol(), draw(), drawCurve()
*/
void QwtPlotCurve::drawSymbols(QPainter *painter, const QwtSymbol &symbol,
    const QwtScaleMap &xMap, const QwtScaleMap &yMap, 
    int from, int to) const
{
    painter->setBrush(symbol.brush());
    painter->setPen(QwtPainter::scaledPen(symbol.pen()));

    const QwtMetricsMap &metricsMap = QwtPainter::metricsMap();

    QRect rect;
    rect.setSize(metricsMap.screenToLayout(symbol.size()));

    if ( to > from && d_data->paintAttributes & PaintFiltered )
    {
        const QRect window = painter->window();
        if ( window.isEmpty() )
            return;

        PrivateData::PixelMatrix pixelMatrix(window);

        for (int i = from; i <= to; i++)
        {
            const QPoint pi( xMap.transform(x(i)),
                yMap.transform(y(i)) );

            if ( pixelMatrix.testPixel(pi) )
            {
                rect.moveCenter(pi);
                symbol.draw(painter, rect);
            }
        }
    }
    else
    {
        for (int i = from; i <= to; i++)
        {
            const int xi = xMap.transform(x(i));
            const int yi = yMap.transform(y(i));

            rect.moveCenter(QPoint(xi, yi));
            symbol.draw(painter, rect);
        }
    }
}
예제 #5
0
void LegendWidget::drawSymbol(PlotCurve *c, int point, QPainter *p, int x, int y, int l)
{
    if (!c || c->rtti() == QwtPlotItem::Rtti_PlotSpectrogram)
        return;

    if (c->type() == Graph::VectXYXY || c->type() == Graph::VectXYAM){
        drawVector(c, p, x, y, l);
        return;
    }

	if (c->type() == Graph::Pie){
		QwtPieCurve *pie = (QwtPieCurve *)c;
		const QBrush br = QBrush(pie->color(point), pie->pattern());
		QPen pen = pie->pen();
		p->save();
		p->setPen (QPen(pen.color(), pen.widthF(), Qt::SolidLine));
		QRect lr = QRect(x, y - 4, l, 10);
		p->setBrush(br);
		QwtPainter::drawRect(p, lr);
		p->restore();
		return;
	}

    QwtSymbol symb = c->symbol();
    const QBrush br = c->brush();
    QPen pen = c->pen();
    p->save();
    if (c->style()!=0){
        p->setPen (pen);
        if (br.style() != Qt::NoBrush || c->type() == Graph::Box){
            QRect lr = QRect(x, y-4, l, 10);
            p->setBrush(br);
            QwtPainter::drawRect(p, lr);
        } else
            QwtPainter::drawLine(p, x, y, x + l, y);
    }
    int symb_size = symb.size().width();
    if (symb_size > 15)
        symb_size = 15;
    else if (symb_size < 3)
        symb_size = 3;
    symb.setSize(symb_size);
    symb.draw(p, x + l/2, y);
    p->restore();
}
예제 #6
0
/*!
  \brief Draw symbols
  \param painter Painter
  \param symbol Curve symbol
  \param xMap x map
  \param yMap y map
  \param from index of the first point to be painted
  \param to index of the last point to be painted
*/
void QwtCurve::drawSymbols(QPainter *painter, QwtSymbol &symbol,
    const QwtDiMap &xMap, const QwtDiMap &yMap, int from, int to)
{
    painter->setBrush(symbol.brush());
    painter->setPen(symbol.pen());

    QRect rect;
    rect.setSize(QwtPainter::metricsMap().screenToLayout(symbol.size()));

    for (int i = from; i <= to; i++)
    {
        const int xi = xMap.transform(x(i));
        const int yi = yMap.transform(y(i));

        rect.moveCenter(QPoint(xi, yi));
        symbol.draw(painter, rect);
    }
}
예제 #7
0
/*!
  Draw symbols

  \param painter Painter
  \param symbol Curve symbol
  \param azimuthMap Maps azimuth values to values related to 0.0, M_2PI
  \param radialMap Maps radius values into painter coordinates.
  \param pole Position of the pole in painter coordinates
  \param from index of the first point to be painted
  \param to index of the last point to be painted.
  \sa setSymbol(), draw(), drawCurve()
*/
void QwtPolarCurve::drawSymbols( QPainter *painter, const QwtSymbol &symbol,
                                 const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap,
                                 const QwtDoublePoint &pole, int from, int to ) const
{
  painter->setBrush( symbol.brush() );
  painter->setPen( symbol.pen() );

  QRect rect;
  rect.setSize( QwtPainter::metricsMap().screenToLayout( symbol.size() ) );

  for ( int i = from; i <= to; i++ )
  {
    const QwtPolarPoint point = sample( i );
    const double r = radialMap.xTransform( point.radius() );
    const double a = azimuthMap.xTransform( point.azimuth() );

    const QPoint pos = qwtPolar2Pos( pole, r, a ).toPoint();

    rect.moveCenter( pos );
    symbol.draw( painter, rect );
  }
}
예제 #8
0
void SymbolBox::init()
{
	QPixmap icon = QPixmap(14, 14);
	icon.fill ( QColor (gray) );
	const QRect r= QRect(0, 0, 14, 14);
	QPainter p(&icon);
	p.setBackgroundColor(QColor(gray));
	QwtSymbol symb;
	p.setBrush(QBrush(QColor(white)));

	this->insertItem(tr("No Symbol" ));

	symb.setStyle (QwtSymbol::Ellipse);
	symb.draw(&p, r);
	this->insertItem(icon, tr("Ellipse" ));

	symb.setStyle (QwtSymbol::Rect);
	p.eraseRect ( r );
	symb.draw(&p, r);
    this->insertItem(icon,tr("Rectangle"));

	symb.setStyle (QwtSymbol::Diamond);
	p.eraseRect ( r );
	symb.draw(&p, r);
    this->insertItem(icon,tr("Diamond"));

	symb.setStyle (QwtSymbol::Triangle);
	p.eraseRect ( r );
	symb.draw(&p, r);
    this->insertItem(icon,tr("Triangle"));

	symb.setStyle (QwtSymbol::DTriangle);
	p.eraseRect ( r );
	symb.draw(&p, r);
    this->insertItem(icon,tr("Down Triangle"));

	symb.setStyle (QwtSymbol::UTriangle);
	p.eraseRect ( r );
	symb.draw(&p, r);
    this->insertItem(icon,tr("Up Triangle"));

	symb.setStyle (QwtSymbol::LTriangle);
	p.eraseRect ( r );
	symb.draw(&p, r);
    this->insertItem(icon,tr("Left Triangle"));

	symb.setStyle (QwtSymbol::RTriangle);
	p.eraseRect ( r );
	symb.draw(&p, r);
    this->insertItem(icon,tr("Right Triangle"));

	symb.setStyle (QwtSymbol::Cross);
	p.eraseRect ( r );
	symb.draw(&p, r);
    this->insertItem(icon,tr("Cross"));

	symb.setStyle (QwtSymbol::XCross);
	p.eraseRect ( r );
	symb.draw(&p, r);
    this->insertItem(icon,tr("Diagonal Cross"));

	symb.setStyle (QwtSymbol::HLine);
	p.eraseRect ( r );
	symb.draw(&p, r);
    this->insertItem(icon,tr("Horizontal Line"));

	symb.setStyle (QwtSymbol::VLine);
	p.eraseRect ( r );
	symb.draw(&p, r);
    this->insertItem(icon,tr("Vertical Line"));

	symb.setStyle (QwtSymbol::Star1);
	p.eraseRect ( r );
	symb.draw(&p, r);
    this->insertItem(icon,tr("Star 1"));

	symb.setStyle (QwtSymbol::Star2);
	p.eraseRect ( r );
	symb.draw(&p, r);
    this->insertItem(icon,tr("Star 2"));

	symb.setStyle (QwtSymbol::Hexagon);
	p.eraseRect ( r );
	symb.draw(&p, r);
    this->insertItem(icon,tr("Hexagon"));

	p.end();
}
예제 #9
0
void LegendMarker::drawSymbols(QPainter *p, const QRect& rect, 
							   QwtArray<long> height, int symbolLineLength) const
{ 	
Graph *g = (Graph *) d_plot->parent();
	
int w = rect.x() + 10;
int l = symbolLineLength + 20;
	
QString text=d_text->text();	
QStringList titles=QStringList::split ("\n",text,FALSE);
	
for (int i=0;i<(int)titles.count();i++)
	{
	if (titles[i].contains("\\c{"))
		{
		int pos=titles[i].find("{",0);
        int pos2=titles[i].find("}",pos);
		QString aux=titles[i].mid(pos+1,pos2-pos-1);
		int cv = aux.toInt() - 1;	
		if (cv < 0)
			continue;

		if (g->curveType(cv) == Graph :: VectXYXY || g->curveType(cv) == Graph :: VectXYAM)
			drawVector(p, w, height[i], l, cv);
		else
			{
			const QwtPlotCurve *curve = g->curve(cv);
			if (curve)
				{
				const QwtSymbol symb=curve->symbol(); 
				const QBrush br=curve->brush();
				QPen pen=curve->pen();
										
				p->save();
	
				if (curve->style()!=0)
					{	
					p->setPen (pen);					
					if (br.style() != Qt::NoBrush || g->curveType(cv) == Graph::Box)
						{
						QRect lr=QRect(w,height[i]-4,l,10);						
						p->setBrush(br);
						p->drawRect (lr);
						}			
					else 			
						p->drawLine (w,height[i],w+l,height[i]);						
					}
				symb.draw(p,w+l/2,height[i]);
				p->restore();
				}
			}
	 	}	
	else if (titles[i].contains("\\p{"))
		{
		int pos=titles[i].find("{",0);
        int pos2=titles[i].find("}",pos);
		QString aux=titles[i].mid(pos+1,pos2-pos-1);
		
		int id=aux.toInt();
		
		Graph* g=(Graph*)d_plot->parent();
		if (g->isPiePlot())
			{			
			QwtPieCurve *curve = (QwtPieCurve *)d_plot->curve(1);
			if (curve)
				{
				const QBrush br=QBrush(curve->color(id-1), curve->pattern());
				QPen pen=curve->pen();	
				
				p->save();						
				p->setPen (QPen(pen.color(),1,Qt::SolidLine));					
				QRect lr=QRect(w,height[i]-4,l,10);						
				p->setBrush(br);
				p->drawRect(lr);
				p->restore();
				}
			}
	 	}
 	}	 
}
예제 #10
0
void SymbolBox::init(bool showNoSymbol) {
  QPixmap icon = QPixmap(15, 15);
  QColor c = QColor(Qt::gray);
  icon.fill(c);
  const QRect r = QRect(1, 1, 14, 14);
  QPainter p(&icon);
  p.setRenderHint(QPainter::Antialiasing);
  QwtSymbol symb;
  p.setBrush(QBrush(QColor(Qt::white)));

  if (showNoSymbol)
    this->addItem(tr("No Symbol"));

  symb.setStyle(QwtSymbol::Ellipse);
  symb.draw(&p, r);
  this->addItem(icon, tr("Ellipse"));

  symb.setStyle(QwtSymbol::Rect);
  icon.fill(c);
  symb.draw(&p, r.adjusted(0, 0, -1, -1));
  this->addItem(icon, tr("Rectangle"));

  symb.setStyle(QwtSymbol::Diamond);
  icon.fill(c);
  symb.draw(&p, r);
  this->addItem(icon, tr("Diamond"));

  symb.setStyle(QwtSymbol::Triangle);
  icon.fill(c);
  symb.draw(&p, r);
  this->addItem(icon, tr("Triangle"));

  symb.setStyle(QwtSymbol::DTriangle);
  icon.fill(c);
  symb.draw(&p, r);
  this->addItem(icon, tr("Down Triangle"));

  symb.setStyle(QwtSymbol::UTriangle);
  icon.fill(c);
  symb.draw(&p, r);
  this->addItem(icon, tr("Up Triangle"));

  symb.setStyle(QwtSymbol::LTriangle);
  icon.fill(c);
  symb.draw(&p, r);
  this->addItem(icon, tr("Left Triangle"));

  symb.setStyle(QwtSymbol::RTriangle);
  icon.fill(c);
  symb.draw(&p, r);
  this->addItem(icon, tr("Right Triangle"));

  symb.setStyle(QwtSymbol::Cross);
  icon.fill(c);
  symb.draw(&p, r);
  this->addItem(icon, tr("Cross"));

  symb.setStyle(QwtSymbol::XCross);
  icon.fill(c);
  symb.draw(&p, r);
  this->addItem(icon, tr("Diagonal Cross"));

  symb.setStyle(QwtSymbol::HLine);
  icon.fill(c);
  symb.draw(&p, r);
  this->addItem(icon, tr("Horizontal Line"));

  symb.setStyle(QwtSymbol::VLine);
  p.eraseRect(r);
  symb.draw(&p, r);
  this->addItem(icon, tr("Vertical Line"));

  symb.setStyle(QwtSymbol::Star1);
  icon.fill(c);
  symb.draw(&p, r);
  this->addItem(icon, tr("Star 1"));

  symb.setStyle(QwtSymbol::Star2);
  icon.fill(c);
  symb.draw(&p, r);
  this->addItem(icon, tr("Star 2"));

  symb.setStyle(QwtSymbol::Hexagon);
  icon.fill(c);
  symb.draw(&p, r);
  this->addItem(icon, tr("Hexagon"));

  p.end();
}