Ejemplo n.º 1
0
/*!
    \fn xtPlot::slotAutoscaleToggled()
 */
void xyPlot::slotAutoscaleToggled()
{
  if(autoscaleCheck->isChecked())
    {
      // yrange autoscale on
      yminCounter->setDisabled(TRUE);
      ymaxCounter->setDisabled(TRUE);
      xminCounter->setDisabled(TRUE);
      xmaxCounter->setDisabled(TRUE);
      plotWidget->setAxisAutoScale(QwtPlot::yLeft);
      plotWidget->setAxisAutoScale(QwtPlot::xBottom);
    }
  else
    {
      // yrange autoscale off
      yminCounter->setDisabled(FALSE);
      ymaxCounter->setDisabled(FALSE);
      xminCounter->setDisabled(FALSE);
      xmaxCounter->setDisabled(FALSE);
      QwtScaleDiv a = plotWidget->axisScaleDiv(QwtPlot::yLeft);
      yminCounter->setValue(a.lowerBound());
      ymaxCounter->setValue(a.upperBound());
      plotWidget->setAxisScale( QwtPlot::yLeft, a.lowerBound(), a.upperBound());
      a = plotWidget->axisScaleDiv(QwtPlot::xBottom);
      xminCounter->setValue(a.lowerBound());
      xmaxCounter->setValue(a.upperBound());
      plotWidget->setAxisScale( QwtPlot::xBottom, a.lowerBound(), a.upperBound());
    }
}
Ejemplo n.º 2
0
void VectorPlot::setupPlot(const QwtDoubleRect &rect) {
	QwtScaleDiv *hDiv = plot->axisScaleDiv(QwtPlot::xBottom);
	QwtScaleDiv *vDiv = plot->axisScaleDiv(QwtPlot::yLeft);
// In earlier qwt version some member function names are different from newer version
#if QWT_VERSION <= 0x050101
	double lLimit = std::min(hDiv->lBound(), rect.left());
	double rLimit = std::max(hDiv->hBound(), rect.right());
	double bLimit = std::min(vDiv->lBound(), rect.bottom());
	double tLimit = std::max(vDiv->hBound(), rect.top());
#else
	double lLimit = std::min(hDiv->lowerBound(), rect.left());
	double rLimit = std::max(hDiv->upperBound(), rect.right());
	double bLimit = std::min(vDiv->lowerBound(), rect.bottom());
	double tLimit = std::max(vDiv->upperBound(), rect.top());
#endif
	plot->setAxisScale(QwtPlot::xBottom, lLimit, rLimit);
	plot->setAxisScale(QwtPlot::yLeft, bLimit, tLimit);

	double xMargin = plot->invTransform(QwtPlot::xBottom, plot->margin());
	double yMargin = plot->invTransform(QwtPlot::yLeft, plot->margin());
	mBoundingRect = QwtDoubleRect(QwtDoublePoint(lLimit - xMargin, tLimit + yMargin),
								  QwtDoublePoint(rLimit + xMargin, bLimit - yMargin));

	qDebug() << "xMargin:" << xMargin;
	qDebug() << "yMargin:" << yMargin;
	qDebug() << "mBoundingRect:" << mBoundingRect;
//	mBoundingRect = rect;
}
Ejemplo n.º 3
0
void QwtPlotSeriesItem::updateScaleDiv(
    const QwtScaleDiv &xScaleDiv, const QwtScaleDiv &yScaleDiv )
{   
    const QRectF rect = QRectF(
        xScaleDiv.lowerBound(), yScaleDiv.lowerBound(),
        xScaleDiv.range(), yScaleDiv.range() );
        
    setRectOfInterest( rect );
}   
Ejemplo n.º 4
0
/*!
    \fn xtPlot::slotYmaxChanged(double)
 */
