Public Types | Public Member Functions
DrawScene Class Reference

Brief description of class still missing. More...

#include <DrawScene.h>

List of all members.

Public Types

enum  CoordinateType { CartesianAbsolute, CartesianRelative, PolarAbsolute, PolarRelative }
enum  Unit { Millimeter, Centimeter, Meter, Kilometer }

Public Member Functions

DimensionItemaddDimension (const QLineF &line, const QFont &f=QFont(), const QPen &pen=QPen(), const QBrush &brush=QBrush())
EllipseItemaddEllipse (const QRectF &rect, double start, double span, const QPen &pen=QPen(), const QBrush &brush=QBrush())
QGraphicsLineItem * addLine (const QLineF &line, const QPen &pen=QPen())
QGraphicsRectItem * addRect (const QRectF &rect, const QPen &pen=QPen(), const QBrush &brush=QBrush())
TextItemaddText (const QString &t, const QFont &f=QFont(), const QPen &pen=QPen(), const QBrush &brush=QBrush())
const QBrush & brush () const
void clear ()
QPointF currentPoint () const
 DrawScene ()
const QFont & font () const
double margin () const
void moveTo (const QPointF &p)
QList< QPointF > nodes (const QRectF &rect)
bool parse (const QString cmd)
const QPen & pen () const
double scale () const
double scale (double val)
QPointF scale (const QPointF &p)
bool scaling () const
void setBrush (const QBrush &b)
void setCoordinateType (CoordinateType ct)
void setCurrentPoint (double x, double y)
void setFont (const QFont &f)
void setMargin (double m)
void setPen (const QPen &p)
void setScale (double s)
void setScaling (bool s)
void setUnit (Unit u)
Unit unit () const
double unitToDots (int dpi)
 ~DrawScene ()

Detailed Description

Brief description of class still missing.

Full description of class still missing


Member Enumeration Documentation

Enumerator:
CartesianAbsolute 
CartesianRelative 
PolarAbsolute 
PolarRelative 
Enumerator:
Millimeter 
Centimeter 
Meter 
Kilometer 

Constructor & Destructor Documentation

Description of constructor still missing

References CartesianAbsolute, Millimeter, and TRACE.

    : QGraphicsScene()
{
  TRACE;
  _scale=1.0;
  _unit=Millimeter;
  _margin=2.0; // 2 cm margin
  _scaling=true;

  _currentAzimuth=90.0;
  _coordinateType=CartesianAbsolute;
  _currentPoint=QPointF();
  _currentFont=QFont("Nimbus Sans L", 12);

  _lineDelegate=new LineItemDelegate;
  _rectDelegate=new RectItemDelegate;
  _ellipseDelegate=new EllipseItemDelegate;
  _textDelegate=new TextItemDelegate;
  _dimensionDelegate=new DimensionItemDelegate;
}

Description of destructor still missing

References TRACE.

{
  TRACE;
  delete _lineDelegate;
  delete _rectDelegate;
  delete _ellipseDelegate;
  delete _textDelegate;
  delete _dimensionDelegate;
}

Member Function Documentation

DimensionItem * DrawScene::addDimension ( const QLineF &  line,
const QFont &  f = QFont(),
const QPen &  pen = QPen(),
const QBrush &  brush = QBrush() 
)

References DimensionItem::setFont().

