All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions
SciFigs::GraphContentOptions Class Reference

Brief description of class still missing. More...

#include <GraphContentOptions.h>

List of all members.

Public Member Functions

double ax () const
double ay () const
double bx () const
double by () const
void checkOrigin (QPoint &ps1, QPoint &ps2, int h) const
double contourWeight () const
 GraphContentOptions ()
 GraphContentOptions (const GraphContentOptions &o)
const QColor & gridLineColor () const
bool gridLines () const
double gridLineWeight () const
void paintContour (QPainter &p, double dotpercm, int w, int h) const
void paintGridLines (QPainter &p, double dotpercm, int w, int h) const
bool printBitmap () const
QPoint r2s (double x, double y) const
QPoint r2s (const Point &p) const
QPoint r2s (const Point2D &p) const
bool r2s (const Point2D &p1, const Point2D &p2, QPoint &ps1, QPoint &ps2) const
bool r2s (const Point &p1, const Point &p2, QPoint &ps1, QPoint &ps2) const
QPointF r2sF (double x, double y) const
QPointF r2sF (const Point &p) const
QPointF r2sF (const Point2D &p) const
Point s2r (const QPoint &p) const
Point2D s2r2D (const QPoint &p) const
ScalescaleX ()
const ScalescaleX () const
ScalescaleY ()
const ScalescaleY () const
void setContourWeight (double lw)
void setGridLineColor (const QColor &c)
void setGridLines (bool g)
void setGridLineWeight (double lw)
void setPrintBitmap (bool p)
void setTransparentMask (bool tm)
void swapAxes ()
bool transparentMask () const
int xr2s (double x) const
double xr2sF (double x) const
double xs2r (int x) const
double xVisMax () const
double xVisMin () const
int yr2s (double y) const
bool yr2s (const Point2D &p1, const Point2D &p2, QPoint &ps1, QPoint &ps2) const
double yr2sF (double y) const
double ys2r (int y) const
double yVisMax () const
double yVisMin () const
 ~GraphContentOptions ()

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

Description of constructor still missing

References TRACE.

    : QSharedData()
{
  TRACE;
  _gridLines=true;
  _gridLineColor=QColor(220,220,220);
  _gridLineWeight=0.1;
  _contourWeight=0;
  _transparentMask=false;
  _printBitmap=true;
}
  : QSharedData(o)
{
  _gridLines=o._gridLines;
  _transparentMask=o._transparentMask;
  _gridLineColor=o._gridLineColor;
  _contourWeight=o._contourWeight;
  _gridLineWeight=o._gridLineWeight;
  _contourWeight=o._contourWeight;
  _printBitmap=o._printBitmap;

  _scaleX=o._scaleX;
  _scaleY=o._scaleY;
}

Description of destructor still missing

{
}

Member Function Documentation

double SciFigs::GraphContentOptions::ax ( ) const [inline]
double SciFigs::GraphContentOptions::ay ( ) const [inline]
double SciFigs::GraphContentOptions::bx ( ) const [inline]
{return _scaleX.b();}
double SciFigs::GraphContentOptions::by ( ) const [inline]
{return _scaleY.b();}
void SciFigs::GraphContentOptions::checkOrigin ( QPoint &  ps1,
QPoint &  ps2,
int  h 
) const [inline]

References TRACE.

Referenced by SciFigs::SlopeEstimator::paintData(), SciFigs::XYValueLines::paintData(), SciFigs::XUniqueYColorLines::paintData(), SciFigs::XYColorLines::paintData(), and SciFigs::SlopeEstimator::paintText().

{
  TRACE;
  if(ps1.x() < 0) ps1.setX(0);
  if(ps1.y() >= h) ps1.setY(h - 1);
  if(ps2.x() < 0) ps2.setX(0);
  if(ps2.y() >= h) ps2.setY(h - 1);
}

Referenced by SciFigs::LayerPainterRequest::paint(), and paintContour().

{return _contourWeight;}
const QColor& SciFigs::GraphContentOptions::gridLineColor ( ) const [inline]
{return _gridLineColor;}
bool SciFigs::GraphContentOptions::gridLines ( ) const [inline]

