From af688330203dd8c6d9f244dac2fd10b01a96f92b Mon Sep 17 00:00:00 2001 From: MPIBR-tushevg Date: Fri, 3 Aug 2018 11:09:07 +0200 Subject: [PATCH] rename threads --- BrainATUMtome/BrainATUMtome.pro | 4 - BrainATUMtome/drivervideostream.cpp | 85 ---- BrainATUMtome/drivervideostream.h | 45 -- BrainATUMtome/graphicsviewframe.cpp | 37 -- BrainATUMtome/graphicsviewframe.h | 31 -- BrainATUMtome/mainwindow.cpp | 153 +++--- BrainATUMtome/mainwindow.h | 24 +- BrainATUMtome/mainwindow.ui | 721 ++++++++++++++-------------- 8 files changed, 412 insertions(+), 688 deletions(-) delete mode 100644 BrainATUMtome/drivervideostream.cpp delete mode 100644 BrainATUMtome/drivervideostream.h delete mode 100644 BrainATUMtome/graphicsviewframe.cpp delete mode 100644 BrainATUMtome/graphicsviewframe.h diff --git a/BrainATUMtome/BrainATUMtome.pro b/BrainATUMtome/BrainATUMtome.pro index c0e134c..8631ba4 100644 --- a/BrainATUMtome/BrainATUMtome.pro +++ b/BrainATUMtome/BrainATUMtome.pro @@ -27,8 +27,6 @@ SOURCES += \ main.cpp \ mainwindow.cpp \ driverepos.cpp \ - drivervideostream.cpp \ - graphicsviewframe.cpp \ driverserialport.cpp \ driversyringe.cpp \ drivermicrotome.cpp @@ -36,8 +34,6 @@ SOURCES += \ HEADERS += \ mainwindow.h \ driverepos.h \ - drivervideostream.h \ - graphicsviewframe.h \ driverserialport.h \ driversyringe.h \ drivermicrotome.h diff --git a/BrainATUMtome/drivervideostream.cpp b/BrainATUMtome/drivervideostream.cpp deleted file mode 100644 index e1349d5..0000000 --- a/BrainATUMtome/drivervideostream.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include "drivervideostream.h" - -DriverVideoStream::DriverVideoStream(QObject *parent, const int cameraIndex) - : QObject(parent) -{ - - status = true; - - // open camera - capture.open(cameraIndex); - if (!capture.isOpened()) - { - status = false; - qDebug() << "Error:: could not initialize camera with ID " << cameraIndex; - } - - // assign acquisition timer - frameTimer = new QTimer(this); - QObject::connect(frameTimer, &QTimer::timeout, this, &DriverVideoStream::onGrabFrame); - - // set acquire vs. display ratio - // here maybe add pre-calculation of frame rate - frameRateAcquire = 100; - frameRateDisplay = 2; - frameCounter = 0; - -} - - -DriverVideoStream::~DriverVideoStream() -{ - capture.release(); -} - - -void DriverVideoStream::onGrabFrame() -{ - - // read next frame from stream - if (!capture.read(frame)) - { - status = false; - } - - - - // update frame counter - frameCounter++; - - // emit on dispay frameRate - if (frameCounter >= frameRateDisplay) - { - frameCounter = 0; - convertMatToQImage(frame, image); - emit(onFrameAcquired(&image)); - } -} - - -void DriverVideoStream::onStart() -{ - if (status) - frameTimer->start(frameRateAcquire); -} - - -void DriverVideoStream::onStop() -{ - frameTimer->stop(); -} - - -void DriverVideoStream::convertMatToQImage(Mat frame, QImage &image) -{ - if (frame.channels() == 3) - { - cvtColor(frame, frame, CV_BGR2RGB); - image = QImage((const unsigned char*)(frame.data), frame.cols, frame.rows, frame.step, QImage::Format_RGB888); - } - else - { - image = QImage((const unsigned char*)(frame.data), frame.cols, frame.rows, frame.step, QImage::Format_Indexed8); - } - -} diff --git a/BrainATUMtome/drivervideostream.h b/BrainATUMtome/drivervideostream.h deleted file mode 100644 index c77abd3..0000000 --- a/BrainATUMtome/drivervideostream.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef DRIVERVIDEOSTREAM_H -#define DRIVERVIDEOSTREAM_H - -#include -#include -#include -#include - -#include -#include -#include - -using namespace cv; - -class DriverVideoStream : public QObject -{ - Q_OBJECT - -public: - explicit DriverVideoStream(QObject *parent = 0, const int cameraIndex = 0); - ~DriverVideoStream(); - -private: - VideoCapture capture; - Mat frame; - QImage image; - QTimer *frameTimer; - int frameRateDisplay; - int frameRateAcquire; - int frameCounter; - bool status; - - void convertMatToQImage(Mat frame, QImage &image); - -public slots: - void onGrabFrame(); - void onStart(); - void onStop(); - -signals: - void onFrameAcquired(QImage *image); - -}; - -#endif // DRIVERVIDEOSTREAM_H diff --git a/BrainATUMtome/graphicsviewframe.cpp b/BrainATUMtome/graphicsviewframe.cpp deleted file mode 100644 index 97c4f5e..0000000 --- a/BrainATUMtome/graphicsviewframe.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include "graphicsviewframe.h" - -GraphicsViewFrame::GraphicsViewFrame(QWidget *parent) : QGraphicsView(parent) -{ - scene = new QGraphicsScene(this); - roi = new QGraphicsRectItem(QRectF(0,0,128,64)); - roi->setBrush(Qt::gray); - QPen pen(Qt::black, 1); - roi->setPen(pen); - roi->setOpacity(0.2); - roi->setFlag(QGraphicsItem::ItemIsMovable); - scene->addItem(roi); - this->setScene(scene); - this->show(); -} - -GraphicsViewFrame::~GraphicsViewFrame() -{ - -} - -void GraphicsViewFrame::updateSceneImage(QImage *image) -{ - scene->addPixmap(QPixmap::fromImage(*image)); - scene->setSceneRect(image->rect()); - this->setScene(scene); - this->fitInView(scene->sceneRect(), Qt::KeepAspectRatio); - roi->setZValue(1); -} - -void GraphicsViewFrame::resizeEvent(QResizeEvent *) -{ - QRectF bound = scene->itemsBoundingRect(); - this->fitInView(bound, Qt::KeepAspectRatio); - this->centerOn(0, 0); - roi->setZValue(1); -} diff --git a/BrainATUMtome/graphicsviewframe.h b/BrainATUMtome/graphicsviewframe.h deleted file mode 100644 index 9b31043..0000000 --- a/BrainATUMtome/graphicsviewframe.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef GRAPHICSVIEWFRAME_H -#define GRAPHICSVIEWFRAME_H - -#include -#include -#include -#include -#include -#include - -class GraphicsViewFrame : public QGraphicsView -{ - Q_OBJECT - -public: - explicit GraphicsViewFrame(QWidget *parent = nullptr); - ~GraphicsViewFrame(); - -private: - QGraphicsScene *scene; - QGraphicsRectItem *roi; - -public slots: - void updateSceneImage(QImage *image); - -protected: - void resizeEvent(QResizeEvent *) override; - -}; - -#endif // GRAPHICSVIEWFRAME_H diff --git a/BrainATUMtome/mainwindow.cpp b/BrainATUMtome/mainwindow.cpp index 6a0e375..6b98bf4 100644 --- a/BrainATUMtome/mainwindow.cpp +++ b/BrainATUMtome/mainwindow.cpp @@ -7,53 +7,18 @@ MainWindow::MainWindow(QWidget *parent) : { ui->setupUi(this); - configure_DriverEpos(); - configure_DriverMicrotome(); - configure_DriverSyringe(); - //configure_DriverVideoStream(); -} - -MainWindow::~MainWindow() -{ - // destroy DriverEpos thread - m_thread_dep->quit(); - m_thread_dep->wait(); - - // destroy DriverMicrotome thread - m_thread_dmt->quit(); - m_thread_dmt->wait(); - - // destroy DriverSyringe thread - m_thread_dsy->quit(); - m_thread_dsy->wait(); - - // destroy DriverVideoStream thread - //m_thread_dvs->quit(); - //m_thread_dvs->wait(); - - delete ui; -} - - - -void MainWindow::configure_DriverEpos() -{ - // initialize EPOS motors driver - m_dep = new DriverEpos(nullptr); - connect(this, &MainWindow::uirequest_dep_run, m_dep, &DriverEpos::on_uirequest_run); - connect(ui->lineEdit_dep_velocity, &QLineEdit::returnPressed, - [this](){ - if (QString::compare(ui->pushButton_dep_run->text(), "Stop") == 0) - command_DriverEpos(true);}); - - // motors panel + /* --- configure DriverEpos --- */ + m_driverEpos = new DriverEpos(nullptr); + m_thread_driverEpos = new QThread(this); + m_driverEpos->moveToThread(m_thread_driverEpos); + connect(m_thread_driverEpos, &QThread::finished, m_driverEpos, &DriverEpos::deleteLater); + m_thread_driverEpos->start(); + connect(this, &MainWindow::uirequest_dep_run, m_driverEpos, &DriverEpos::on_uirequest_run); QIntValidator *validator_velocity = new QIntValidator(0, 15000, this); ui->lineEdit_dep_velocity->setValidator(validator_velocity); - QButtonGroup *radioButtonGroup_direction = new QButtonGroup(this); radioButtonGroup_direction->addButton(ui->radioButton_dep_directionPositive); radioButtonGroup_direction->addButton(ui->radioButton_dep_directionNegative); - connect(ui->radioButton_dep_motorsBoth, &QRadioButton::toggled, [this, radioButtonGroup_direction](bool checked){ if (checked) @@ -71,30 +36,20 @@ void MainWindow::configure_DriverEpos() ui->groupBox_dep_direction->setDisabled(false); } }); - - // activate default mode ui->radioButton_dep_motorsBoth->setChecked(true); - // configure own thread - m_thread_dep = new QThread(); - m_dep->moveToThread(m_thread_dep); - connect(m_thread_dep, &QThread::finished, m_dep, &DriverEpos::deleteLater); - m_thread_dep->start(); -} - - - -void MainWindow::configure_DriverMicrotome() -{ - // initialize Microtome driver - m_dmt = new DriverMicrotome(nullptr); - + /* --- configure DriverMicrotome --- */ + m_driverMicrotome = new DriverMicrotome(nullptr); + m_thread_driverMicrotome = new QThread(this); + m_driverMicrotome->moveToThread(m_thread_driverMicrotome); + connect(m_thread_driverMicrotome, &QThread::finished, m_driverMicrotome, &DriverMicrotome::deleteLater); + m_thread_driverMicrotome->deleteLater(); - connect(this, &MainWindow::uirequest_dmt_cuttingMotroOff, m_dmt, &DriverMicrotome::on_uirequest_cuttingMotorOff); - connect(this, &MainWindow::uirequest_dmt_cuttingMotorOn, m_dmt, &DriverMicrotome::on_uirequest_cuttingMotorOn); - connect(this, &MainWindow::uirequest_dmt_setCuttingSpeed, m_dmt, &DriverMicrotome::on_uirequest_setCuttingSpeed); - connect(this, &MainWindow::uirequest_dmt_setReturnSpeed, m_dmt, &DriverMicrotome::on_uirequest_setReturnSpeed); - connect(this, &MainWindow::uirequest_dmt_setFeed, m_dmt, &DriverMicrotome::on_uirequest_setFeed); + connect(this, &MainWindow::uirequest_dmt_cuttingMotroOff, m_driverMicrotome, &DriverMicrotome::on_uirequest_cuttingMotorOff); + connect(this, &MainWindow::uirequest_dmt_cuttingMotorOn, m_driverMicrotome, &DriverMicrotome::on_uirequest_cuttingMotorOn); + connect(this, &MainWindow::uirequest_dmt_setCuttingSpeed, m_driverMicrotome, &DriverMicrotome::on_uirequest_setCuttingSpeed); + connect(this, &MainWindow::uirequest_dmt_setReturnSpeed, m_driverMicrotome, &DriverMicrotome::on_uirequest_setReturnSpeed); + connect(this, &MainWindow::uirequest_dmt_setFeed, m_driverMicrotome, &DriverMicrotome::on_uirequest_setFeed); connect(ui->lineEdit_dmt_cuttingSpeed, &QLineEdit::returnPressed, [this](){emit uirequest_dmt_setCuttingSpeed(ui->lineEdit_dmt_cuttingSpeed->text().toUInt());}); @@ -103,15 +58,15 @@ void MainWindow::configure_DriverMicrotome() connect(ui->lineEdit_dmt_feedStep, &QLineEdit::returnPressed, [this](){emit uirequest_dmt_setFeed(ui->lineEdit_dmt_feedStep->text().toUInt());}); - connect(m_dmt, &DriverMicrotome::sections, + connect(m_driverMicrotome, &DriverMicrotome::sections, [this](quint32 sections){ui->label_dmt_sections->setText(QString::number(sections));}); - connect(m_dmt, &DriverMicrotome::advance, + connect(m_driverMicrotome, &DriverMicrotome::advance, [this](quint32 positionLeft, float ratioLeft) {ui->label_dmt_advanceRemaining->setText( QString("%1 (%2%)").arg(QString::number(positionLeft), QString::number(ratioLeft)));}); - connect(m_dmt, &DriverMicrotome::cuttingSpeed, + connect(m_driverMicrotome, &DriverMicrotome::cuttingSpeed, [this](quint32 speed){ui->lineEdit_dmt_cuttingSpeed->setText(QString::number(speed));}); - connect(m_dmt, &DriverMicrotome::returnSpeed, + connect(m_driverMicrotome, &DriverMicrotome::returnSpeed, [this](quint32 speed){ int index = ui->comboBox_dmt_returnSpeed->findText(QString::number(speed),Qt::MatchExactly); if (index == -1) @@ -123,9 +78,9 @@ void MainWindow::configure_DriverMicrotome() ui->comboBox_dmt_returnSpeed->setCurrentIndex(index); } }); - connect(m_dmt, &DriverMicrotome::feedStep, + connect(m_driverMicrotome, &DriverMicrotome::feedStep, [this](quint16 step){ui->lineEdit_dmt_feedStep->setText(QString::number(step));}); - connect(m_dmt, &DriverMicrotome::cuttingMotorEnabled, + connect(m_driverMicrotome, &DriverMicrotome::cuttingMotorEnabled, [this](bool status){ if (status) { @@ -137,48 +92,40 @@ void MainWindow::configure_DriverMicrotome() } }); - // set value editors QIntValidator *validator_cuttingSpeed = new QIntValidator(50, 100000, this); ui->lineEdit_dmt_cuttingSpeed->setValidator(validator_cuttingSpeed); QIntValidator *validator_feedStep = new QIntValidator(1, 15000, this); ui->lineEdit_dmt_feedStep->setValidator(validator_feedStep); - // configure own thread - m_thread_dmt = new QThread(); - m_dmt->moveToThread(m_thread_dmt); - connect(m_thread_dmt, &QThread::finished, m_dmt, &DriverEpos::deleteLater); - m_thread_dmt->start(); -} + /* --- configure DriverSyringe --- */ + m_driverSyringe = new DriverSyringe(nullptr); + m_thread_driverSyringe = new QThread(this); + m_driverSyringe->moveToThread(m_thread_driverSyringe); + connect(m_thread_driverSyringe, &QThread::finished, m_driverSyringe, &DriverSyringe::deleteLater); + m_thread_driverSyringe->start(); + connect(ui->pushButton_dsy_pump, &QPushButton::clicked, m_driverSyringe, &DriverSyringe::on_uirequest_pump); -void MainWindow::configure_DriverSyringe() -{ - // initialize syringe driver - m_dsy = new DriverSyringe(nullptr); - connect(ui->pushButton_dsy_pump, &QPushButton::clicked, m_dsy, &DriverSyringe::on_uirequest_pump); - - // configure own thread - m_thread_dsy = new QThread(); - m_dsy->moveToThread(m_thread_dsy); - connect(m_thread_dsy, &QThread::finished, m_dsy, &DriverEpos::deleteLater); - m_thread_dsy->start(); -} +} -void MainWindow::configure_DriverVideoStream() +MainWindow::~MainWindow() { - m_dvs = new DriverVideoStream(nullptr, 0); - connect(m_dvs, &DriverVideoStream::onFrameAcquired, ui->widget_viewFrame, &GraphicsViewFrame::updateSceneImage); - connect(ui->pushButton_dvs_live, &QPushButton::clicked, m_dvs, &DriverVideoStream::onStart); - connect(ui->pushButton_dvs_snap, &QPushButton::clicked, m_dvs, &DriverVideoStream::onStop); - - // configure own thread - m_thread_dvs = new QThread(); - m_dvs->moveToThread(m_thread_dvs); - connect(m_thread_dvs, &QThread::finished, m_dvs, &DriverEpos::deleteLater); - m_thread_dvs->start(); + // destroy DriverEpos thread + m_thread_driverEpos->quit(); + m_thread_driverEpos->wait(); + + // destroy DriverMicrotome thread + m_thread_driverMicrotome->quit(); + m_thread_driverMicrotome->wait(); + + // destroy DriverSyringe thread + m_thread_driverSyringe->quit(); + m_thread_driverSyringe->wait(); + + delete ui; } @@ -247,3 +194,11 @@ void MainWindow::command_DriverEpos(bool state) emit uirequest_dep_run(motors, velocity, direction, tension); } + +void MainWindow::on_lineEdit_dep_velocity_returnPressed() +{ + if (QString::compare(ui->pushButton_dep_run->text(), "Stop") != 0) + return; + + command_DriverEpos(true); +} diff --git a/BrainATUMtome/mainwindow.h b/BrainATUMtome/mainwindow.h index e330d85..19591e9 100644 --- a/BrainATUMtome/mainwindow.h +++ b/BrainATUMtome/mainwindow.h @@ -9,8 +9,6 @@ #include "driverepos.h" #include "drivermicrotome.h" #include "driversyringe.h" -#include "drivervideostream.h" -#include "graphicsviewframe.h" namespace Ui { class MainWindow; @@ -27,20 +25,16 @@ class MainWindow : public QMainWindow private: Ui::MainWindow *ui; - DriverEpos *m_dep; - DriverMicrotome *m_dmt; - DriverSyringe *m_dsy; - DriverVideoStream *m_dvs; + DriverEpos *m_driverEpos; + DriverMicrotome *m_driverMicrotome; + DriverSyringe *m_driverSyringe; + + QThread *m_thread_driverEpos; + QThread *m_thread_driverMicrotome; + QThread *m_thread_driverSyringe; + - QThread *m_thread_dep; - QThread *m_thread_dmt; - QThread *m_thread_dsy; - QThread *m_thread_dvs; - void configure_DriverEpos(); - void configure_DriverMicrotome(); - void configure_DriverSyringe(); - void configure_DriverVideoStream(); void command_DriverEpos(bool state); @@ -48,6 +42,8 @@ private slots: void on_pushButton_dep_run_clicked(); void on_pushButton_dmt_cut_clicked(); + void on_lineEdit_dep_velocity_returnPressed(); + signals: void uirequest_dmt_setCuttingSpeed(quint32 value); void uirequest_dmt_setReturnSpeed(quint32 value); diff --git a/BrainATUMtome/mainwindow.ui b/BrainATUMtome/mainwindow.ui index 699f9ac..a4890de 100644 --- a/BrainATUMtome/mainwindow.ui +++ b/BrainATUMtome/mainwindow.ui @@ -21,341 +21,139 @@ - - - - - - - 0 - 0 - - - - - 276 - 210 - - - - - 240 - 210 - - - - EPOS - - - false - - - - - - - - velocity [rpm] - - - - - - - 1000 - - - - - + + + + + 0 + 0 + + + + + 276 + 210 + + + + + 240 + 210 + + + + EPOS + + + false + + + + - - - Motors + + + velocity [rpm] - - - - - tension - - - false - - - - - - - both - - - false - - - true - - - - - - - upper - - - - - - - lower - - - - - - - true - - - Direction + + + 1000 - - - - - true - - - positive (CCW) - - - true - - - false - - - - - - - true - - - negative (CW) - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Run - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - 0 - 0 - - - - - 240 - 180 - - - - Microtome - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Cut - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - cutting speed [um/sec] - - - - - - - 100 - - - - - - - return speed [um/sec] - - - - - - - feed step [nm] - - - - - - - 30 - - - - - - - sections - - - - - - - 0 - - - - - - - advance remaining [nm] - - - - - - - 0 - - - - - - - - 10000 - - - - - 30000 - - - - - 50000 - - - - - - - - - - - - - 0 - 0 - - - - - 276 - 60 - - - - Syringe - - - - + + + + + Motors + + + + + + tension + + + false + + + + + + + both + + + false + + + true + + + + + + + upper + + + + + + + lower + + + + + + + + + + true + + + Direction + + + + + + true + + + positive (CCW) + + + true + + + false + + + + + + + true + + + negative (CW) + + + + + + + + + + Qt::Horizontal @@ -367,15 +165,15 @@ - - + + - Pump + Run - - + + Qt::Horizontal @@ -388,35 +186,55 @@ - - - - - - - 0 - 0 - - - - - 276 - 60 - - - - Camera - - + + + + + + + + + + + + 0 + 0 + + + + + 240 + 180 + + + + Microtome + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + - + - Live + Cut - + Qt::Horizontal @@ -428,20 +246,99 @@ - - + + + + + + - Snap + cutting speed [um/sec] + + + + 100 + + + + + + + return speed [um/sec] + + + + + + + feed step [nm] + + + + + + + 30 + + + + + + + sections + + + + + + + 0 + + + + + + + advance remaining [nm] + + + + + + + 0 + + + + + + + + 10000 + + + + + 30000 + + + + + 50000 + + + + - - - + + + - - + + 0 @@ -450,13 +347,51 @@ - 820 - 400 + 276 + 60 + + Syringe + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Pump + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + - + Log @@ -475,6 +410,54 @@ + + + + + 0 + 0 + + + + + 276 + 60 + + + + Camera + + + + + + Record + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Snap + + + + + + @@ -498,14 +481,6 @@ - - - GraphicsViewFrame - QWidget -
graphicsviewframe.h
- 1 -
-