{
  DimensionItem * item=new DimensionItem(line);
  item->setBrush(brush);
  item->setPen(pen);
  item->setFont(f);
  addItem(item);
  item->setFlag(QGraphicsItem::ItemIsSelectable, true);
  QByteArray delegatePtr(( const char * ) &_dimensionDelegate, sizeof(DrawItemDelegate * ));
  item->setData(0, delegatePtr);
  return item;
}
EllipseItem * DrawScene::addEllipse ( const QRectF &  rect,
double  start,
double  span,
const QPen &  pen = QPen(),
const QBrush &  brush = QBrush() 
)
{
  EllipseItem * item=new EllipseItem(rect, start, span);
  item->setPen(pen);
  item->setBrush(brush);
  addItem(item);
  item->setFlag(QGraphicsItem::ItemIsSelectable, true);
  QByteArray delegatePtr(( const char * ) &_ellipseDelegate, sizeof(DrawItemDelegate * ));
  item->setData(0, delegatePtr);
  return item;
}
QGraphicsLineItem * DrawScene::addLine ( const QLineF &  line,
const QPen &  pen = QPen() 
)
{
  QGraphicsLineItem *item=new QGraphicsLineItem(line);
  item->setPen(pen);
  addItem(item);
  item->setFlag(QGraphicsItem::ItemIsSelectable, true);
  QByteArray delegatePtr(( const char * ) &_lineDelegate, sizeof(DrawItemDelegate * ));
  item->setData(0, delegatePtr);
  return item;
}
QGraphicsRectItem * DrawScene::addRect ( const QRectF &  rect,
const QPen &  pen = QPen(),
const QBrush &  brush = QBrush() 
)
{
  QGraphicsRectItem *item=new QGraphicsRectItem(rect);
  item->setPen(pen);
  item->setBrush(brush);
  addItem(item);
  item->setFlag(QGraphicsItem::ItemIsSelectable, true);
  QByteArray delegatePtr(( const char * ) &_rectDelegate, sizeof(DrawItemDelegate * ));
  item->setData(0, delegatePtr);
  return item;
}
TextItem * DrawScene::addText ( const QString &  t,
const QFont &  f = QFont(),
const QPen &  pen = QPen(),
const QBrush &  brush = QBrush() 
)

References TextItem::setFont().

{
  TextItem * item=new TextItem(t);
  item->setBrush(brush);
  item->setPen(pen);
  item->setFont(f);
  addItem(item);
  item->setFlag(QGraphicsItem::ItemIsSelectable, true);
  QByteArray delegatePtr((const char *) &_textDelegate, sizeof(DrawItemDelegate *));
  item->setData(0, delegatePtr);
  return item;
}
const QBrush& DrawScene::brush ( ) const [inline]
{return _currentBrush;}
void DrawScene::clear ( )

References CartesianAbsolute.

Referenced by MapProject::open(), and MapProject::setScript().

{
  QList<QGraphicsItem *> itemList=items();
  for(QList<QGraphicsItem *>::iterator it=itemList.begin(); it!=itemList.end();it++) {
    removeItem(*it);
    delete *it;
  }
  _currentAzimuth=90.0;
  _coordinateType=CartesianAbsolute;
  _currentPoint=QPointF();
  _currentPen=QPen();
  _currentBrush=QBrush();
  printf("Reset\n");
  printf("Current point %lf, %lf, current azimuth %lf\n",_currentPoint.x(),_currentPoint.y(), _currentAzimuth);
}
QPointF DrawScene::currentPoint ( ) const [inline]

Referenced by MapProject::currentPoint(), and DrawView::drawForeground().

{return _currentPoint;}
const QFont& DrawScene::font ( ) const [inline]
{return _currentFont;}
double DrawScene::margin ( ) const [inline]

Referenced by MapProject::print().

{return _margin;}
void DrawScene::moveTo ( const QPointF &  p)

Moves current point according current type of coordinates

References CartesianAbsolute, CartesianRelative, QGpCoreTools::cos(), PolarAbsolute, PolarRelative, and QGpCoreTools::sin().

