From 1566732d9dfa2e51702f5ffcac85dc4dfdd7f34e Mon Sep 17 00:00:00 2001 From: armar-user <armar-user@kit.edu> Date: Tue, 20 Jul 2021 17:21:43 +0200 Subject: [PATCH] (FP, RK) ArViz: Replace Coin timer by QtTimer to fix ArViz from freezing (update() would not be called in some cases) --- .../components/ArViz/Coin/Visualizer.cpp | 20 +++++++++---------- .../ArViz/ArVizWidgetController.cpp | 9 +++++++++ .../gui-plugins/ArViz/ArVizWidgetController.h | 2 ++ 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp b/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp index 96ad7fed3..3f24eecf8 100644 --- a/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp +++ b/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp @@ -51,11 +51,11 @@ namespace armarx::viz return "UNKNOWN"; } - static void updateVisualizationCB(void* data, SoSensor* sensor) - { - auto* visu = static_cast<CoinVisualizer*>(data); - visu->update(); - } + // static void updateVisualizationCB(void* data, SoSensor* sensor) + // { + // auto* visu = static_cast<CoinVisualizer*>(data); + // visu->update(); + // } struct TimedBlock { @@ -89,10 +89,10 @@ namespace armarx::viz &CoinVisualizerWrapper::onUpdateFailure); root = new SoSeparator; - timerSensor = new SoTimerSensor(updateVisualizationCB, this); + //timerSensor = new SoTimerSensor(updateVisualizationCB, this); - float cycleTimeMS = 33.0f; - timerSensor->setInterval(SbTime(cycleTimeMS / 1000.0f)); + //float cycleTimeMS = 33.0f; + //timerSensor->setInterval(SbTime(cycleTimeMS / 1000.0f)); } CoinVisualizer::~CoinVisualizer() @@ -115,8 +115,8 @@ namespace armarx::viz state = CoinVisualizerState::STARTING; stateStorage = storage; - SoSensorManager* sensor_mgr = SoDB::getSensorManager(); - sensor_mgr->insertTimerSensor(timerSensor); + //SoSensorManager* sensor_mgr = SoDB::getSensorManager(); + //sensor_mgr->insertTimerSensor(timerSensor); } void CoinVisualizer::stop() diff --git a/source/RobotAPI/gui-plugins/ArViz/ArVizWidgetController.cpp b/source/RobotAPI/gui-plugins/ArViz/ArVizWidgetController.cpp index 44d9c0aa5..3de4e9110 100644 --- a/source/RobotAPI/gui-plugins/ArViz/ArVizWidgetController.cpp +++ b/source/RobotAPI/gui-plugins/ArViz/ArVizWidgetController.cpp @@ -65,6 +65,9 @@ namespace armarx widget.setupUi(getWidget()); + updateTimer = new QTimer(this); + connect(updateTimer, &QTimer::timeout, this, QOverload<>::of(&This::onUpdate)); + timingObserverTimer = new QTimer(this); connect(timingObserverTimer, &QTimer::timeout, this, QOverload<>::of(&This::onTimingObserverUpdate)); @@ -186,6 +189,7 @@ namespace armarx changeMode(ArVizWidgetMode::Live); timingObserverTimer->start(33); + updateTimer->start(33); } void ArVizWidgetController::onDisconnectGui() @@ -440,6 +444,11 @@ namespace armarx layerTreeChanged(nullptr, 0); } + void ArVizWidgetController::onUpdate() + { + visualizer.update(); + } + void ArVizWidgetController::onTimingObserverUpdate() { viz::CoinVisualizer_UpdateTiming timing = visualizer.getTiming(); diff --git a/source/RobotAPI/gui-plugins/ArViz/ArVizWidgetController.h b/source/RobotAPI/gui-plugins/ArViz/ArVizWidgetController.h index 7a3a0bfa3..31383a63e 100644 --- a/source/RobotAPI/gui-plugins/ArViz/ArVizWidgetController.h +++ b/source/RobotAPI/gui-plugins/ArViz/ArVizWidgetController.h @@ -140,6 +140,7 @@ namespace armarx void showAllLayers(bool visible); void showFilteredLayers(bool visible); + void onUpdate(); void onTimingObserverUpdate(); @@ -174,6 +175,7 @@ namespace armarx QPointer<SimpleConfigDialog> configDialog; + QTimer* updateTimer; QTimer* timingObserverTimer; viz::CoinVisualizer_UpdateTiming lastTiming; StringVariantBaseMap timingMap; -- GitLab