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 #include "PdfPlot.h"
00023
00024 #define ULOGGER_DEBUG(A, ...)
00025
00026 namespace rtabmap {
00027
00028 PdfPlotItem::PdfPlotItem(float dataX, float dataY, float width, int childCount) :
00029 UPlotItem(dataX, dataY, width),
00030 _img(0),
00031 _imagesRef(0)
00032 {
00033 setLikelihood(dataX, dataY, childCount);
00034 _text = new QGraphicsTextItem(this);
00035 _text->setVisible(false);
00036 }
00037
00038 PdfPlotItem::~PdfPlotItem()
00039 {
00040
00041 }
00042
00043 void PdfPlotItem::setLikelihood(int id, float value, int childCount)
00044 {
00045 if(_img && id != this->data().x())
00046 {
00047 delete _img;
00048 _img = 0;
00049 }
00050 this->setData(QPointF(id, value));
00051 _childCount = childCount;
00052 }
00053
00054 void PdfPlotItem::showDescription(bool shown)
00055 {
00056 if(shown)
00057 {
00058 if(!_img && _imagesRef)
00059 {
00060 QImage img;
00061 QMap<int, QByteArray>::const_iterator iter = _imagesRef->find(int(this->data().x()));
00062 if(iter != _imagesRef->constEnd())
00063 {
00064 if(img.loadFromData(iter.value(), "JPEG"))
00065 {
00066 QPixmap scaled = QPixmap::fromImage(img).scaledToWidth(128);
00067 _img = new QGraphicsPixmapItem(scaled, this);
00068 _img->setVisible(false);
00069 }
00070 }
00071 }
00072
00073 if(_img)
00074 _text->setPos(this->mapFromScene(4+150,0));
00075 else
00076 _text->setPos(this->mapFromScene(4,0));
00077 if(_childCount >= 0)
00078 {
00079 _text->setPlainText(QString("ID = %1\nValue = %2\nWeight = %3").arg(this->data().x()).arg(this->data().y()).arg(_childCount));
00080 }
00081 else
00082 {
00083 _text->setPlainText(QString("ID = %1\nValue = %2").arg(this->data().x()).arg(this->data().y()));
00084 }
00085 _text->setVisible(true);
00086 if(_img)
00087 {
00088 _img->setPos(this->mapFromScene(4,0));
00089 _img->setVisible(true);
00090 }
00091 }
00092 else
00093 {
00094 _text->setVisible(false);
00095 if(_img)
00096 _img->setVisible(false);
00097 }
00098 UPlotItem::showDescription(shown);
00099 }
00100
00101
00102
00103
00104
00105 PdfPlotCurve::PdfPlotCurve(const QString & name, const QMap<int, QByteArray> * imagesMapRef = 0, QObject * parent) :
00106 UPlotCurve(name, parent),
00107 _imagesMapRef(imagesMapRef)
00108 {
00109
00110 }
00111
00112 PdfPlotCurve::~PdfPlotCurve()
00113 {
00114
00115 }
00116
00117 void PdfPlotCurve::clear()
00118 {
00119 UPlotCurve::clear();
00120 }
00121
00122 void PdfPlotCurve::setData(const QMap<int, int> & dataMap, const QMap<int, int> & weightsMap)
00123 {
00124 ULOGGER_DEBUG("dataMap=%d, weightsMap=%d", dataMap.size(), weightsMap.size());
00125 if(dataMap.size() > 0)
00126 {
00127
00128 int margin = int((_items.size()+1)/2) - dataMap.size();
00129
00130 while(margin < 0)
00131 {
00132 PdfPlotItem * newItem = new PdfPlotItem(0, 0, 2, 0);
00133 newItem->setImagesRef(_imagesMapRef);
00134 this->_addValue(newItem);
00135 ++margin;
00136 }
00137
00138 while(margin > 0)
00139 {
00140 this->removeItem(0);
00141 --margin;
00142 }
00143
00144 ULOGGER_DEBUG("itemsize=%d", _items.size());
00145
00146
00147 QList<QGraphicsItem*>::iterator iter = _items.begin();
00148 QMap<int, int>::const_iterator j=weightsMap.begin();
00149 for(QMap<int, int>::const_iterator i=dataMap.begin(); i!=dataMap.end(); ++i, ++j)
00150 {
00151 ((PdfPlotItem*)*iter)->setLikelihood(i.key(), i.value(), j!=weightsMap.end()?j.value():-1);
00152
00153 ++iter;
00154 ++iter;
00155 }
00156
00157
00158 this->updateMinMax();
00159 Q_EMIT dataChanged(this);
00160 }
00161 }
00162
00163 }