Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include "rtabmap/gui/KeypointItem.h"
00029
00030 #include <QtGui/QPen>
00031 #include <QtGui/QBrush>
00032 #include <QGraphicsScene>
00033 #include "rtabmap/utilite/ULogger.h"
00034
00035 namespace rtabmap {
00036
00037 KeypointItem::KeypointItem(int id, const cv::KeyPoint & kpt, float depth, const QColor & color, QGraphicsItem * parent) :
00038 QGraphicsEllipseItem(kpt.pt.x-(kpt.size==0?3.0f:kpt.size)/2.0f, kpt.pt.y-(kpt.size==0?3.0f:kpt.size)/2.0f, kpt.size==0?3.0f:kpt.size, kpt.size==0?3.0f:kpt.size, parent),
00039 _id(id),
00040 _kpt(kpt),
00041 _placeHolder(0),
00042 _depth(depth)
00043 {
00044 this->setColor(color);
00045 this->setAcceptHoverEvents(true);
00046 this->setFlag(QGraphicsItem::ItemIsFocusable, true);
00047 _width = pen().width();
00048 }
00049
00050 KeypointItem::~KeypointItem()
00051 {
00052 if(_placeHolder)
00053 {
00054 delete _placeHolder;
00055 }
00056 }
00057
00058 void KeypointItem::setColor(const QColor & color)
00059 {
00060 this->setPen(QPen(color));
00061 this->setBrush(QBrush(color));
00062 }
00063
00064 void KeypointItem::showDescription()
00065 {
00066 if(!_placeHolder)
00067 {
00068 _placeHolder = new QGraphicsRectItem (this);
00069 _placeHolder->setVisible(false);
00070 _placeHolder->setBrush(QBrush(QColor ( 0, 0, 0, 170 )));
00071 QGraphicsTextItem * text = new QGraphicsTextItem(_placeHolder);
00072 text->setDefaultTextColor(this->pen().color().rgb());
00073 if(_depth <= 0)
00074 {
00075 text->setPlainText(QString( "Id = %1\n"
00076 "Dir = %3\n"
00077 "Hessian = %4\n"
00078 "X = %5\n"
00079 "Y = %6\n"
00080 "Size = %7").arg(_id).arg(_kpt.angle).arg(_kpt.response).arg(_kpt.pt.x).arg(_kpt.pt.y).arg(_kpt.size));
00081 }
00082 else
00083 {
00084 text->setPlainText(QString( "Id = %1\n"
00085 "Dir = %3\n"
00086 "Hessian = %4\n"
00087 "X = %5\n"
00088 "Y = %6\n"
00089 "Size = %7\n"
00090 "Depth = %8 m").arg(_id).arg(_kpt.angle).arg(_kpt.response).arg(_kpt.pt.x).arg(_kpt.pt.y).arg(_kpt.size).arg(_depth));
00091 }
00092 _placeHolder->setRect(text->boundingRect());
00093 }
00094
00095
00096 if(_placeHolder->parentItem())
00097 {
00098 _placeHolder->setParentItem(0);
00099 }
00100 QPen pen = this->pen();
00101 this->setPen(QPen(pen.color(), _width+2));
00102 _placeHolder->setZValue(this->zValue()+1);
00103 _placeHolder->setPos(this->mapFromScene(0,0));
00104 _placeHolder->setVisible(true);
00105 }
00106
00107 void KeypointItem::hideDescription()
00108 {
00109 if(_placeHolder)
00110 {
00111 _placeHolder->setVisible(false);
00112 }
00113 this->setPen(QPen(pen().color(), _width));
00114 }
00115
00116 void KeypointItem::hoverEnterEvent ( QGraphicsSceneHoverEvent * event )
00117 {
00118 QGraphicsScene * scene = this->scene();
00119 if(scene && scene->focusItem() == 0)
00120 {
00121 this->showDescription();
00122 }
00123 else
00124 {
00125 this->setPen(QPen(pen().color(), _width+2));
00126 }
00127 QGraphicsEllipseItem::hoverEnterEvent(event);
00128 }
00129
00130 void KeypointItem::hoverLeaveEvent ( QGraphicsSceneHoverEvent * event )
00131 {
00132 if(!this->hasFocus())
00133 {
00134 this->hideDescription();
00135 }
00136 QGraphicsEllipseItem::hoverEnterEvent(event);
00137 }
00138
00139 void KeypointItem::focusInEvent ( QFocusEvent * event )
00140 {
00141 this->showDescription();
00142 QGraphicsEllipseItem::focusInEvent(event);
00143 }
00144
00145 void KeypointItem::focusOutEvent ( QFocusEvent * event )
00146 {
00147 this->hideDescription();
00148 QGraphicsEllipseItem::focusOutEvent(event);
00149 }
00150
00151 }