{
  switch(_coordinateType) {
  case CartesianAbsolute:
    if(p!=_currentPoint) {
      _currentAzimuth=Angle::mathToGeographic(atan2(p.y()-_currentPoint.y(), p.x()-_currentPoint.x()));
    }
    _currentPoint=QPointF(p.x(), -p.y());
    break;
  case CartesianRelative:
    if(p.x()!=0.0 || p.y()!=0.0) {
      _currentAzimuth=Angle::mathToGeographic(atan2(p.y(), p.x()));
    }
    _currentPoint+=QPointF(p.x(), -p.y());
    break;
  case PolarAbsolute: {
      _currentAzimuth=p.y();
      double a=Angle::geographicToMath(p.y());
      _currentPoint+=QPointF(p.x()*cos(a), -p.x()*sin(a));
    }
    break;
  case PolarRelative: {
      _currentAzimuth+=p.y();
      double a=Angle::geographicToMath(_currentAzimuth);
      _currentPoint+=QPointF(p.x()*cos(a), -p.x()*sin(a));
    }
    break;
  }
  printf("Current point %lf, %lf, current azimuth %lf\n",_currentPoint.x(),-_currentPoint.y(), _currentAzimuth);
}
QList< QPointF > DrawScene::nodes ( const QRectF &  rect)

Referenced by DrawView::setMousePoint().

{
  QList<QGraphicsItem *> itemList=items(rect, Qt::IntersectsItemBoundingRect);
  QList<QPointF> nodes;
  for(QList<QGraphicsItem *>::iterator it=itemList.begin(); it!=itemList.end(); it++ ) {
    nodes << ( *reinterpret_cast<DrawItemDelegate **>((*it)->data(0).toByteArray().data()) )->nodes( *it);
  }
  return nodes;
}
bool DrawScene::parse ( const QString  cmd)

References SceneContext::run(), and TRACE.

Referenced by DrawConsole::addCommand(), MapProject::addCommand(), MapProject::open(), and MapProject::setScript().

{
  TRACE;

  SceneContext context(this);
  context.run(cmd);
  return true;
}
const QPen& DrawScene::pen ( ) const [inline]
{return _currentPen;}
double DrawScene::scale ( ) const [inline]
{return _scale;}
double DrawScene::scale ( double  val)

If scaling is not active, val is assumed to be in cm.

{
  if(_scaling) {
    return val;
  } else {
    return scaleHelper(val);
  }
}
QPointF DrawScene::scale ( const QPointF &  p)

If scaling is not active, p is assumed to be in cm.

References CartesianAbsolute, CartesianRelative, PolarAbsolute, and PolarRelative.

{
  if(_scaling) {
    return p;
  } else {
    QPointF np;
    switch(_coordinateType) {
    case CartesianAbsolute:
    case CartesianRelative:
      np.setX(scaleHelper(p.x()));
      np.setY(scaleHelper(p.y()));
      break;
    case PolarAbsolute:
    case PolarRelative:
      np.setX(scaleHelper(p.x()));
      np.setY(p.y());
      break;
    }
    return np;
  }
}
bool DrawScene::scaling ( ) const [inline]
{return _scaling;}
void DrawScene::setBrush ( const QBrush &  b) [inline]
{_currentBrush=b;}
{_coordinateType=ct;}
void DrawScene::setCurrentPoint ( double  x,
double  y 
)

Moves current point to an absolute position independently of the current coordinate type.

{
  _currentPoint=QPointF(x, y);
}
void DrawScene::setFont ( const QFont &  f) [inline]
{_currentFont=f;}
void DrawScene::setMargin ( double  m) [inline]
{_margin=m;}
void DrawScene::setPen ( const QPen &  p) [inline]
{_currentPen=p;}
void DrawScene::setScale ( double  s) [inline]
{_scale=s;}
void DrawScene::setScaling ( bool  s) [inline]
{_scaling=s;}
void DrawScene::setUnit ( Unit  u) [inline]
{_unit=u;}
Unit DrawScene::unit ( ) const [inline]
{return _unit;}
double DrawScene::unitToDots ( int  dpi)

References Centimeter, Kilometer, Meter, and Millimeter.

Referenced by MapProject::print().

{
  double s=dpi/2.54;  // Number of dots per cm
  switch(_unit) {
  case Millimeter:
    s*=0.1;
    break;
  case Centimeter:
    break;
  case Meter:
    s*=100.0;
    break;
  case Kilometer:
    s*=100000.0;
    break;
  }
  s*=_scale;
  return s;
}

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