From aea129e46db0270585b9d36cc2cfb87f8eacf67d Mon Sep 17 00:00:00 2001
From: Fabian Paus <fabian.paus@kit.edu>
Date: Tue, 3 Dec 2019 17:58:06 +0100
Subject: [PATCH] ArViz: Add loopback capability

---
 .../RobotAPI/gui-plugins/ArViz/ArVizWidget.ui  | 10 ++++++++++
 .../ArViz/ArVizWidgetController.cpp            | 18 +++++++++++-------
 2 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/source/RobotAPI/gui-plugins/ArViz/ArVizWidget.ui b/source/RobotAPI/gui-plugins/ArViz/ArVizWidget.ui
index 7022edb4f..a4fd359f7 100644
--- a/source/RobotAPI/gui-plugins/ArViz/ArVizWidget.ui
+++ b/source/RobotAPI/gui-plugins/ArViz/ArVizWidget.ui
@@ -481,6 +481,16 @@
               </property>
              </widget>
             </item>
+            <item>
+             <widget class="QCheckBox" name="replayLoopbackCheckBox">
+              <property name="text">
+               <string>Loopback</string>
+              </property>
+              <property name="checked">
+               <bool>true</bool>
+              </property>
+             </widget>
+            </item>
             <item>
              <spacer name="horizontalSpacer_6">
               <property name="orientation">
diff --git a/source/RobotAPI/gui-plugins/ArViz/ArVizWidgetController.cpp b/source/RobotAPI/gui-plugins/ArViz/ArVizWidgetController.cpp
index 55f18a35c..fd5acc314 100644
--- a/source/RobotAPI/gui-plugins/ArViz/ArVizWidgetController.cpp
+++ b/source/RobotAPI/gui-plugins/ArViz/ArVizWidgetController.cpp
@@ -650,8 +650,7 @@ long ArVizWidgetController::getRevisionForTimestamp(long timestamp)
     auto updateEnd = std::lower_bound(batch.updates.begin(), batch.updates.end(), pivot, timestampLess);
     if (updateEnd == batch.updates.end())
     {
-        ARMARX_WARNING << "Could not find revision for timestamp: " << timestampToString(timestamp);
-        return -1;
+        return -2;
     }
     if (updateEnd != batch.updates.begin())
     {
@@ -689,13 +688,18 @@ void ArVizWidgetController::onReplayTimerTick()
     replayCurrentTimestamp += 33000 * replaySpeed;
 
     long revision = getRevisionForTimestamp(replayCurrentTimestamp);
-    ARMARX_INFO << "Timestamp: " << timestampToString(replayCurrentTimestamp)
-                << "\nRevision: " << revision;
-    if (revision < 0)
+    if (revision == -2)
     {
-        replayCurrentTimestamp = currentRecording.firstTimestampInMicroSeconds;
+        if (widget.replayLoopbackCheckBox->checkState() == Qt::Checked)
+        {
+            replayCurrentTimestamp = currentRecording.firstTimestampInMicroSeconds;
+        }
+        else
+        {
+            revision = currentRecording.lastRevision;
+        }
     }
-    else
+    if (revision >= 0)
     {
         widget.replayRevisionSlider->setValue(revision);
     }
-- 
GitLab