Referenced by SciFigs::LayerPainterRequest::paint().

{return _gridLines;}

Referenced by paintGridLines().

{return _gridLineWeight;}
void SciFigs::GraphContentOptions::paintContour ( QPainter &  p,
double  dotpercm,
int  w,
int  h 
) const

References contourWeight().

Referenced by SciFigs::LayerPainterRequest::paint().

{
  p.setBrush(Qt::NoBrush);
  int penWeight=(int)round(contourWeight()*dotpercm*0.1);
  if(penWeight==0) penWeight=1;
  int halfPenWeight=penWeight >> 1;
  p.setPen(QPen (Qt::black, penWeight, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin) );
  p.drawRect(halfPenWeight,halfPenWeight,w-penWeight,h-penWeight);
}
void SciFigs::GraphContentOptions::paintGridLines ( QPainter &  p,
double  dotpercm,
int  w,
int  h 
) const

References gridLineWeight(), SciFigs::Scale::Inversed, SciFigs::Scale::Log, SciFigs::Scale::majorTicks(), SciFigs::Scale::maximum(), SciFigs::Scale::minimum(), SciFigs::Scale::minorTicks(), TRACE, SciFigs::Scale::type(), xr2s(), xVisMax(), xVisMin(), yr2s(), yVisMax(), and yVisMin().

Referenced by SciFigs::LayerPainterRequest::paint().