void xyPlot::slotXmaxChanged(double v)
{
  const QwtScaleDiv a = plotWidget->axisScaleDiv(QwtPlot::xBottom);
  plotWidget->setAxisScale( QwtPlot::xBottom, a.lowerBound(), v);
  xminCounter->setRange(-20.0, v);
  xminCounter->setSingleStep(0.01);
}
Ejemplo n.º 5
0
void Graph::saveData(DataFileParser *file)
{
    // background color
    file->writeBlockIdentifier("graphWBgColor");
    file->writeString(getBgColor().name());

    // markers
    file->writeBlockIdentifier("graphWMarkersX");
    saveMarkers(file, QwtPlot::xBottom);

    file->writeBlockIdentifier("graphWMarkersY");
    saveMarkers(file, QwtPlot::yLeft);

    file->writeBlockIdentifier("graphWMarkersYRight");
    saveMarkers(file, QwtPlot::yRight);

    // axes
    file->writeBlockIdentifier("graphWAxisRangeV2");
    *file << (quint32)QwtPlot::axisCnt;
    for(size_t i = 0; i < QwtPlot::axisCnt; ++i)
    {
        const QwtScaleDiv div = axisScaleDiv(i);
        *file << div.lowerBound();
        *file << div.upperBound();
    }
}
Ejemplo n.º 6
0
QDebug operator<<( QDebug debug, const QwtScaleDiv &scaleDiv )
{
    debug << scaleDiv.lowerBound() << "<->" << scaleDiv.upperBound();
    debug << "Major: " << scaleDiv.ticks( QwtScaleDiv::MajorTick );
    debug << "Medium: " << scaleDiv.ticks( QwtScaleDiv::MediumTick );
    debug << "Minor: " << scaleDiv.ticks( QwtScaleDiv::MinorTick );

    return debug;
}
Ejemplo n.º 7
0
void Spectrogram::showColorScale(int axis, bool on)
{
if (hasColorScale() == on && color_axis == axis)
	return;

if (!d_graph)
	return;

QwtScaleWidget *colorAxis = d_graph->axisWidget(color_axis);
colorAxis->setColorBarEnabled(false);

color_axis = axis;

// We must switch main and the color scale axes and their respective scales
	int xAxis = this->xAxis();
	int yAxis = this->yAxis();
	int oldMainAxis = QwtPlot::xBottom;
	if (axis == QwtPlot::xBottom || axis == QwtPlot::xTop){
		oldMainAxis = xAxis;
		xAxis = 5 - color_axis;
	} else if (axis == QwtPlot::yLeft || axis == QwtPlot::yRight){
		oldMainAxis = yAxis;
		yAxis = 1 - color_axis;
	}

// First we switch axes
setAxis(xAxis, yAxis);

// Next we switch axes scales
QwtScaleDiv *scDiv = d_graph->axisScaleDiv(oldMainAxis);
if (axis == QwtPlot::xBottom || axis == QwtPlot::xTop)
	d_graph->setAxisScale(xAxis, scDiv->lowerBound(), scDiv->upperBound());
else if (axis == QwtPlot::yLeft || color_axis == QwtPlot::yRight)
	d_graph->setAxisScale(yAxis, scDiv->lowerBound(), scDiv->upperBound());

colorAxis = d_graph->axisWidget(color_axis);
d_graph->setAxisScale(color_axis, range().minValue(), range().maxValue());
colorAxis->setColorBarEnabled(on);
colorAxis->setColorMap(range(), colorMap());
if (!d_graph->axisEnabled(color_axis))
	d_graph->enableAxis(color_axis);
colorAxis->show();
d_graph->updateLayout();
}
Ejemplo n.º 8
0
void MainWindow::updatePanel()
{
    const QwtScaleDiv scaleDiv = d_plot->axisScaleDiv( QwtAxis::yLeft );

    Settings settings = d_panel->settings();
    settings.startDateTime = QwtDate::toDateTime( scaleDiv.lowerBound(), Qt::LocalTime );
    settings.endDateTime = QwtDate::toDateTime( scaleDiv.upperBound(), Qt::LocalTime );

    d_panel->setSettings( settings );
}
Ejemplo n.º 9
0
    virtual void updateScaleDiv( const QwtScaleDiv &xMap,
        const QwtScaleDiv &yMap )
    {
        QList<double> ticks[QwtScaleDiv::NTickTypes];

        ticks[QwtScaleDiv::MajorTick] =
            xMap.ticks( QwtScaleDiv::MediumTick );
        ticks[QwtScaleDiv::MinorTick] =
            xMap.ticks( QwtScaleDiv::MinorTick );

        QwtPlotGrid::updateScaleDiv(
            QwtScaleDiv( xMap.lowerBound(), xMap.upperBound(), ticks ),
            yMap );
    }
