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