{
  TRACE;
  double val;
  int x,y;
  double xVisMin, xVisMax, xlabel, xtick, xbaseLabel=0.0, xbaseTick=0.0;
  double eps_xbaseLabel, eps_xbaseTick;
  double yVisMin, yVisMax, ylabel, ytick, ybaseLabel=0.0, ybaseTick=0.0;
  double eps_ybaseLabel, eps_ybaseTick;
  double inv_xtick, inv_ytick, inv_xlabel, inv_ylabel;
  int penWeight;
  double xTickCount, yTickCount, xLabelCount, yLabelCount;

  // Init loop for X Axis according to selected option
  switch (_scaleX.type()) {
  case Scale::Inversed:
    xVisMin=1.0/_scaleX.maximum();
    xVisMax=1.0/_scaleX.minimum();
    xlabel=_scaleX.majorTicks();
    xtick=_scaleX.minorTicks();
    inv_xlabel=1.0/xlabel;
    inv_xtick=1.0/xtick;
    xTickCount=(xVisMax-xVisMin)*inv_xtick;
    xLabelCount=(xVisMax-xVisMin)*inv_xlabel;
    break;
  case Scale::Log:
    xVisMin=_scaleX.minimum();
    xVisMax=_scaleX.maximum();
    xbaseLabel=pow(10.0,floor(log10(xVisMin)));
    xlabel=xbaseLabel*_scaleX.majorTicks();
    xtick=xbaseLabel*_scaleX.minorTicks();
    inv_xlabel=1.0/xlabel;
    inv_xtick=1.0/xtick;
    xbaseLabel*=10;
    eps_xbaseLabel=xbaseLabel*(1-1e-10);
    xbaseTick=xbaseLabel;
    eps_xbaseTick=eps_xbaseLabel;
    {
      double dx=ceil(1.0+log10(xVisMax)-log10(xVisMin));
      xTickCount=dx*10.0/_scaleX.minorTicks();
      xLabelCount=dx*10.0/_scaleX.majorTicks();
    }
    break;
  default:
    xVisMin=_scaleX.minimum();
    xVisMax=_scaleX.maximum();
    xlabel=_scaleX.majorTicks();
    xtick=_scaleX.minorTicks();
    inv_xlabel=1.0/xlabel;
    inv_xtick=1.0/xtick;
    xTickCount=(xVisMax-xVisMin)*inv_xtick;
    xLabelCount=(xVisMax-xVisMin)*inv_xlabel;
    break;
  }

  // Init loop for Y Axis according to selected option
  switch (_scaleY.type()) {
  case Scale::Inversed:
    yVisMin=1.0/_scaleY.maximum();
    yVisMax=1.0/_scaleY.minimum();
    ylabel=_scaleY.majorTicks();
    ytick=_scaleY.minorTicks();
    inv_ylabel=1.0/ylabel;
    inv_ytick=1.0/ytick;
    yTickCount=(yVisMax-yVisMin)*inv_ytick;
    yLabelCount=(yVisMax-yVisMin)*inv_ylabel;
    break;
  case Scale::Log:
    yVisMin=_scaleY.minimum();
    yVisMax=_scaleY.maximum();
    ybaseLabel=pow(10.0,floor(log10(_scaleY.minimum())));
    ylabel=ybaseLabel*_scaleY.majorTicks();
    ytick=ybaseLabel*_scaleY.minorTicks();
    inv_ylabel=1.0/ylabel;
    inv_ytick=1.0/ytick;
    ybaseLabel*=10;
    eps_ybaseLabel=ybaseLabel*(1-1e-10);
    ybaseTick=ybaseLabel;
    eps_ybaseTick=eps_ybaseLabel;
    {
      double dy=ceil(1.0+log10(yVisMax)-log10(yVisMin));
      yTickCount=dy*10.0/_scaleY.minorTicks();
      yLabelCount=dy*10.0/_scaleY.majorTicks();
    }
    break;
  default:
    yVisMin=_scaleY.minimum();
    yVisMax=_scaleY.maximum();
    ylabel=_scaleY.majorTicks();
    ytick=_scaleY.minorTicks();
    inv_ylabel=1.0/ylabel;
    inv_ytick=1.0/ytick;
    yTickCount=(yVisMax-yVisMin)*inv_ytick;
    yLabelCount=(yVisMax-yVisMin)*inv_ylabel;
    break;
  }

  // half of the weight of major grid lines
  // Multiplying penWeigh by two effectively multiply the line
  // thickness by 4, hence we divide by sqrt(2) (or multiply by 0.7)
  penWeight=(int)round(gridLineWeight()*dotpercm*0.0707);
  if(penWeight==0) penWeight=1;
  QColor c=_gridLineColor;
  c.setHsv(c.hue(), c.saturation(), 127+c.value()/2);
  p.setPen(QPen( c, penWeight) );

  // Draw minor grid lines in the X-direction
  // Makes sure that the number of steps is not greater than 10000
  // and that xtick is not too small compared to first absolute value.
  if(xtick>0.0) {
    if(xTickCount<10000.0 && xVisMin+xtick>xVisMin) {
      for(val=ceil(xVisMin*inv_xtick)*xtick; val<=xVisMax; val+=xtick) {
        switch (_scaleX.type()) {
        case Scale::Inversed:
          x=xr2s(1.0/val);
          break;
        case Scale::Log:
          if(val>eps_xbaseTick) {
            xtick*=10;
            val=xbaseTick;
            xbaseTick*=10;
            eps_xbaseTick=xbaseTick*(1-1e-10);
          }
          x=xr2s(val);
          if(xtick>val) val=0;
          break;
        default:
          x=xr2s(val);
          break;
        }
        p.drawLine(x, 0, x, h);
      }
    }
  }
  // Draw minor grid lines in the Y-direction
  // Makes sure that the number of steps is not greater than 10000
  // and that xtick is not too small compared to first absolute value.
  if(ytick>0.0) {
    if(yTickCount<10000.0 && yVisMin+ytick>yVisMin) {
      for(val=ceil(yVisMin*inv_ytick)*ytick; val<=yVisMax; val+=ytick) {
        switch (_scaleY.type()) {
        case Scale::Inversed:
          y=yr2s(1.0/val);
          break;
        case Scale::Log:
          if(val>eps_ybaseTick) {
            ytick*=10;
            val=ybaseTick;
            ybaseTick*=10;
            eps_ybaseTick=ybaseTick*(1-1e-10);
          }
          y=yr2s(val);
          if(ytick>val) val=0;
          break;
        default:
          y=yr2s(val);
          break;
        }
        p.drawLine(0, y, w, y);
      }
    }
  }

  penWeight=(int)round(gridLineWeight()*dotpercm*0.1);
  if(penWeight==0) penWeight=1;
  p.setPen(QPen( _gridLineColor, penWeight));

  // Draw major grid lines in the X-direction
  if(xlabel>0.0) {
    if(xLabelCount<10000.0 && xVisMin+xlabel>xVisMin) {
      for(val=ceil(xVisMin*inv_xlabel)*xlabel; val<=xVisMax; val+=xlabel) {
        switch (_scaleX.type()) {
        case Scale::Inversed:
          x=xr2s(1.0/val);
          break;
        case Scale::Log:
          if(val>eps_xbaseLabel) {
            xlabel*=10;
            val=xbaseLabel;
            xbaseLabel*=10;
            eps_xbaseLabel=xbaseLabel*(1-1e-10);
          }
          x=xr2s(val);
          if(xlabel>val) val=0;
          break;
        default:
          x=xr2s(val);
          break;
        }
        p.drawLine(x, 0, x, h);
      }
    }
  }
  // Draw major grid lines in the  Y-direction
  if(ylabel>0.0) {
    if(yLabelCount<1000.0 && yVisMin+ylabel>yVisMin) {
      for(val=ceil(yVisMin*inv_ylabel)*ylabel; val<=yVisMax; val+=ylabel) {
        switch (_scaleY.type()) {
        case Scale::Inversed:
          y=yr2s(1.0/val);
          break;
        case Scale::Log:
          if(val>eps_ybaseLabel) {
            ylabel*=10;
            val=ybaseLabel;
            ybaseLabel*=10;
            eps_ybaseLabel=ybaseLabel*(1-1e-10);
          }
          y=yr2s(val);
          if(ylabel>val) val=0;
          break;
        default:
          y=yr2s(val);
          break;
        }
        p.drawLine(0, y, w, y);
      }
    }
  }
}
QPoint SciFigs::GraphContentOptions::r2s ( double  x,
double  y 
) const [inline]
QPoint SciFigs::GraphContentOptions::r2s ( const Point p) const [inline]

