From 36d92db850a7b16a841b5c63f0841c545c4362b0 Mon Sep 17 00:00:00 2001 From: Fabian Paus <fabian.paus@kit.edu> Date: Mon, 27 Mar 2017 14:00:41 +0200 Subject: [PATCH] Laser scanner GUI: fixed hanging GUI problem --- .../LaserScannerTest/config/HokuyoLaserUnitApp.cfg | 4 ++-- .../LaserScannerPluginWidgetController.cpp | 14 ++++++-------- .../LaserScannerPluginWidgetController.h | 2 +- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/scenarios/LaserScannerTest/config/HokuyoLaserUnitApp.cfg b/scenarios/LaserScannerTest/config/HokuyoLaserUnitApp.cfg index 37804992b..effbf0059 100644 --- a/scenarios/LaserScannerTest/config/HokuyoLaserUnitApp.cfg +++ b/scenarios/LaserScannerTest/config/HokuyoLaserUnitApp.cfg @@ -79,10 +79,10 @@ # - Default: -2.3561945 # - Case sensitivity: no # - Required: no -# ArmarX.HokuyoLaserUnit.AngleOffset = -2.3561945 +ArmarX.HokuyoLaserUnit.AngleOffset = 0 -# ArmarX.HokuyoLaserUnit.Devices: List of devices in form of 'IP1,port1;IP2,port2;...' +# ArmarX.HokuyoLaserUnit.Devices: List of devices in form of 'IP1,port1,frame1;IP2,port2,frame2;...' # Attributes: # - Default: "" # - Case sensitivity: no diff --git a/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.cpp b/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.cpp index 4ed9add23..01a0f8d8c 100644 --- a/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.cpp +++ b/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.cpp @@ -32,8 +32,6 @@ using namespace armarx; LaserScannerPluginWidgetController::LaserScannerPluginWidgetController() { widget.setupUi(getWidget()); - - widget.graphicsView->setScene(&scene); } @@ -129,10 +127,10 @@ void LaserScannerPluginWidgetController::onNewSensorValuesReported() QGraphicsView* view = widget.graphicsView; - - scene.clear(); + scene.reset(new QGraphicsScene()); + widget.graphicsView->setScene(scene.get()); int outerR = std::min(view->width() / 2, view->height() / 2); - scene.addEllipse(-outerR, -outerR, 2 * outerR, 2 * outerR, QPen(QColor(255, 255, 255))); + scene->addEllipse(-outerR, -outerR, 2 * outerR, 2 * outerR, QPen(QColor(255, 255, 255))); int r = outerR - 10; //scene.addEllipse(-r, -r, 2 * r, 2 * r, QPen(QColor(200, 200, 200))); QColor stepColor(QColor::fromRgb(100, 100, 255)); @@ -141,7 +139,7 @@ void LaserScannerPluginWidgetController::onNewSensorValuesReported() auto line = [&](float angle, float d) { float di = d * r; - QGraphicsEllipseItem* item = scene.addEllipse(-di, -di, 2 * di, 2 * di, stepPen, stepBrush); + QGraphicsEllipseItem* item = scene->addEllipse(-di, -di, 2 * di, 2 * di, stepPen, stepBrush); // Angles for Qt ellipse are in 16th of degree (who thought that would be a great idea?) item->setStartAngle(std::round(16.0f * angle * 180.0 / M_PI) + 90 * 16); item->setSpanAngle(std::round(stepSize * 16.0f * 180.0 / M_PI)); @@ -175,10 +173,10 @@ void LaserScannerPluginWidgetController::onNewSensorValuesReported() for (int ringIndex = 1; ringIndex <= maxNumberOfRings; ++ringIndex) { float ri = 1.0f * ringIndex / maxNumberOfRings * r; - scene.addEllipse(-ri, -ri, 2 * ri, 2 * ri, QPen(QColor(200, 200, 200))); + scene->addEllipse(-ri, -ri, 2 * ri, 2 * ri, QPen(QColor(200, 200, 200))); } - view->fitInView(scene.itemsBoundingRect(), Qt::KeepAspectRatio); + view->fitInView(scene->itemsBoundingRect(), Qt::KeepAspectRatio); } void LaserScannerPluginWidgetController::onDeviceSelected(int index) diff --git a/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.h b/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.h index f0310dba0..61de784ae 100644 --- a/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.h +++ b/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.h @@ -125,7 +125,7 @@ namespace armarx std::unordered_map<std::string, std::deque<int>> numberOfRingsHistory; - QGraphicsScene scene; + std::unique_ptr<QGraphicsScene> scene; }; } -- GitLab