DbViewer: fixed error log when showing landmarks in Constraints view.

This commit is contained in:
matlabbe
2020-09-15 17:12:00 -04:00
parent 4e6e404951
commit 3d33370e4c

View File

@@ -5481,7 +5481,7 @@ void DatabaseViewer::updateConstraintView(
if(signatureTo.id()>0)
{
dataTo = signatureTo.sensorData();
dataTo = signatureTo.sensorData();
}
else if(link.to()>0)
{
@@ -5569,18 +5569,29 @@ void DatabaseViewer::updateConstraintView(
constraintsViewer_->removeCloud("words1");
if(ui_->checkBox_show3DWords->isChecked())
{
std::list<int> ids;
std::list<int> ids;
ids.push_back(link.from());
if(link.to()>0)
{
ids.push_back(link.to());
}
std::list<Signature*> signatures;
std::list<Signature*> signatures;
dbDriver_->loadSignatures(ids, signatures);
if(signatures.size() == 2 || (link.to()<0 && signatures.size()==1))
{
const Signature * sFrom = signatureFrom.id()>0?&signatureFrom:signatures.front();
{
const Signature * sFrom = signatureFrom.id()>0?&signatureFrom:signatures.front();
const Signature * sTo = 0;
if(signatures.size()==2)
{
sTo = signatureTo.id()>0?&signatureTo:signatures.back();
UASSERT(sTo);
}
UASSERT(sFrom);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloudFrom(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloudTo(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloudTo(new pcl::PointCloud<pcl::PointXYZ>);
cloudFrom->resize(sFrom->getWords3().size());
if(sTo)
{
cloudTo->resize(sTo->getWords3().size());
}
int i=0;
@@ -5589,11 +5600,14 @@ void DatabaseViewer::updateConstraintView(
++iter)
{
cloudFrom->at(i++) = pcl::PointXYZ(iter->second.x, iter->second.y, iter->second.z);
}
i=0;
for(std::multimap<int, cv::Point3f>::const_iterator iter=sTo->getWords3().begin();
}
i=0;
++iter)
if(sTo)
{
for(std::multimap<int, cv::Point3f>::const_iterator iter=sTo->getWords3().begin();
iter!=sTo->getWords3().end();
++iter)
{
cloudTo->at(i++) = pcl::PointXYZ(iter->second.x, iter->second.y, iter->second.z);
}
}
@@ -5624,7 +5638,10 @@ void DatabaseViewer::updateConstraintView(
{
constraintsViewer_->addCloud("words1", cloudTo, pose, Qt::cyan);
}
else
else
{
if(sTo)
{
UWARN("Empty 3D words for node %d", link.to());
}
constraintsViewer_->removeCloud("words1");