References QGpCoreTools::Point2D::x(), and QGpCoreTools::Point2D::y().

{return QPoint(xr2s(p.x()), yr2s(p.y()));}
QPoint SciFigs::GraphContentOptions::r2s ( const Point2D p) const [inline]

References QGpCoreTools::Point2D::x(), and QGpCoreTools::Point2D::y().

{return QPoint(xr2s(p.x()), yr2s(p.y()));}
bool SciFigs::GraphContentOptions::r2s ( const Point2D p1,
const Point2D p2,
QPoint &  ps1,
QPoint &  ps2 
) const

References SciFigs::Scale::maximum(), SciFigs::Scale::minimum(), r2s(), TRACE, QGpCoreTools::Point2D::x(), and QGpCoreTools::Point2D::y().

{
  TRACE;
  if(p1.x()>=_scaleX.minimum()
      && p1.x()<=_scaleX.maximum()
      && p1.y()>=_scaleY.minimum()
      && p1.y()<=_scaleY.maximum()) {
    if(p2.x()>=_scaleX.minimum()
        && p2.x()<=_scaleX.maximum()
        && p2.y()>=_scaleY.minimum()
        && p2.y()<=_scaleY.maximum()) {
      ps1=r2s(p1);
      ps2=r2s(p2);
      return true;
    } else return oneInside(p1,p2,ps1,ps2);
  } else {
    if(p2.x()>=_scaleX.minimum()
       && p2.x()<=_scaleX.maximum()
       && p2.y()>=_scaleY.minimum()
       && p2.y()<=_scaleY.maximum())
      return oneInside(p2,p1,ps2,ps1);
    else {
      return bothOutside(p2,p1,ps2,ps1);
    }
  }
}
bool SciFigs::GraphContentOptions::r2s ( const Point p1,
const Point p2,
QPoint &  ps1,
QPoint &  ps2 
) const [inline]

References r2s(), and TRACE.

{
  TRACE;
  Point2D p2D1=p1;
  Point2D p2D2=p2;
  return r2s(p2D1, p2D2, ps1, ps2);
}
QPointF SciFigs::GraphContentOptions::r2sF ( double  x,
double  y 
) const [inline]

Referenced by SciFigs::XYColorPlot::paintData(), and SciFigs::XYValuePlot::paintData().