Ejemplo n.º 10
0
void QwtPolarGrid::updateScaleDiv( const QwtScaleDiv &azimuthScaleDiv,
                                   const QwtScaleDiv &radialScaleDiv, const QwtDoubleInterval &interval )
{
  GridData &radialGrid = d_data->gridData[QwtPolar::Radius];

  const QwtPolarPlot *plt = plot();
  if ( plt && testGridAttribute( AutoScaling ) )
  {
    const QwtScaleEngine *se = plt->scaleEngine( QwtPolar::Radius );
    radialGrid.scaleDiv = se->divideScale(
                            interval.minValue(), interval.maxValue(),
                            plt->scaleMaxMajor( QwtPolar::Radius ),
                            plt->scaleMaxMinor( QwtPolar::Radius ), 0 );
  }
  else
  {
    if ( radialGrid.scaleDiv != radialScaleDiv )
      radialGrid.scaleDiv = radialScaleDiv;
  }

  GridData &azimuthGrid = d_data->gridData[QwtPolar::Azimuth];
  if ( azimuthGrid.scaleDiv != azimuthScaleDiv )
  {
    azimuthGrid.scaleDiv = azimuthScaleDiv;
  }

  bool hasOrigin = false;
  for ( int axisId = 0; axisId < QwtPolar::AxesCount; axisId++ )
  {
    AxisData &axis = d_data->axisData[axisId];
    if ( axis.isVisible && axis.scaleDraw )
    {
      if ( axisId == QwtPolar::AxisAzimuth )
      {
        axis.scaleDraw->setScaleDiv( azimuthGrid.scaleDiv );
        if ( testDisplayFlag( SmartScaleDraw ) )
        {
          axis.scaleDraw->enableComponent(
            QwtAbstractScaleDraw::Ticks, !azimuthGrid.isVisible );
        }
      }
      else
      {
        QwtScaleDiv sd = radialGrid.scaleDiv;

        QwtValueList &ticks =
          ( QwtValueList & )sd.ticks( QwtScaleDiv::MajorTick );

        if ( testDisplayFlag( SmartOriginLabel ) )
        {
          bool skipOrigin = hasOrigin;
          if ( !skipOrigin )
          {
            if ( axisId == QwtPolar::AxisLeft
                 || axisId == QwtPolar::AxisRight )
            {
              if ( d_data->axisData[QwtPolar::AxisBottom].isVisible )
                skipOrigin = true;
            }
            else
            {
              if ( d_data->axisData[QwtPolar::AxisLeft].isVisible )
                skipOrigin = true;
            }
          }
#if QWT_VERSION < 0x050200
          if ( ticks.size() > 0 && ticks.first() == sd.lBound() )
#else
          if ( ticks.size() > 0 && ticks.first() == sd.lowerBound() )
#endif
          {
            if ( skipOrigin )
            {
#if QT_VERSION < 0x040000
              ticks.pop_front();
#else
              ticks.removeFirst();
#endif
            }
            else
              hasOrigin = true;
          }
        }

        if ( testDisplayFlag( HideMaxRadiusLabel ) )
        {
#if QWT_VERSION < 0x050200
          if ( ticks.size() > 0 && ticks.last() == sd.hBound() )
#else
          if ( ticks.size() > 0 && ticks.last() == sd.upperBound() )
#endif
#if QT_VERSION < 0x040000
            ticks.pop_back();
#else
            ticks.removeLast();
#endif
        }

        axis.scaleDraw->setScaleDiv( sd );

        if ( testDisplayFlag( SmartScaleDraw ) )
        {
          axis.scaleDraw->enableComponent(
            QwtAbstractScaleDraw::Ticks, !radialGrid.isVisible );
        }

      }
    }
  }
}
Ejemplo n.º 11
0
/*!
  Change the scale division
  \param scaleDiv New scale division
*/
void QwtAbstractScaleDraw::setScaleDiv( const QwtScaleDiv &scaleDiv )
{
    d_data->scaleDiv = scaleDiv;
    d_data->map.setScaleInterval( scaleDiv.lowerBound(), scaleDiv.upperBound() );
    d_data->labelCache.clear();
}
Ejemplo n.º 12
0
void Graph::syncYZeros()
{
    const QwtScaleDiv div = axisScaleDiv(QwtPlot::yLeft);
    syncYZeros(QwtPlot::yLeft, div.lowerBound(), div.upperBound());
}
Ejemplo n.º 13
0
double AxisImp::getMinimumValue() const
{
    QwtScaleDiv scaleDiv = mScaleDraw.scaleDiv();
    return scaleDiv.lowerBound();
}
Ejemplo n.º 14
0
int
CurveOHLC::draw (QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRect &, void *c)
{
  Curve *curve = (Curve *) c;
  QwtScaleDiv *sd = curve->plot()->axisScaleDiv(QwtPlot::xBottom);
  if (! g_symbol)
  {
    qDebug() << "CurveOHLC::draw: bars missing";
    return 0;
  }

  int loop = sd->lowerBound();
  int size = sd->upperBound();
  bool ff = FALSE;
  
  for (; loop < size; loop++)
  {
    OHLCBar *b = (OHLCBar *) curve->bar(loop);
    if (! b)
      continue;

    painter->setPen(b->color());
    
    int x = xMap.transform(loop);
    int width = xMap.transform(loop + 1) - x;
    
    int yo = yMap.transform(b->open());
    int yh = yMap.transform(b->high());
    int yl = yMap.transform(b->low());
    int yc = yMap.transform(b->close());
    
    switch ((CurveOHLCType::Key) curve->style())
    {
      case CurveOHLCType::_OHLC:
      {
        QRect rect(QPoint(x + 1, yh), QPoint(x + width - 1, yl));
        painter->drawLine (rect.center().x(), yh, rect.center().x(), yl); // draw the high/low line
        painter->drawLine (rect.left(), yo, rect.center().x(), yo); // draw the open tick
        painter->drawLine (rect.right(), yc, rect.center().x(), yc); // draw the close tick
        break;
      }
      default: // Candle
      {
        ff = FALSE;
        if (b->close() < b->open())
          ff = TRUE;

        if (! ff)
        {
          // empty candle c > o
          QRect rect(QPoint(x + 2, yc), QPoint(x + width - 2, yo));
          painter->drawLine (rect.center().x(), yh, rect.center().x(), yl);
          painter->setBrush(curve->plot()->canvasBackground());
          painter->drawRect(rect);
        }
        else
        {
          // filled candle c < o
          QRect rect(QPoint(x + 2, yo), QPoint(x + width - 2, yc));
          painter->drawLine (rect.center().x(), yh, rect.center().x(), yl);
          painter->setBrush(b->color());
          painter->drawRect(rect);
        }
        break;
      }
    }
  }
  
  return 1;
}