DatabaseViewer: fixed update of constraintView when moving the image sliders.

git-svn-id: http://rtabmap.googlecode.com/svn/trunk/rtabmap@2049 f169173b-cf89-36c8-b27e-44dbe73f0c83
This commit is contained in:
matlabbe
2014-11-17 22:31:04 +00:00
parent fe20e03afb
commit 89bcea3057
2 changed files with 54 additions and 37 deletions
+2 -1
View File
@@ -109,7 +109,8 @@ private:
void updateWordsMatching(); void updateWordsMatching();
void updateConstraintView(const rtabmap::Link & link, void updateConstraintView(const rtabmap::Link & link,
const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloudFrom = pcl::PointCloud<pcl::PointXYZ>::Ptr(new pcl::PointCloud<pcl::PointXYZ>), const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloudFrom = pcl::PointCloud<pcl::PointXYZ>::Ptr(new pcl::PointCloud<pcl::PointXYZ>),
const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloudTo = pcl::PointCloud<pcl::PointXYZ>::Ptr(new pcl::PointCloud<pcl::PointXYZ>)); const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloudTo = pcl::PointCloud<pcl::PointXYZ>::Ptr(new pcl::PointCloud<pcl::PointXYZ>),
bool updateImageSliders = true);
void updateConstraintButtons(); void updateConstraintButtons();
Link findActiveLink(int from, int to); Link findActiveLink(int from, int to);
bool containsLink( bool containsLink(
+52 -36
View File
@@ -1081,7 +1081,13 @@ void DatabaseViewer::update(int value,
{ {
if(i != ui_->horizontalSlider_loops->value()) if(i != ui_->horizontalSlider_loops->value())
{ {
ui_->horizontalSlider_loops->blockSignals(true);
ui_->horizontalSlider_loops->setValue(i); ui_->horizontalSlider_loops->setValue(i);
ui_->horizontalSlider_loops->blockSignals(false);
this->updateConstraintView(loopLinks_.at(i),
pcl::PointCloud<pcl::PointXYZ>::Ptr(new pcl::PointCloud<pcl::PointXYZ>),
pcl::PointCloud<pcl::PointXYZ>::Ptr(new pcl::PointCloud<pcl::PointXYZ>),
false);
} }
ui_->horizontalSlider_neighbors->blockSignals(true); ui_->horizontalSlider_neighbors->blockSignals(true);
ui_->horizontalSlider_neighbors->setValue(0); ui_->horizontalSlider_neighbors->setValue(0);
@@ -1097,7 +1103,13 @@ void DatabaseViewer::update(int value,
{ {
if(i != ui_->horizontalSlider_neighbors->value()) if(i != ui_->horizontalSlider_neighbors->value())
{ {
ui_->horizontalSlider_neighbors->blockSignals(true);
ui_->horizontalSlider_neighbors->setValue(i); ui_->horizontalSlider_neighbors->setValue(i);
ui_->horizontalSlider_neighbors->blockSignals(false);
this->updateConstraintView(neighborLinks_.at(i),
pcl::PointCloud<pcl::PointXYZ>::Ptr(new pcl::PointCloud<pcl::PointXYZ>),
pcl::PointCloud<pcl::PointXYZ>::Ptr(new pcl::PointCloud<pcl::PointXYZ>),
false);
} }
ui_->horizontalSlider_loops->blockSignals(true); ui_->horizontalSlider_loops->blockSignals(true);
ui_->horizontalSlider_loops->setValue(0); ui_->horizontalSlider_loops->setValue(0);
@@ -1386,7 +1398,8 @@ void DatabaseViewer::sliderLoopValueChanged(int value)
void DatabaseViewer::updateConstraintView(const rtabmap::Link & link, void DatabaseViewer::updateConstraintView(const rtabmap::Link & link,
const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloudFrom, const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloudFrom,
const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloudTo) const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloudTo,
bool updateImageSliders)
{ {
std::multimap<int, Link>::iterator iter = util3d::findLink(linksRefined_, link.from(), link.to()); std::multimap<int, Link>::iterator iter = util3d::findLink(linksRefined_, link.from(), link.to());
rtabmap::Transform t = link.transform(); rtabmap::Transform t = link.transform();
@@ -1400,42 +1413,45 @@ void DatabaseViewer::updateConstraintView(const rtabmap::Link & link,
ui_->label_constraint->setText(t.prettyPrint().c_str()); ui_->label_constraint->setText(t.prettyPrint().c_str());
bool updateA = false; if(updateImageSliders)
bool updateB = false;
ui_->horizontalSlider_A->blockSignals(true);
ui_->horizontalSlider_B->blockSignals(true);
// set from on left and to on right
if(ui_->horizontalSlider_A->value() != idToIndex_.value(link.from()))
{ {
ui_->horizontalSlider_A->setValue(idToIndex_.value(link.from())); bool updateA = false;
updateA=true; bool updateB = false;
} ui_->horizontalSlider_A->blockSignals(true);
if(ui_->horizontalSlider_B->value() != idToIndex_.value(link.to())) ui_->horizontalSlider_B->blockSignals(true);
{ // set from on left and to on right
ui_->horizontalSlider_B->setValue(idToIndex_.value(link.to())); if(ui_->horizontalSlider_A->value() != idToIndex_.value(link.from()))
updateB=true; {
} ui_->horizontalSlider_A->setValue(idToIndex_.value(link.from()));
ui_->horizontalSlider_A->blockSignals(false); updateA=true;
ui_->horizontalSlider_B->blockSignals(false); }
if(updateA) if(ui_->horizontalSlider_B->value() != idToIndex_.value(link.to()))
{ {
this->update(idToIndex_.value(link.from()), ui_->horizontalSlider_B->setValue(idToIndex_.value(link.to()));
ui_->label_indexA, updateB=true;
ui_->label_parentsA, }
ui_->label_childrenA, ui_->horizontalSlider_A->blockSignals(false);
ui_->graphicsView_A, ui_->horizontalSlider_B->blockSignals(false);
ui_->label_idA, if(updateA)
false); // don't update constraints view! {
} this->update(idToIndex_.value(link.from()),
if(updateB) ui_->label_indexA,
{ ui_->label_parentsA,
this->update(idToIndex_.value(link.to()), ui_->label_childrenA,
ui_->label_indexB, ui_->graphicsView_A,
ui_->label_parentsB, ui_->label_idA,
ui_->label_childrenB, false); // don't update constraints view!
ui_->graphicsView_B, }
ui_->label_idB, if(updateB)
false); // don't update constraints view! {
this->update(idToIndex_.value(link.to()),
ui_->label_indexB,
ui_->label_parentsB,
ui_->label_childrenB,
ui_->graphicsView_B,
ui_->label_idB,
false); // don't update constraints view!
}
} }
if(ui_->constraintsViewer->isVisible()) if(ui_->constraintsViewer->isVisible())