Brief description of class still missing. More...
#include <DrawScene.h>
Public Types | |
| enum | CoordinateType { CartesianAbsolute, CartesianRelative, PolarAbsolute, PolarRelative } |
| enum | Unit { Millimeter, Centimeter, Meter, Kilometer } |
Public Member Functions | |
| DimensionItem * | addDimension (const QLineF &line, const QFont &f=QFont(), const QPen &pen=QPen(), const QBrush &brush=QBrush()) |
| EllipseItem * | addEllipse (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()) |
| TextItem * | addText (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 () | |
Brief description of class still missing.
Full description of class still missing
| enum DrawScene::Unit |
{Millimeter, Centimeter, Meter, Kilometer};
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;
}
| 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().
| 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;}
| void DrawScene::setCoordinateType | ( | CoordinateType | ct | ) | [inline] |
{_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;
}