{return QPointF(xr2sF(x), yr2sF(y));}
QPointF SciFigs::GraphContentOptions::r2sF ( const Point p) const [inline]

References QGpCoreTools::Point2D::x(), and QGpCoreTools::Point2D::y().

{return QPointF(xr2sF(p.x()), yr2sF(p.y()));}
QPointF SciFigs::GraphContentOptions::r2sF ( const Point2D p) const [inline]

References QGpCoreTools::Point2D::x(), and QGpCoreTools::Point2D::y().

{return QPointF(xr2sF(p.x()), yr2sF(p.y()));}
Point SciFigs::GraphContentOptions::s2r ( const QPoint &  p) const [inline]

Referenced by SciFigs::LineEditor::mouseMoveEvent().

{return Point(xs2r( p.x()), ys2r(p.y()) );}
Point2D SciFigs::GraphContentOptions::s2r2D ( const QPoint &  p) const [inline]
const Scale& SciFigs::GraphContentOptions::scaleX ( ) const [inline]
{return _scaleX;}
const Scale& SciFigs::GraphContentOptions::scaleY ( ) const [inline]
{return _scaleY;}
void SciFigs::GraphContentOptions::setContourWeight ( double  lw) [inline]
{_contourWeight=lw;}
void SciFigs::GraphContentOptions::setGridLineColor ( const QColor &  c) [inline]
{_gridLineColor=c;}
void SciFigs::GraphContentOptions::setGridLines ( bool  g) [inline]
{_gridLines=g;}
{_gridLineWeight=lw;}
{_printBitmap=p;}
{_transparentMask=tm;}

Swap scales (used by ColorPaletteWidget to change orientation)

{
  Scale s=_scaleX;
  _scaleX=_scaleY;
  _scaleY=s;
}
{return _transparentMask;}
int SciFigs::GraphContentOptions::xr2s ( double  x) const [inline]
double SciFigs::GraphContentOptions::xr2sF ( double  x) const [inline]
{return _scaleX.r2sF(x);}
double SciFigs::GraphContentOptions::xs2r ( int  x) const [inline]
double SciFigs::GraphContentOptions::xVisMax ( ) const [inline]
double SciFigs::GraphContentOptions::xVisMin ( ) const [inline]
int SciFigs::GraphContentOptions::yr2s ( double  y) const [inline]
bool SciFigs::GraphContentOptions::yr2s ( const Point2D p1,
const Point2D p2,
QPoint &  ps1,
QPoint &  ps2 
) const

Same as r2s() except that ps1 and ps2 must have their x initialized to the correct transformation.

References SciFigs::Scale::maximum(), SciFigs::Scale::minimum(), TRACE, QGpCoreTools::Point2D::x(), QGpCoreTools::Point2D::y(), and yr2s().

{
  TRACE;
  if(p1.x()>=_scaleX.minimum()
      && p1.x()<=_scaleX.maximum()
      && p1.y()>=_scaleY.minimum()
      && p1.y()<=_scaleY.maximum()) {
    if(p2.x()>=_scaleX.minimum()
        && p2.x()<=_scaleX.maximum()
        && p2.y()>=_scaleY.minimum()
        && p2.y()<=_scaleY.maximum()) {
      ps1.setY(yr2s(p1.y()));
      ps2.setY(yr2s(p2.y()));
      return true;
    } else return oneInside(p1,p2,ps1,ps2);
  } else {
    if(p2.x()>=_scaleX.minimum()
       && p2.x()<=_scaleX.maximum()
       && p2.y()>=_scaleY.minimum()
       && p2.y()<=_scaleY.maximum())
      return oneInside(p2,p1,ps2,ps1);
    else {
      return bothOutside(p2,p1,ps2,ps1);
    }
  }
}
double SciFigs::GraphContentOptions::yr2sF ( double  y) const [inline]
{return _scaleY.r2sF(y);}
double SciFigs::GraphContentOptions::ys2r ( int  y) const [inline]
double SciFigs::GraphContentOptions::yVisMax ( ) const [inline]
double SciFigs::GraphContentOptions::yVisMin ( ) const [inline]

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines