diff --git a/HPPA/AppSettings.cpp b/HPPA/AppSettings.cpp index aa966ef..3fe1c30 100644 --- a/HPPA/AppSettings.cpp +++ b/HPPA/AppSettings.cpp @@ -137,7 +137,7 @@ void AppSettings::setRgbCameraDataFolder(const QString& path) QString AppSettings::rgbCameraFileName() const { - return m_settings.value("RgbCamera/FileName", "test").toString(); + return m_settings.value("RgbCamera/FileName", "test_rgb_data").toString(); } void AppSettings::setRgbCameraFileName(const QString& name) @@ -145,6 +145,16 @@ void AppSettings::setRgbCameraFileName(const QString& name) m_settings.setValue("RgbCamera/FileName", name); } +QString AppSettings::fodisCameraFileName() const +{ + return m_settings.value("FodisCamera/FileName", "test_fodis_data").toString(); +} + +void AppSettings::setFodisCameraFileName(const QString& name) +{ + m_settings.setValue("FodisCamera/FileName", name); +} + double AppSettings::scanSpeed() const { return m_settings.value("OneMotorControl/ScanSpeed", kDefaultScanSpeed).toDouble(); diff --git a/HPPA/AppSettings.h b/HPPA/AppSettings.h index 1f062fe..b62711d 100644 --- a/HPPA/AppSettings.h +++ b/HPPA/AppSettings.h @@ -45,6 +45,9 @@ public: QString rgbCameraFileName() const; void setRgbCameraFileName(const QString& name); + QString fodisCameraFileName() const; + void setFodisCameraFileName(const QString& name); + // 扫描速度 double scanSpeed() const; void setScanSpeed(double value); diff --git a/HPPA/CaptureCoordinator.cpp b/HPPA/CaptureCoordinator.cpp index 91496f8..73c2de2 100644 --- a/HPPA/CaptureCoordinator.cpp +++ b/HPPA/CaptureCoordinator.cpp @@ -459,7 +459,9 @@ OneMotionCaptureCoordinator::OneMotionCaptureCoordinator( connect(this, &OneMotionCaptureCoordinator::stopRecordHSISignal, m_cameraCtrl, &ImagerOperationBase::stop_record); connect(m_cameraCtrl, &ImagerOperationBase::RecordFinishedSignal_WhenFrameNumberMeet, - this, &OneMotionCaptureCoordinator::handleCaptureCompleteWhenFrameNumberMeet); + this, &OneMotionCaptureCoordinator::handleHyperImagerCaptureComplete); + connect(m_cameraCtrl, &ImagerOperationBase::RecordFinishedSignal_WhenFrameNumberNotMeet, + this, &OneMotionCaptureCoordinator::handleHyperImagerCaptureComplete); } OneMotionCaptureCoordinator::~OneMotionCaptureCoordinator() @@ -498,12 +500,9 @@ void OneMotionCaptureCoordinator::stopStepMotion() { m_cameraCtrl->stop_record(); } - - emit stopMotorSignal(0); - m_isHypercamStopRecord = true; } -void OneMotionCaptureCoordinator::handleCaptureCompleteWhenFrameNumberMeet() +void OneMotionCaptureCoordinator::handleHyperImagerCaptureComplete() { emit stopMotorSignal(0); m_isHypercamStopRecord = true; @@ -588,13 +587,11 @@ void OneMotionCaptureCoordinator::handleMotorStoped(int motorID, double pos) } move2LocBeforeStart(); - emit sequenceComplete_cam_stop_before_motorback(0); + emit sequenceCompleteSignal_hyperImagerStopRecord(0); } else { - // emit sequenceComplete last: the slot connected to it may delete this object, - // so no member access is allowed after this point. - emit sequenceComplete(0); + emit sequenceCompleteSignal_motorBack2Origin(0); } } diff --git a/HPPA/CaptureCoordinator.h b/HPPA/CaptureCoordinator.h index 1b97a1c..099c4cf 100644 --- a/HPPA/CaptureCoordinator.h +++ b/HPPA/CaptureCoordinator.h @@ -141,11 +141,11 @@ public slots: void startStepMotion(OneMotionCapturePathLine pathLine); void stopStepMotion(); - void handleCaptureCompleteWhenFrameNumberMeet(); + void handleHyperImagerCaptureComplete(); signals: - void sequenceComplete_cam_stop_before_motorback(int); - void sequenceComplete(int); + void sequenceCompleteSignal_hyperImagerStopRecord(int); + void sequenceCompleteSignal_motorBack2Origin(int); void errorOccurred(const QString& error); void moveTo(int, double, double, int); void moveSignal(int, bool, double, int); diff --git a/HPPA/FiberSpectrometerOperationBase.h b/HPPA/FiberSpectrometerOperationBase.h index 5318d9e..3fb053a 100644 --- a/HPPA/FiberSpectrometerOperationBase.h +++ b/HPPA/FiberSpectrometerOperationBase.h @@ -50,7 +50,7 @@ private: public slots: virtual void recordDark(QString path) = 0; - virtual void recordTarget(int recordTimes, QString path) = 0; + virtual void recordTarget2csv(int recordTimes, QString path) = 0; virtual void autoExpose() = 0; signals: diff --git a/HPPA/FodisWindow.cpp b/HPPA/FodisWindow.cpp index 9602404..26fbc96 100644 --- a/HPPA/FodisWindow.cpp +++ b/HPPA/FodisWindow.cpp @@ -27,10 +27,9 @@ FodisWindow::FodisWindow(QWidget* parent) connect(this->ui.dataFolderBtn, SIGNAL(clicked()), this, SLOT(onSelectDataFolder())); - // 初始化数据保存路径显示(从 AppSettings 恢复或使用默认) - ui.dataFolderLineEdit->setText(AppSettings::instance().depthCameraDataFolder()); + connect(ui.fileNameLineEdit, &QLineEdit::textChanged, this, &FodisWindow::onFileNameChanged); - setDataFolder(AppSettings::instance().FiberImagerDataFolder()); + loadSettings(); } FodisWindow::~FodisWindow() @@ -41,6 +40,12 @@ FodisWindow::~FodisWindow() m_JinspFiberImagerOperation = nullptr; } +void FodisWindow::loadSettings() +{ + ui.dataFolderLineEdit->setText(AppSettings::instance().FiberImagerDataFolder()); + ui.fileNameLineEdit->setText(AppSettings::instance().fodisCameraFileName()); +} + void FodisWindow::onSelectDataFolder() { QString dir = QFileDialog::getExistingDirectory(this, @@ -59,6 +64,17 @@ void FodisWindow::setDataFolder(QString dir) } } +void FodisWindow::setFileName(QString name) +{ + ui.fileNameLineEdit->setText(name); + AppSettings::instance().setFodisCameraFileName(name); +} + +void FodisWindow::onFileNameChanged(const QString& text) +{ + AppSettings::instance().setFodisCameraFileName(text); +} + void FodisWindow::setCaptureInterval(int captureIntervalSeconds) { m_JinspFiberImagerOperation->setCaptureInterval(captureIntervalSeconds); @@ -69,11 +85,24 @@ void FodisWindow::openFiberImager() openFiberImager_expose_record("pos_null"); } -void FodisWindow::openFiberImager_expose_record(QString posInfo) +void FodisWindow::openFiberImager_expose_record(QString posInfo, QString dataFolder) { + setDataFolder(dataFolder); + setFileName(posInfo); + if (!m_JinspFiberImagerOperation->getRecordStatus()) { - emit openFiberImagerSignal(posInfo); + QString folder = AppSettings::instance().FiberImagerDataFolder(); + QDir dir(folder); + if (!dir.exists()) + { + dir.mkpath("."); + } + QString eventPrefix = posInfo.isEmpty() ? "default" : posInfo; + QString dateStr = QDateTime::currentDateTime().toString("yyyy-MM-dd_HH-mm-ss"); + QString m_qstrFullFileName = folder + QDir::separator() + dateStr + "_" + eventPrefix + "_fodis_data.dat"; + + emit openFiberImagerSignal(m_qstrFullFileName); } } diff --git a/HPPA/FodisWindow.h b/HPPA/FodisWindow.h index 3769a12..212f197 100644 --- a/HPPA/FodisWindow.h +++ b/HPPA/FodisWindow.h @@ -31,15 +31,17 @@ public: public Q_SLOTS: void openFiberImager(); - void openFiberImager_expose_record(QString posInfo); + void openFiberImager_expose_record(QString posInfo, QString dataFolder = ""); void onCamOpened(); void closeFiberImager(); void onCamClosed(); void onSelectDataFolder(); + void onFileNameChanged(const QString& text); + void setFileName(QString name); signals: - void openFiberImagerSignal(QString posInfo); + void openFiberImagerSignal(QString filePath); void PlotSpectralSignal(); void FiberImagerClosedSignal(); @@ -53,4 +55,6 @@ private: QThread* m_FiberImagerThread; JinspFiberImager* m_JinspFiberImagerOperation; + + void loadSettings(); }; diff --git a/HPPA/GonggaShanRecordCtl.cpp b/HPPA/GonggaShanRecordCtl.cpp index c71da1e..a974a68 100644 --- a/HPPA/GonggaShanRecordCtl.cpp +++ b/HPPA/GonggaShanRecordCtl.cpp @@ -1,6 +1,7 @@ #include "GonggaShanRecordCtl.h" #include +#include GonggaShanRecordCtl::GonggaShanRecordCtl(QWidget* parent) : QDialog(parent) @@ -124,6 +125,26 @@ void GonggaShanRecordCtl::onGpsAcquisition() // 发送GPS数据给任务执行器 emit gpsAcquisitionDoneSignal_gonggashan(data.latitude, data.longitude, data.altitude); + + // 使用GPS时间同步系统时间 + SYSTEMTIME st; + memset(&st, 0, sizeof(SYSTEMTIME)); + + // 解析GPS日期 (DDMMYY格式) + st.wDay = data.utcDate.mid(0, 2).toUShort(); + st.wMonth = data.utcDate.mid(2, 2).toUShort(); + st.wYear = 2000 + data.utcDate.mid(4, 2).toUShort(); + + // 解析GPS时间 (HHMMSS格式) - GPS时间是UTC时间 + st.wHour = data.utcTime.mid(0, 2).toUShort(); + st.wMinute = data.utcTime.mid(2, 2).toUShort(); + st.wSecond = data.utcTime.mid(4, 2).toUShort(); + st.wMilliseconds = 0; + st.wDayOfWeek = 0; + + // 设置系统时间 (UTC时间直接设置,Windows会自动转换为本地时间显示) + SetSystemTime(&st); + qDebug() << "System time synced from GPS:" << st.wYear << "-" << st.wMonth << "-" << st.wDay << " " << st.wHour << ":" << st.wMinute << ":" << st.wSecond; } }); @@ -153,9 +174,8 @@ void GonggaShanRecordCtl::onCalculateMotorSpeed(double hyperFrameRate) { FramerateRotateSpeedCal tmp; double rotationSpeed = tmp.calculate(300, 17.6, 900, hyperFrameRate); - double rotationSpeed2 = tmp.calculate(300, 17.6, 900, 60); - - int a; + + emit calculateMotorSpeedDoneSignal_gonggashan(rotationSpeed); } void GonggaShanRecordCtl::logStatus(const QString& message, bool isHearderBlankLine, bool isTailBlankLine) @@ -297,6 +317,17 @@ void GonggashanTaskExecutor::buildStateMachine() // ---- GpsAcquisition 状态:等待外部硬件回调 ---- connect(m_gpsAcquisitionState, &QState::entered, this, [this]() { qDebug() << "GonggashanTaskExecutor: Enter m_gpsAcquisitionState"; + + // 创建当天日期的文件夹 + QString appDir = QCoreApplication::applicationDirPath(); + QString todayFolder = QDate::currentDate().toString("yyyy-MM-dd"); + m_todayDataFolder = appDir + "/" + todayFolder; + QDir dir; + if (!dir.exists(m_todayDataFolder)) { + dir.mkpath(m_todayDataFolder); + qDebug() << "Created today's data folder:" << m_todayDataFolder; + } + emit gpsAcquisitionSignal(); }); connect(m_gpsAcquisitionState, &QState::exited, this, [this]() { @@ -325,7 +356,7 @@ void GonggashanTaskExecutor::buildStateMachine() // ---- FiberExposure 状态:等待外部硬件回调 ---- connect(m_fiberExposureState, &QState::entered, this, [this]() { qDebug() << "GonggashanTaskExecutor: Enter m_fiberExposureState"; - emit fiberExposureRecordSignal(m_posInfo); + emit fiberExposureRecordSignal(m_posInfo, m_todayDataFolder); }); connect(m_fiberExposureState, &QState::exited, this, [this]() { qDebug() << "GonggashanTaskExecutor: Exit m_fiberExposureState"; @@ -351,7 +382,7 @@ void GonggashanTaskExecutor::buildStateMachine() // ---- DataCollection 状态:同步阶段 ---- connect(m_dataCollectionState, &QState::entered, this, [this]() { qDebug() << "GonggashanTaskExecutor: Enter m_dataCollectionState"; - emit startCollectionSignal(m_posInfo, m_gpsData); + emit startCollectionSignal(m_posInfo, m_gpsData, m_motorRotationSpeed, m_todayDataFolder); }); connect(m_dataCollectionState, &QState::exited, this, [this]() { qDebug() << "GonggashanTaskExecutor: Exit m_dataCollectionState"; @@ -457,14 +488,13 @@ void GonggashanTaskExecutor::onGpsAcquired(double latitude, double longitude, do emit gpsAcquisitionDone(); } -void GonggashanTaskExecutor::onMotorSpeedCalculated(double speed) +void GonggashanTaskExecutor::onMotorSpeedCalculated(double rotationSpeed) { if (currentState() != m_motorCalcState) return; - m_motorSpeed = speed; - emit motorSpeedSignal(speed); - if (motorCalcImpl()) { - emit motorSpeedDone(); - } + m_motorRotationSpeed = rotationSpeed; + emit motorSpeedSignal(rotationSpeed); + motorCalcImpl(); + emit motorSpeedDone(); } void GonggashanTaskExecutor::onRcordComplete() @@ -499,7 +529,7 @@ bool GonggashanTaskExecutor::gpsAcquisitionImpl(double lat, double lon, double a bool GonggashanTaskExecutor::motorCalcImpl() { - qDebug() << "GonggashanTaskExecutor: Motor speed calculated:" << m_motorSpeed; + qDebug() << "GonggashanTaskExecutor: Motor speed calculated:" << m_motorRotationSpeed; return true; } diff --git a/HPPA/GonggaShanRecordCtl.h b/HPPA/GonggaShanRecordCtl.h index 95caba0..92adf4b 100644 --- a/HPPA/GonggaShanRecordCtl.h +++ b/HPPA/GonggaShanRecordCtl.h @@ -55,15 +55,15 @@ public slots: void onHyperExposureComplete(double exposureTime, double frameRate); void onFiberExposureComplete(double exposureTime); void onGpsAcquired(double latitude, double longitude, double altitude); - void onMotorSpeedCalculated(double speed); + void onMotorSpeedCalculated(double rotationSpeed); void onRcordComplete(); signals: void hyperAutoExposureSignal_gonggashan(); - void fiberExposureRecordSignal(QString posInfo); + void fiberExposureRecordSignal(QString posInfo, QString dataFolder); void gpsAcquisitionSignal(); void motorSpeedSignal(double speed); - void startCollectionSignal(const QString& posInfo, const QString& gpsData); + void startCollectionSignal(const QString& posInfo, const QString& gpsData, double m_motorRotationSpeed, QString dataFolder); void calculateMotorSpeedSignal(double hyperFrameRate); @@ -97,11 +97,12 @@ private: QString m_posInfo; QString m_gpsData; - double m_motorSpeed = 0.0; + double m_motorRotationSpeed = 0.0; double m_hyperExposureTime = 0; double m_hyperFrameRate = 0; double m_fiberExposureTime = 0; bool m_stopRequested = false; + QString m_todayDataFolder; // 当天日期的数据保存文件夹 // Qt State Machine QStateMachine* m_machine = nullptr; @@ -130,15 +131,15 @@ public Q_SLOTS: Q_SIGNALS: void gpsAcquisitionDoneSignal_gonggashan(double lat, double lon, double alt); - void calculateMotorSpeedDoneSignal_gonggashan(double speed); + void calculateMotorSpeedDoneSignal_gonggashan(double rotationSpeed); void hyperAutoExposureSignal_gonggashan(); void hyperAutoExposureDoneSignal_gonggashan(double exposureTime, double frameRate); - void fiberExposureRecordSignal_gonggashan(QString posInfo); + void fiberExposureRecordSignal_gonggashan(QString posInfo, QString dataFolder); void fiberExposureDoneSignal_gonggashan(double exposureTime); - void startRcordSignal_gonggashan(QString posInfo); + void startRcordSignal_gonggashan(const QString& posInfo, const QString& gpsData, double m_motorRotationSpeed, QString dataFolder); void recordFinishedSignal_gonggashan(); private Q_SLOTS: diff --git a/HPPA/HPPA.cpp b/HPPA/HPPA.cpp index 82f1dce..e0f590e 100644 --- a/HPPA/HPPA.cpp +++ b/HPPA/HPPA.cpp @@ -1121,8 +1121,10 @@ void HPPA::setupGonggashanAutoRecordConnection() connect(m_fodisWindow, &FodisWindow::exposureCompleteSignal, m_gonggaShanRecordCtl, &GonggaShanRecordCtl::fiberExposureDoneSignal_gonggashan); connect(m_gonggaShanRecordCtl, &GonggaShanRecordCtl::startRcordSignal_gonggashan, this, &HPPA::onGonggashanRecord); - connect(m_omc, &OneMotorControl::sequenceComplete, m_fodisWindow, &FodisWindow::closeFiberImager); - connect(m_omc, &OneMotorControl::sequenceComplete, m_gonggaShanRecordCtl, &GonggaShanRecordCtl::recordFinishedSignal_gonggashan); + connect(m_omc, &OneMotorControl::sequenceCompleteSignal_hyperImagerStopRecord, m_rgbCameraControlWindow, &rgbCameraWindow::toggleTakePhoto); + connect(m_omc, &OneMotorControl::sequenceCompleteSignal_hyperImagerStopRecord, m_fodisWindow, &FodisWindow::closeFiberImager); + connect(m_omc, &OneMotorControl::sequenceCompleteSignal_hyperImagerStopRecord, m_gonggaShanRecordCtl, &GonggaShanRecordCtl::recordFinishedSignal_gonggashan); + //connect(m_omc, &OneMotorControl::sequenceComplete_motorBack2Origin, m_gonggaShanRecordCtl, &GonggaShanRecordCtl::); } void HPPA::onGonggashanHyperAutoExposure() @@ -1139,17 +1141,18 @@ void HPPA::onGonggashanHyperAutoExposure() m_omc->multiPosHyperAutoExposure(); } -void HPPA::onGonggashanFiberAutoExposureRecord(QString posInfo) +void HPPA::onGonggashanFiberAutoExposureRecord(QString posInfo, QString dataFolder) { - m_fodisWindow->openFiberImager_expose_record(posInfo); + //设置数据存储路径和文件名 + m_fodisWindow->openFiberImager_expose_record(posInfo, dataFolder); } -void HPPA::onGonggashanRecord(QString posInfo) +void HPPA::onGonggashanRecord(const QString& posInfo, const QString& gpsData, double motorRotationSpeed, QString dataFolder) { //设置文件名 //AppSettings::instance().setFrameRate(f); //AppSettings::instance().setIntegrationTime(e); - //AppSettings::instance().setDataFolder(filePath); + AppSettings::instance().setDataFolder(dataFolder); QString dateStr = QDateTime::currentDateTime().toString("yyyy-MM-dd_HH-mm-ss"); //QString fi = AppSettings::instance().fileName() + "_" + dateStr; @@ -1159,6 +1162,7 @@ void HPPA::onGonggashanRecord(QString posInfo) //连接马达和光谱仪 m_omc->connectMotor(false); + m_omc->setScanSpeed(motorRotationSpeed); if (!testImagerVality()) { @@ -1168,7 +1172,7 @@ void HPPA::onGonggashanRecord(QString posInfo) onStartRecordStep1(); //采集rgb图像 - + m_rgbCameraControlWindow->toggleTakePhoto(); } void HPPA::recordFromRobotArm(int fileCounter) diff --git a/HPPA/HPPA.h b/HPPA/HPPA.h index 5f78393..67af960 100644 --- a/HPPA/HPPA.h +++ b/HPPA/HPPA.h @@ -457,9 +457,9 @@ public Q_SLOTS: void onStretchedImageReady(int fileNumber, const QString& filePath, QPixmap& pixmap); void onStretchProcessingError(int fileNumber, const QString& filePath, const QString& error); - void onGonggashanRecord(QString posInfo); + void onGonggashanRecord(const QString& posInfo, const QString& gpsData, double motorRotationSpeed, QString dataFolder); void onGonggashanHyperAutoExposure(); - void onGonggashanFiberAutoExposureRecord(QString posInfo); + void onGonggashanFiberAutoExposureRecord(QString posInfo, QString dataFolder); protected: void closeEvent(QCloseEvent* event) override; diff --git a/HPPA/JinspFiberImager.cpp b/HPPA/JinspFiberImager.cpp index 406e790..8085fa8 100644 --- a/HPPA/JinspFiberImager.cpp +++ b/HPPA/JinspFiberImager.cpp @@ -2,7 +2,8 @@ // Created by 73505 on 2023/5/7. // #include - +#include +#include #include "JinspFiberImager.h" JinspFiberImager::JinspFiberImager(bool bIsUSBMode, std::string ucPortNumber, std::string strDeviceName) @@ -132,7 +133,7 @@ void JinspFiberImager::recordDark(QString path) outfile.close(); } -void JinspFiberImager::recordTarget(int recordTimes, QString path) +void JinspFiberImager::recordTarget2csv(int recordTimes, QString path) { //获取设备信息 DeviceAttribute attribute; @@ -318,10 +319,8 @@ void JinspFiberImager::setCaptureInterval(int captureIntervalSeconds) m_captureIntervalMilliseconds = captureIntervalSeconds * 1000; } -void JinspFiberImager::OpenFiberImagerAndRecord(QString posInfo) +void JinspFiberImager::OpenFiberImagerAndRecord(QString filePath) { - m_posInfo = posInfo; - //连接光谱仪 QString SN; QString pixelCount; @@ -335,13 +334,25 @@ void JinspFiberImager::OpenFiberImagerAndRecord(QString posInfo) emit exposureCompleteSignal(m_iExposureTime); //采集 + QFile qfData(filePath); + bool bRes = qfData.open(QFile::WriteOnly | QIODevice::Append); + if (!bRes) + { + printf("WriteData QFile open Failed"); + return; + } + m_record = true; + DataFrame data; while (m_record) { - recordTarget(1, AppSettings::instance().FiberImagerDataFolder()); + singleShot(data); + qfData.write((char*)&data, sizeof(DataFrame)); + qfData.flush(); QThread::msleep(m_captureIntervalMilliseconds); } + qfData.close(); std::cout << "close.........." << std::endl; m_FiberSpectrometer->Close(); diff --git a/HPPA/JinspFiberImager.h b/HPPA/JinspFiberImager.h index e2ddcc7..9f3904c 100644 --- a/HPPA/JinspFiberImager.h +++ b/HPPA/JinspFiberImager.h @@ -61,10 +61,10 @@ private: public slots: void recordDark(QString path); - void recordTarget(int recordTimes, QString path); + void recordTarget2csv(int recordTimes, QString path); void autoExpose(); - void OpenFiberImagerAndRecord(QString posInfo); + void OpenFiberImagerAndRecord(QString filePath); signals: void sendExposureTimeSignal(int exposureTime); diff --git a/HPPA/OneMotorControl.cpp b/HPPA/OneMotorControl.cpp index 7cd27f0..8a2f7a7 100644 --- a/HPPA/OneMotorControl.cpp +++ b/HPPA/OneMotorControl.cpp @@ -42,6 +42,11 @@ void OneMotorControl::onConnectMotor() connectMotor(true); } +void OneMotorControl::setScanSpeed(double speed) +{ + ui.speed_lineEdit->setText(QString::number(speed)); +} + void OneMotorControl::connectMotor(bool isNotification) { if (getMotorsConnectionStatus()) @@ -225,16 +230,20 @@ void OneMotorControl::run() { if (m_coordinator)//当高光谱相机停止采集后,马达还未回到原点时,上次任务的m_coordinator还没有被销毁 { - onSequenceComplete(0); + onSequenceComplete_motorBack2Origin(0); } qRegisterMetaType("OneMotionCapturePathLine"); m_coordinator = new OneMotionCaptureCoordinator(m_multiAxisController, m_Imager); m_coordinator->setObjectName("testOneMotionCaptureCoordinator"); - connect(this, SIGNAL(start(OneMotionCapturePathLine)), m_coordinator, SLOT(startStepMotion(OneMotionCapturePathLine))); - connect(this, SIGNAL(stopStepMotionSignal()), m_coordinator, SLOT(stopStepMotion())); - connect(m_coordinator, SIGNAL(sequenceComplete(int)), this, SLOT(onSequenceComplete(int))); + connect(this, &OneMotorControl::start, m_coordinator, &OneMotionCaptureCoordinator::startStepMotion); + connect(this, &OneMotorControl::stopStepMotionSignal, m_coordinator, &OneMotionCaptureCoordinator::stopStepMotion); + + connect(m_coordinator, &OneMotionCaptureCoordinator::sequenceCompleteSignal_hyperImagerStopRecord, + this, &OneMotorControl::sequenceCompleteSignal_hyperImagerStopRecord); + connect(m_coordinator, &OneMotionCaptureCoordinator::sequenceCompleteSignal_motorBack2Origin, + this, &OneMotorControl::onSequenceComplete_motorBack2Origin); OneMotionCapturePathLine tmp; tmp.speedRecord = ui.speed_lineEdit->text().toDouble(); @@ -271,18 +280,14 @@ void OneMotorControl::multiPosHyperAutoExposure() void OneMotorControl::onSequenceComplete_gonggashan_autoexpose(int state) { - emit sequenceComplete(); + emit multiPosAutoexposeSequenceCompleteSignal(); m_coordinator_gonggashan_autoexpose->deleteLater(); } -void OneMotorControl::onSequenceComplete(int state) +void OneMotorControl::onSequenceComplete_motorBack2Origin(int state) { - emit sequenceComplete(); - - disconnect(this, SIGNAL(start(OneMotionCapturePathLine)), m_coordinator, SLOT(startStepMotion(OneMotionCapturePathLine))); - disconnect(this, SIGNAL(stopStepMotionSignal()), m_coordinator, SLOT(stopStepMotion())); - disconnect(m_coordinator, SIGNAL(sequenceComplete(int)), this, SLOT(onSequenceComplete(int))); + emit sequenceComplete_motorBack2Origin(); // Use deleteLater() instead of delete: this slot may have been called directly // from OneMotionCaptureCoordinator's call stack (direct connection), so deleting diff --git a/HPPA/OneMotorControl.h b/HPPA/OneMotorControl.h index 0a285b7..8945475 100644 --- a/HPPA/OneMotorControl.h +++ b/HPPA/OneMotorControl.h @@ -35,6 +35,8 @@ public: void connectMotor(bool isNotification); + void setScanSpeed(double speed); + public Q_SLOTS: void onConnectMotor(); @@ -48,7 +50,7 @@ public Q_SLOTS: void onxMotorLeft(); void onxMotorStop(); - void onSequenceComplete(int state); + void onSequenceComplete_motorBack2Origin(int state); void onSequenceComplete_gonggashan_autoexpose(int state); signals: @@ -65,11 +67,16 @@ signals: void stopStepMotionSignal(); void sequenceComplete(); + void sequenceComplete_motorBack2Origin(); void broadcastLocationSignal(std::vector); void hyperAutoExposureDoneSignal_gonggashan(double exposureTime, double frameRate); + void multiPosAutoexposeSequenceCompleteSignal(); + + void sequenceCompleteSignal_hyperImagerStopRecord(int); + private: Ui::OneMotorControl_UI ui; @@ -135,6 +142,7 @@ signals: void broadcastLocationSignal(std::vector); + private: Ui::OneMotorControl_UI ui; diff --git a/HPPA/fodis.ui b/HPPA/fodis.ui index 494e298..2a54395 100644 --- a/HPPA/fodis.ui +++ b/HPPA/fodis.ui @@ -6,8 +6,8 @@ 0 0 - 857 - 477 + 438 + 330 @@ -83,7 +83,7 @@ QPushButton:pressed - + @@ -113,33 +113,7 @@ QPushButton:pressed - - - - Qt::Horizontal - - - - 135 - 20 - - - - - - - - Qt::Horizontal - - - - 135 - 20 - - - - - + @@ -184,7 +158,71 @@ QPushButton:pressed - + + + + Qt::Horizontal + + + + 135 + 20 + + + + + + + + + + QLabel { + color: rgb(255, 255, 255); +} + + + 文件名 + + + + + + + QLineEdit { + background-color: #142D7F; + color: #e6eeff; + border: 1px solid #2f6bff; + border-radius: 6px; + padding: 4px 8px; + min-width: 70px; + min-height: 20px; + font-size: 13px; +} + + + test + + + false + + + + + + + + + Qt::Horizontal + + + + 135 + 20 + + + + + Qt::Vertical diff --git a/HPPA/rgbCameraWindow.cpp b/HPPA/rgbCameraWindow.cpp index e4728c7..1be678b 100644 --- a/HPPA/rgbCameraWindow.cpp +++ b/HPPA/rgbCameraWindow.cpp @@ -64,6 +64,11 @@ rgbCameraWindow::~rgbCameraWindow() delete m_RgbCameraThread; } +void rgbCameraWindow::toggleTakePhoto() +{ + emit ui.take_photo_btn->clicked(); +} + void rgbCameraWindow::setupCaptureCoordinator() { m_captureCoordinator = new RgbCameraCaptureCoordinator(m_RgbCamera, this); diff --git a/HPPA/rgbCameraWindow.h b/HPPA/rgbCameraWindow.h index 2d2ad5c..0cae49d 100644 --- a/HPPA/rgbCameraWindow.h +++ b/HPPA/rgbCameraWindow.h @@ -32,6 +32,8 @@ public Q_SLOTS: void onSelectDataFolder(); void onFileNameChanged(const QString& text); + void toggleTakePhoto(); + Q_SIGNALS: void PlotRgbImageSignal(); void CamClosedSignal();