mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-03 01:50:24 +08:00
DBViewer: fixed some missing links/poses. GraphViewer: fixed global path color context menu action, now small links are ignored
This commit is contained in:
@@ -1089,7 +1089,7 @@ void DatabaseViewer::updateIds()
|
|||||||
previousPose=p;
|
previousPose=p;
|
||||||
|
|
||||||
//links
|
//links
|
||||||
bool linksInserted = false;
|
bool addPose = false;
|
||||||
for(std::map<int, Link>::iterator jter=links.find(ids_[i]); jter!=links.end() && jter->first == ids_[i]; ++jter)
|
for(std::map<int, Link>::iterator jter=links.find(ids_[i]); jter!=links.end() && jter->first == ids_[i]; ++jter)
|
||||||
{
|
{
|
||||||
std::map<int, Link>::iterator invertedLinkIter = graph::findLink(links, jter->second.to(), jter->second.from(), false);
|
std::map<int, Link>::iterator invertedLinkIter = graph::findLink(links, jter->second.to(), jter->second.from(), false);
|
||||||
@@ -1110,11 +1110,14 @@ void DatabaseViewer::updateIds()
|
|||||||
{
|
{
|
||||||
links_.insert(std::make_pair(ids_[i], jter->second));
|
links_.insert(std::make_pair(ids_[i], jter->second));
|
||||||
}
|
}
|
||||||
|
addPose = true;
|
||||||
linksInserted = true;
|
}
|
||||||
|
else if(graph::findLink(links_, jter->second.from(), jter->second.to()) != links_.end())
|
||||||
|
{
|
||||||
|
addPose = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(linksInserted)
|
if(addPose)
|
||||||
{
|
{
|
||||||
poses_.insert(std::make_pair(ids_[i], p));
|
poses_.insert(std::make_pair(ids_[i], p));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -301,9 +301,10 @@ void GraphViewer::updateGraph(const std::map<int, Transform> & poses,
|
|||||||
const Transform & poseA = jterA->second;
|
const Transform & poseA = jterA->second;
|
||||||
const Transform & poseB = jterB->second;
|
const Transform & poseB = jterB->second;
|
||||||
|
|
||||||
|
QMultiMap<int, LinkItem*>::iterator itemIter = _linkItems.end();
|
||||||
if(_linkItems.contains(idFrom))
|
if(_linkItems.contains(idFrom))
|
||||||
{
|
{
|
||||||
QMultiMap<int, LinkItem*>::iterator itemIter = _linkItems.find(iter->first);
|
itemIter = _linkItems.find(iter->first);
|
||||||
while(itemIter.key() == idFrom && itemIter != _linkItems.end())
|
while(itemIter.key() == idFrom && itemIter != _linkItems.end())
|
||||||
{
|
{
|
||||||
if(itemIter.value()->to() == idTo)
|
if(itemIter.value()->to() == idTo)
|
||||||
@@ -323,6 +324,8 @@ void GraphViewer::updateGraph(const std::map<int, Transform> & poses,
|
|||||||
interSessionClosure = mapIds.at(jterA->first) != mapIds.at(jterB->first);
|
interSessionClosure = mapIds.at(jterA->first) != mapIds.at(jterB->first);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(poseA.getDistance(poseB) > 0.005)
|
||||||
|
{
|
||||||
if(linkItem == 0)
|
if(linkItem == 0)
|
||||||
{
|
{
|
||||||
//create a link item
|
//create a link item
|
||||||
@@ -335,7 +338,17 @@ void GraphViewer::updateGraph(const std::map<int, Transform> & poses,
|
|||||||
linkItem->setParentItem(_root);
|
linkItem->setParentItem(_root);
|
||||||
_linkItems.insert(idFrom, linkItem);
|
_linkItems.insert(idFrom, linkItem);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else if(linkItem && itemIter != _linkItems.end())
|
||||||
|
{
|
||||||
|
// erase small links
|
||||||
|
_linkItems.erase(itemIter);
|
||||||
|
delete linkItem;
|
||||||
|
linkItem = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(linkItem)
|
||||||
|
{
|
||||||
//update color
|
//update color
|
||||||
if(iter->second.type() == Link::kNeighbor)
|
if(iter->second.type() == Link::kNeighbor)
|
||||||
{
|
{
|
||||||
@@ -401,6 +414,7 @@ void GraphViewer::updateGraph(const std::map<int, Transform> & poses,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//remove not used nodes and links
|
//remove not used nodes and links
|
||||||
for(QMap<int, NodeItem*>::iterator iter = _nodeItems.begin(); iter!=_nodeItems.end();)
|
for(QMap<int, NodeItem*>::iterator iter = _nodeItems.begin(); iter!=_nodeItems.end();)
|
||||||
@@ -1272,6 +1286,10 @@ void GraphViewer::contextMenuEvent(QContextMenuEvent * event)
|
|||||||
{
|
{
|
||||||
this->setLocalPathColor(color);
|
this->setLocalPathColor(color);
|
||||||
}
|
}
|
||||||
|
else if(r == aChangeGlobalPathColor)
|
||||||
|
{
|
||||||
|
this->setGlobalPathColor(color);
|
||||||
|
}
|
||||||
else if(r == aChangeIntraSessionLoopColor)
|
else if(r == aChangeIntraSessionLoopColor)
|
||||||
{
|
{
|
||||||
this->setIntraSessionLoopColor(color);
|
this->setIntraSessionLoopColor(color);
|
||||||
|
|||||||
Reference in New Issue
Block a user