add,山地所贡嘎山11:
完成整个采集流程
This commit is contained in:
@ -137,7 +137,7 @@ void AppSettings::setRgbCameraDataFolder(const QString& path)
|
|||||||
|
|
||||||
QString AppSettings::rgbCameraFileName() const
|
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)
|
void AppSettings::setRgbCameraFileName(const QString& name)
|
||||||
@ -145,6 +145,16 @@ void AppSettings::setRgbCameraFileName(const QString& name)
|
|||||||
m_settings.setValue("RgbCamera/FileName", 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
|
double AppSettings::scanSpeed() const
|
||||||
{
|
{
|
||||||
return m_settings.value("OneMotorControl/ScanSpeed", kDefaultScanSpeed).toDouble();
|
return m_settings.value("OneMotorControl/ScanSpeed", kDefaultScanSpeed).toDouble();
|
||||||
|
|||||||
@ -45,6 +45,9 @@ public:
|
|||||||
QString rgbCameraFileName() const;
|
QString rgbCameraFileName() const;
|
||||||
void setRgbCameraFileName(const QString& name);
|
void setRgbCameraFileName(const QString& name);
|
||||||
|
|
||||||
|
QString fodisCameraFileName() const;
|
||||||
|
void setFodisCameraFileName(const QString& name);
|
||||||
|
|
||||||
// 扫描速度
|
// 扫描速度
|
||||||
double scanSpeed() const;
|
double scanSpeed() const;
|
||||||
void setScanSpeed(double value);
|
void setScanSpeed(double value);
|
||||||
|
|||||||
@ -459,7 +459,9 @@ OneMotionCaptureCoordinator::OneMotionCaptureCoordinator(
|
|||||||
connect(this, &OneMotionCaptureCoordinator::stopRecordHSISignal,
|
connect(this, &OneMotionCaptureCoordinator::stopRecordHSISignal,
|
||||||
m_cameraCtrl, &ImagerOperationBase::stop_record);
|
m_cameraCtrl, &ImagerOperationBase::stop_record);
|
||||||
connect(m_cameraCtrl, &ImagerOperationBase::RecordFinishedSignal_WhenFrameNumberMeet,
|
connect(m_cameraCtrl, &ImagerOperationBase::RecordFinishedSignal_WhenFrameNumberMeet,
|
||||||
this, &OneMotionCaptureCoordinator::handleCaptureCompleteWhenFrameNumberMeet);
|
this, &OneMotionCaptureCoordinator::handleHyperImagerCaptureComplete);
|
||||||
|
connect(m_cameraCtrl, &ImagerOperationBase::RecordFinishedSignal_WhenFrameNumberNotMeet,
|
||||||
|
this, &OneMotionCaptureCoordinator::handleHyperImagerCaptureComplete);
|
||||||
}
|
}
|
||||||
|
|
||||||
OneMotionCaptureCoordinator::~OneMotionCaptureCoordinator()
|
OneMotionCaptureCoordinator::~OneMotionCaptureCoordinator()
|
||||||
@ -498,12 +500,9 @@ void OneMotionCaptureCoordinator::stopStepMotion()
|
|||||||
{
|
{
|
||||||
m_cameraCtrl->stop_record();
|
m_cameraCtrl->stop_record();
|
||||||
}
|
}
|
||||||
|
|
||||||
emit stopMotorSignal(0);
|
|
||||||
m_isHypercamStopRecord = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OneMotionCaptureCoordinator::handleCaptureCompleteWhenFrameNumberMeet()
|
void OneMotionCaptureCoordinator::handleHyperImagerCaptureComplete()
|
||||||
{
|
{
|
||||||
emit stopMotorSignal(0);
|
emit stopMotorSignal(0);
|
||||||
m_isHypercamStopRecord = true;
|
m_isHypercamStopRecord = true;
|
||||||
@ -588,13 +587,11 @@ void OneMotionCaptureCoordinator::handleMotorStoped(int motorID, double pos)
|
|||||||
}
|
}
|
||||||
move2LocBeforeStart();
|
move2LocBeforeStart();
|
||||||
|
|
||||||
emit sequenceComplete_cam_stop_before_motorback(0);
|
emit sequenceCompleteSignal_hyperImagerStopRecord(0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// emit sequenceComplete last: the slot connected to it may delete this object,
|
emit sequenceCompleteSignal_motorBack2Origin(0);
|
||||||
// so no member access is allowed after this point.
|
|
||||||
emit sequenceComplete(0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -141,11 +141,11 @@ public slots:
|
|||||||
void startStepMotion(OneMotionCapturePathLine pathLine);
|
void startStepMotion(OneMotionCapturePathLine pathLine);
|
||||||
void stopStepMotion();
|
void stopStepMotion();
|
||||||
|
|
||||||
void handleCaptureCompleteWhenFrameNumberMeet();
|
void handleHyperImagerCaptureComplete();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void sequenceComplete_cam_stop_before_motorback(int);
|
void sequenceCompleteSignal_hyperImagerStopRecord(int);
|
||||||
void sequenceComplete(int);
|
void sequenceCompleteSignal_motorBack2Origin(int);
|
||||||
void errorOccurred(const QString& error);
|
void errorOccurred(const QString& error);
|
||||||
void moveTo(int, double, double, int);
|
void moveTo(int, double, double, int);
|
||||||
void moveSignal(int, bool, double, int);
|
void moveSignal(int, bool, double, int);
|
||||||
|
|||||||
@ -50,7 +50,7 @@ private:
|
|||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
virtual void recordDark(QString path) = 0;
|
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;
|
virtual void autoExpose() = 0;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|||||||
@ -27,10 +27,9 @@ FodisWindow::FodisWindow(QWidget* parent)
|
|||||||
|
|
||||||
connect(this->ui.dataFolderBtn, SIGNAL(clicked()), this, SLOT(onSelectDataFolder()));
|
connect(this->ui.dataFolderBtn, SIGNAL(clicked()), this, SLOT(onSelectDataFolder()));
|
||||||
|
|
||||||
// 初始化数据保存路径显示(从 AppSettings 恢复或使用默认)
|
connect(ui.fileNameLineEdit, &QLineEdit::textChanged, this, &FodisWindow::onFileNameChanged);
|
||||||
ui.dataFolderLineEdit->setText(AppSettings::instance().depthCameraDataFolder());
|
|
||||||
|
|
||||||
setDataFolder(AppSettings::instance().FiberImagerDataFolder());
|
loadSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
FodisWindow::~FodisWindow()
|
FodisWindow::~FodisWindow()
|
||||||
@ -41,6 +40,12 @@ FodisWindow::~FodisWindow()
|
|||||||
m_JinspFiberImagerOperation = nullptr;
|
m_JinspFiberImagerOperation = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FodisWindow::loadSettings()
|
||||||
|
{
|
||||||
|
ui.dataFolderLineEdit->setText(AppSettings::instance().FiberImagerDataFolder());
|
||||||
|
ui.fileNameLineEdit->setText(AppSettings::instance().fodisCameraFileName());
|
||||||
|
}
|
||||||
|
|
||||||
void FodisWindow::onSelectDataFolder()
|
void FodisWindow::onSelectDataFolder()
|
||||||
{
|
{
|
||||||
QString dir = QFileDialog::getExistingDirectory(this,
|
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)
|
void FodisWindow::setCaptureInterval(int captureIntervalSeconds)
|
||||||
{
|
{
|
||||||
m_JinspFiberImagerOperation->setCaptureInterval(captureIntervalSeconds);
|
m_JinspFiberImagerOperation->setCaptureInterval(captureIntervalSeconds);
|
||||||
@ -69,11 +85,24 @@ void FodisWindow::openFiberImager()
|
|||||||
openFiberImager_expose_record("pos_null");
|
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())
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -31,15 +31,17 @@ public:
|
|||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void openFiberImager();
|
void openFiberImager();
|
||||||
void openFiberImager_expose_record(QString posInfo);
|
void openFiberImager_expose_record(QString posInfo, QString dataFolder = "");
|
||||||
void onCamOpened();
|
void onCamOpened();
|
||||||
void closeFiberImager();
|
void closeFiberImager();
|
||||||
void onCamClosed();
|
void onCamClosed();
|
||||||
|
|
||||||
void onSelectDataFolder();
|
void onSelectDataFolder();
|
||||||
|
void onFileNameChanged(const QString& text);
|
||||||
|
void setFileName(QString name);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void openFiberImagerSignal(QString posInfo);
|
void openFiberImagerSignal(QString filePath);
|
||||||
void PlotSpectralSignal();
|
void PlotSpectralSignal();
|
||||||
void FiberImagerClosedSignal();
|
void FiberImagerClosedSignal();
|
||||||
|
|
||||||
@ -53,4 +55,6 @@ private:
|
|||||||
QThread* m_FiberImagerThread;
|
QThread* m_FiberImagerThread;
|
||||||
|
|
||||||
JinspFiberImager* m_JinspFiberImagerOperation;
|
JinspFiberImager* m_JinspFiberImagerOperation;
|
||||||
|
|
||||||
|
void loadSettings();
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
#include "GonggaShanRecordCtl.h"
|
#include "GonggaShanRecordCtl.h"
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include <Windows.h>
|
||||||
|
|
||||||
GonggaShanRecordCtl::GonggaShanRecordCtl(QWidget* parent)
|
GonggaShanRecordCtl::GonggaShanRecordCtl(QWidget* parent)
|
||||||
: QDialog(parent)
|
: QDialog(parent)
|
||||||
@ -124,6 +125,26 @@ void GonggaShanRecordCtl::onGpsAcquisition()
|
|||||||
|
|
||||||
// 发送GPS数据给任务执行器
|
// 发送GPS数据给任务执行器
|
||||||
emit gpsAcquisitionDoneSignal_gonggashan(data.latitude, data.longitude, data.altitude);
|
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;
|
FramerateRotateSpeedCal tmp;
|
||||||
double rotationSpeed = tmp.calculate(300, 17.6, 900, hyperFrameRate);
|
double rotationSpeed = tmp.calculate(300, 17.6, 900, hyperFrameRate);
|
||||||
double rotationSpeed2 = tmp.calculate(300, 17.6, 900, 60);
|
|
||||||
|
emit calculateMotorSpeedDoneSignal_gonggashan(rotationSpeed);
|
||||||
int a;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GonggaShanRecordCtl::logStatus(const QString& message, bool isHearderBlankLine, bool isTailBlankLine)
|
void GonggaShanRecordCtl::logStatus(const QString& message, bool isHearderBlankLine, bool isTailBlankLine)
|
||||||
@ -297,6 +317,17 @@ void GonggashanTaskExecutor::buildStateMachine()
|
|||||||
// ---- GpsAcquisition 状态:等待外部硬件回调 ----
|
// ---- GpsAcquisition 状态:等待外部硬件回调 ----
|
||||||
connect(m_gpsAcquisitionState, &QState::entered, this, [this]() {
|
connect(m_gpsAcquisitionState, &QState::entered, this, [this]() {
|
||||||
qDebug() << "GonggashanTaskExecutor: Enter m_gpsAcquisitionState";
|
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();
|
emit gpsAcquisitionSignal();
|
||||||
});
|
});
|
||||||
connect(m_gpsAcquisitionState, &QState::exited, this, [this]() {
|
connect(m_gpsAcquisitionState, &QState::exited, this, [this]() {
|
||||||
@ -325,7 +356,7 @@ void GonggashanTaskExecutor::buildStateMachine()
|
|||||||
// ---- FiberExposure 状态:等待外部硬件回调 ----
|
// ---- FiberExposure 状态:等待外部硬件回调 ----
|
||||||
connect(m_fiberExposureState, &QState::entered, this, [this]() {
|
connect(m_fiberExposureState, &QState::entered, this, [this]() {
|
||||||
qDebug() << "GonggashanTaskExecutor: Enter m_fiberExposureState";
|
qDebug() << "GonggashanTaskExecutor: Enter m_fiberExposureState";
|
||||||
emit fiberExposureRecordSignal(m_posInfo);
|
emit fiberExposureRecordSignal(m_posInfo, m_todayDataFolder);
|
||||||
});
|
});
|
||||||
connect(m_fiberExposureState, &QState::exited, this, [this]() {
|
connect(m_fiberExposureState, &QState::exited, this, [this]() {
|
||||||
qDebug() << "GonggashanTaskExecutor: Exit m_fiberExposureState";
|
qDebug() << "GonggashanTaskExecutor: Exit m_fiberExposureState";
|
||||||
@ -351,7 +382,7 @@ void GonggashanTaskExecutor::buildStateMachine()
|
|||||||
// ---- DataCollection 状态:同步阶段 ----
|
// ---- DataCollection 状态:同步阶段 ----
|
||||||
connect(m_dataCollectionState, &QState::entered, this, [this]() {
|
connect(m_dataCollectionState, &QState::entered, this, [this]() {
|
||||||
qDebug() << "GonggashanTaskExecutor: Enter m_dataCollectionState";
|
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]() {
|
connect(m_dataCollectionState, &QState::exited, this, [this]() {
|
||||||
qDebug() << "GonggashanTaskExecutor: Exit m_dataCollectionState";
|
qDebug() << "GonggashanTaskExecutor: Exit m_dataCollectionState";
|
||||||
@ -457,14 +488,13 @@ void GonggashanTaskExecutor::onGpsAcquired(double latitude, double longitude, do
|
|||||||
emit gpsAcquisitionDone();
|
emit gpsAcquisitionDone();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GonggashanTaskExecutor::onMotorSpeedCalculated(double speed)
|
void GonggashanTaskExecutor::onMotorSpeedCalculated(double rotationSpeed)
|
||||||
{
|
{
|
||||||
if (currentState() != m_motorCalcState) return;
|
if (currentState() != m_motorCalcState) return;
|
||||||
m_motorSpeed = speed;
|
m_motorRotationSpeed = rotationSpeed;
|
||||||
emit motorSpeedSignal(speed);
|
emit motorSpeedSignal(rotationSpeed);
|
||||||
if (motorCalcImpl()) {
|
motorCalcImpl();
|
||||||
emit motorSpeedDone();
|
emit motorSpeedDone();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GonggashanTaskExecutor::onRcordComplete()
|
void GonggashanTaskExecutor::onRcordComplete()
|
||||||
@ -499,7 +529,7 @@ bool GonggashanTaskExecutor::gpsAcquisitionImpl(double lat, double lon, double a
|
|||||||
|
|
||||||
bool GonggashanTaskExecutor::motorCalcImpl()
|
bool GonggashanTaskExecutor::motorCalcImpl()
|
||||||
{
|
{
|
||||||
qDebug() << "GonggashanTaskExecutor: Motor speed calculated:" << m_motorSpeed;
|
qDebug() << "GonggashanTaskExecutor: Motor speed calculated:" << m_motorRotationSpeed;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -55,15 +55,15 @@ public slots:
|
|||||||
void onHyperExposureComplete(double exposureTime, double frameRate);
|
void onHyperExposureComplete(double exposureTime, double frameRate);
|
||||||
void onFiberExposureComplete(double exposureTime);
|
void onFiberExposureComplete(double exposureTime);
|
||||||
void onGpsAcquired(double latitude, double longitude, double altitude);
|
void onGpsAcquired(double latitude, double longitude, double altitude);
|
||||||
void onMotorSpeedCalculated(double speed);
|
void onMotorSpeedCalculated(double rotationSpeed);
|
||||||
void onRcordComplete();
|
void onRcordComplete();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void hyperAutoExposureSignal_gonggashan();
|
void hyperAutoExposureSignal_gonggashan();
|
||||||
void fiberExposureRecordSignal(QString posInfo);
|
void fiberExposureRecordSignal(QString posInfo, QString dataFolder);
|
||||||
void gpsAcquisitionSignal();
|
void gpsAcquisitionSignal();
|
||||||
void motorSpeedSignal(double speed);
|
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);
|
void calculateMotorSpeedSignal(double hyperFrameRate);
|
||||||
|
|
||||||
@ -97,11 +97,12 @@ private:
|
|||||||
|
|
||||||
QString m_posInfo;
|
QString m_posInfo;
|
||||||
QString m_gpsData;
|
QString m_gpsData;
|
||||||
double m_motorSpeed = 0.0;
|
double m_motorRotationSpeed = 0.0;
|
||||||
double m_hyperExposureTime = 0;
|
double m_hyperExposureTime = 0;
|
||||||
double m_hyperFrameRate = 0;
|
double m_hyperFrameRate = 0;
|
||||||
double m_fiberExposureTime = 0;
|
double m_fiberExposureTime = 0;
|
||||||
bool m_stopRequested = false;
|
bool m_stopRequested = false;
|
||||||
|
QString m_todayDataFolder; // 当天日期的数据保存文件夹
|
||||||
|
|
||||||
// Qt State Machine
|
// Qt State Machine
|
||||||
QStateMachine* m_machine = nullptr;
|
QStateMachine* m_machine = nullptr;
|
||||||
@ -130,15 +131,15 @@ public Q_SLOTS:
|
|||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void gpsAcquisitionDoneSignal_gonggashan(double lat, double lon, double alt);
|
void gpsAcquisitionDoneSignal_gonggashan(double lat, double lon, double alt);
|
||||||
|
|
||||||
void calculateMotorSpeedDoneSignal_gonggashan(double speed);
|
void calculateMotorSpeedDoneSignal_gonggashan(double rotationSpeed);
|
||||||
|
|
||||||
void hyperAutoExposureSignal_gonggashan();
|
void hyperAutoExposureSignal_gonggashan();
|
||||||
void hyperAutoExposureDoneSignal_gonggashan(double exposureTime, double frameRate);
|
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 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();
|
void recordFinishedSignal_gonggashan();
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
|
|||||||
@ -1121,8 +1121,10 @@ void HPPA::setupGonggashanAutoRecordConnection()
|
|||||||
connect(m_fodisWindow, &FodisWindow::exposureCompleteSignal, m_gonggaShanRecordCtl, &GonggaShanRecordCtl::fiberExposureDoneSignal_gonggashan);
|
connect(m_fodisWindow, &FodisWindow::exposureCompleteSignal, m_gonggaShanRecordCtl, &GonggaShanRecordCtl::fiberExposureDoneSignal_gonggashan);
|
||||||
|
|
||||||
connect(m_gonggaShanRecordCtl, &GonggaShanRecordCtl::startRcordSignal_gonggashan, this, &HPPA::onGonggashanRecord);
|
connect(m_gonggaShanRecordCtl, &GonggaShanRecordCtl::startRcordSignal_gonggashan, this, &HPPA::onGonggashanRecord);
|
||||||
connect(m_omc, &OneMotorControl::sequenceComplete, m_fodisWindow, &FodisWindow::closeFiberImager);
|
connect(m_omc, &OneMotorControl::sequenceCompleteSignal_hyperImagerStopRecord, m_rgbCameraControlWindow, &rgbCameraWindow::toggleTakePhoto);
|
||||||
connect(m_omc, &OneMotorControl::sequenceComplete, m_gonggaShanRecordCtl, &GonggaShanRecordCtl::recordFinishedSignal_gonggashan);
|
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()
|
void HPPA::onGonggashanHyperAutoExposure()
|
||||||
@ -1139,17 +1141,18 @@ void HPPA::onGonggashanHyperAutoExposure()
|
|||||||
m_omc->multiPosHyperAutoExposure();
|
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().setFrameRate(f);
|
||||||
//AppSettings::instance().setIntegrationTime(e);
|
//AppSettings::instance().setIntegrationTime(e);
|
||||||
//AppSettings::instance().setDataFolder(filePath);
|
AppSettings::instance().setDataFolder(dataFolder);
|
||||||
|
|
||||||
QString dateStr = QDateTime::currentDateTime().toString("yyyy-MM-dd_HH-mm-ss");
|
QString dateStr = QDateTime::currentDateTime().toString("yyyy-MM-dd_HH-mm-ss");
|
||||||
//QString fi = AppSettings::instance().fileName() + "_" + dateStr;
|
//QString fi = AppSettings::instance().fileName() + "_" + dateStr;
|
||||||
@ -1159,6 +1162,7 @@ void HPPA::onGonggashanRecord(QString posInfo)
|
|||||||
|
|
||||||
//连接马达和光谱仪
|
//连接马达和光谱仪
|
||||||
m_omc->connectMotor(false);
|
m_omc->connectMotor(false);
|
||||||
|
m_omc->setScanSpeed(motorRotationSpeed);
|
||||||
|
|
||||||
if (!testImagerVality())
|
if (!testImagerVality())
|
||||||
{
|
{
|
||||||
@ -1168,7 +1172,7 @@ void HPPA::onGonggashanRecord(QString posInfo)
|
|||||||
onStartRecordStep1();
|
onStartRecordStep1();
|
||||||
|
|
||||||
//采集rgb图像
|
//采集rgb图像
|
||||||
|
m_rgbCameraControlWindow->toggleTakePhoto();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HPPA::recordFromRobotArm(int fileCounter)
|
void HPPA::recordFromRobotArm(int fileCounter)
|
||||||
|
|||||||
@ -457,9 +457,9 @@ public Q_SLOTS:
|
|||||||
void onStretchedImageReady(int fileNumber, const QString& filePath, QPixmap& pixmap);
|
void onStretchedImageReady(int fileNumber, const QString& filePath, QPixmap& pixmap);
|
||||||
void onStretchProcessingError(int fileNumber, const QString& filePath, const QString& error);
|
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 onGonggashanHyperAutoExposure();
|
||||||
void onGonggashanFiberAutoExposureRecord(QString posInfo);
|
void onGonggashanFiberAutoExposureRecord(QString posInfo, QString dataFolder);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void closeEvent(QCloseEvent* event) override;
|
void closeEvent(QCloseEvent* event) override;
|
||||||
|
|||||||
@ -2,7 +2,8 @@
|
|||||||
// Created by 73505 on 2023/5/7.
|
// Created by 73505 on 2023/5/7.
|
||||||
//
|
//
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QDir>
|
||||||
#include "JinspFiberImager.h"
|
#include "JinspFiberImager.h"
|
||||||
|
|
||||||
JinspFiberImager::JinspFiberImager(bool bIsUSBMode, std::string ucPortNumber, std::string strDeviceName)
|
JinspFiberImager::JinspFiberImager(bool bIsUSBMode, std::string ucPortNumber, std::string strDeviceName)
|
||||||
@ -132,7 +133,7 @@ void JinspFiberImager::recordDark(QString path)
|
|||||||
outfile.close();
|
outfile.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void JinspFiberImager::recordTarget(int recordTimes, QString path)
|
void JinspFiberImager::recordTarget2csv(int recordTimes, QString path)
|
||||||
{
|
{
|
||||||
//获取设备信息
|
//获取设备信息
|
||||||
DeviceAttribute attribute;
|
DeviceAttribute attribute;
|
||||||
@ -318,10 +319,8 @@ void JinspFiberImager::setCaptureInterval(int captureIntervalSeconds)
|
|||||||
m_captureIntervalMilliseconds = captureIntervalSeconds * 1000;
|
m_captureIntervalMilliseconds = captureIntervalSeconds * 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JinspFiberImager::OpenFiberImagerAndRecord(QString posInfo)
|
void JinspFiberImager::OpenFiberImagerAndRecord(QString filePath)
|
||||||
{
|
{
|
||||||
m_posInfo = posInfo;
|
|
||||||
|
|
||||||
//连接光谱仪
|
//连接光谱仪
|
||||||
QString SN;
|
QString SN;
|
||||||
QString pixelCount;
|
QString pixelCount;
|
||||||
@ -335,13 +334,25 @@ void JinspFiberImager::OpenFiberImagerAndRecord(QString posInfo)
|
|||||||
emit exposureCompleteSignal(m_iExposureTime);
|
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;
|
m_record = true;
|
||||||
|
DataFrame data;
|
||||||
while (m_record)
|
while (m_record)
|
||||||
{
|
{
|
||||||
recordTarget(1, AppSettings::instance().FiberImagerDataFolder());
|
singleShot(data);
|
||||||
|
qfData.write((char*)&data, sizeof(DataFrame));
|
||||||
|
qfData.flush();
|
||||||
|
|
||||||
QThread::msleep(m_captureIntervalMilliseconds);
|
QThread::msleep(m_captureIntervalMilliseconds);
|
||||||
}
|
}
|
||||||
|
qfData.close();
|
||||||
|
|
||||||
std::cout << "close.........." << std::endl;
|
std::cout << "close.........." << std::endl;
|
||||||
m_FiberSpectrometer->Close();
|
m_FiberSpectrometer->Close();
|
||||||
|
|||||||
@ -61,10 +61,10 @@ private:
|
|||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void recordDark(QString path);
|
void recordDark(QString path);
|
||||||
void recordTarget(int recordTimes, QString path);
|
void recordTarget2csv(int recordTimes, QString path);
|
||||||
void autoExpose();
|
void autoExpose();
|
||||||
|
|
||||||
void OpenFiberImagerAndRecord(QString posInfo);
|
void OpenFiberImagerAndRecord(QString filePath);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void sendExposureTimeSignal(int exposureTime);
|
void sendExposureTimeSignal(int exposureTime);
|
||||||
|
|||||||
@ -42,6 +42,11 @@ void OneMotorControl::onConnectMotor()
|
|||||||
connectMotor(true);
|
connectMotor(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OneMotorControl::setScanSpeed(double speed)
|
||||||
|
{
|
||||||
|
ui.speed_lineEdit->setText(QString::number(speed));
|
||||||
|
}
|
||||||
|
|
||||||
void OneMotorControl::connectMotor(bool isNotification)
|
void OneMotorControl::connectMotor(bool isNotification)
|
||||||
{
|
{
|
||||||
if (getMotorsConnectionStatus())
|
if (getMotorsConnectionStatus())
|
||||||
@ -225,16 +230,20 @@ void OneMotorControl::run()
|
|||||||
{
|
{
|
||||||
if (m_coordinator)//当高光谱相机停止采集后,马达还未回到原点时,上次任务的m_coordinator还没有被销毁
|
if (m_coordinator)//当高光谱相机停止采集后,马达还未回到原点时,上次任务的m_coordinator还没有被销毁
|
||||||
{
|
{
|
||||||
onSequenceComplete(0);
|
onSequenceComplete_motorBack2Origin(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
qRegisterMetaType<OneMotionCapturePathLine>("OneMotionCapturePathLine");
|
qRegisterMetaType<OneMotionCapturePathLine>("OneMotionCapturePathLine");
|
||||||
m_coordinator = new OneMotionCaptureCoordinator(m_multiAxisController, m_Imager);
|
m_coordinator = new OneMotionCaptureCoordinator(m_multiAxisController, m_Imager);
|
||||||
m_coordinator->setObjectName("testOneMotionCaptureCoordinator");
|
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;
|
OneMotionCapturePathLine tmp;
|
||||||
tmp.speedRecord = ui.speed_lineEdit->text().toDouble();
|
tmp.speedRecord = ui.speed_lineEdit->text().toDouble();
|
||||||
@ -271,18 +280,14 @@ void OneMotorControl::multiPosHyperAutoExposure()
|
|||||||
|
|
||||||
void OneMotorControl::onSequenceComplete_gonggashan_autoexpose(int state)
|
void OneMotorControl::onSequenceComplete_gonggashan_autoexpose(int state)
|
||||||
{
|
{
|
||||||
emit sequenceComplete();
|
emit multiPosAutoexposeSequenceCompleteSignal();
|
||||||
|
|
||||||
m_coordinator_gonggashan_autoexpose->deleteLater();
|
m_coordinator_gonggashan_autoexpose->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OneMotorControl::onSequenceComplete(int state)
|
void OneMotorControl::onSequenceComplete_motorBack2Origin(int state)
|
||||||
{
|
{
|
||||||
emit sequenceComplete();
|
emit sequenceComplete_motorBack2Origin();
|
||||||
|
|
||||||
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)));
|
|
||||||
|
|
||||||
// Use deleteLater() instead of delete: this slot may have been called directly
|
// Use deleteLater() instead of delete: this slot may have been called directly
|
||||||
// from OneMotionCaptureCoordinator's call stack (direct connection), so deleting
|
// from OneMotionCaptureCoordinator's call stack (direct connection), so deleting
|
||||||
|
|||||||
@ -35,6 +35,8 @@ public:
|
|||||||
|
|
||||||
void connectMotor(bool isNotification);
|
void connectMotor(bool isNotification);
|
||||||
|
|
||||||
|
void setScanSpeed(double speed);
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void onConnectMotor();
|
void onConnectMotor();
|
||||||
|
|
||||||
@ -48,7 +50,7 @@ public Q_SLOTS:
|
|||||||
void onxMotorLeft();
|
void onxMotorLeft();
|
||||||
void onxMotorStop();
|
void onxMotorStop();
|
||||||
|
|
||||||
void onSequenceComplete(int state);
|
void onSequenceComplete_motorBack2Origin(int state);
|
||||||
void onSequenceComplete_gonggashan_autoexpose(int state);
|
void onSequenceComplete_gonggashan_autoexpose(int state);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
@ -65,11 +67,16 @@ signals:
|
|||||||
void stopStepMotionSignal();
|
void stopStepMotionSignal();
|
||||||
|
|
||||||
void sequenceComplete();
|
void sequenceComplete();
|
||||||
|
void sequenceComplete_motorBack2Origin();
|
||||||
|
|
||||||
void broadcastLocationSignal(std::vector<double>);
|
void broadcastLocationSignal(std::vector<double>);
|
||||||
|
|
||||||
void hyperAutoExposureDoneSignal_gonggashan(double exposureTime, double frameRate);
|
void hyperAutoExposureDoneSignal_gonggashan(double exposureTime, double frameRate);
|
||||||
|
|
||||||
|
void multiPosAutoexposeSequenceCompleteSignal();
|
||||||
|
|
||||||
|
void sequenceCompleteSignal_hyperImagerStopRecord(int);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::OneMotorControl_UI ui;
|
Ui::OneMotorControl_UI ui;
|
||||||
|
|
||||||
@ -135,6 +142,7 @@ signals:
|
|||||||
|
|
||||||
void broadcastLocationSignal(std::vector<double>);
|
void broadcastLocationSignal(std::vector<double>);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::OneMotorControl_UI ui;
|
Ui::OneMotorControl_UI ui;
|
||||||
|
|
||||||
|
|||||||
100
HPPA/fodis.ui
100
HPPA/fodis.ui
@ -6,8 +6,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>857</width>
|
<width>438</width>
|
||||||
<height>477</height>
|
<height>330</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -83,7 +83,7 @@ QPushButton:pressed
|
|||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="1" column="1" colspan="2">
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QPushButton" name="close_btn">
|
<widget class="QPushButton" name="close_btn">
|
||||||
@ -113,33 +113,7 @@ QPushButton:pressed
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="2" column="1" colspan="2">
|
||||||
<spacer name="horizontalSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>135</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="2">
|
|
||||||
<spacer name="horizontalSpacer_2">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>135</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="1">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
@ -184,7 +158,71 @@ QPushButton:pressed
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="1">
|
<item row="3" column="0">
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>135</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1" colspan="2">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">QLabel {
|
||||||
|
color: rgb(255, 255, 255);
|
||||||
|
}</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>文件名</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="fileNameLineEdit">
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">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;
|
||||||
|
}</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>test</string>
|
||||||
|
</property>
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="3">
|
||||||
|
<spacer name="horizontalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>135</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="2">
|
||||||
<spacer name="verticalSpacer_3">
|
<spacer name="verticalSpacer_3">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
|
|||||||
@ -64,6 +64,11 @@ rgbCameraWindow::~rgbCameraWindow()
|
|||||||
delete m_RgbCameraThread;
|
delete m_RgbCameraThread;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rgbCameraWindow::toggleTakePhoto()
|
||||||
|
{
|
||||||
|
emit ui.take_photo_btn->clicked();
|
||||||
|
}
|
||||||
|
|
||||||
void rgbCameraWindow::setupCaptureCoordinator()
|
void rgbCameraWindow::setupCaptureCoordinator()
|
||||||
{
|
{
|
||||||
m_captureCoordinator = new RgbCameraCaptureCoordinator(m_RgbCamera, this);
|
m_captureCoordinator = new RgbCameraCaptureCoordinator(m_RgbCamera, this);
|
||||||
|
|||||||
@ -32,6 +32,8 @@ public Q_SLOTS:
|
|||||||
void onSelectDataFolder();
|
void onSelectDataFolder();
|
||||||
void onFileNameChanged(const QString& text);
|
void onFileNameChanged(const QString& text);
|
||||||
|
|
||||||
|
void toggleTakePhoto();
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void PlotRgbImageSignal();
|
void PlotRgbImageSignal();
|
||||||
void CamClosedSignal();
|
void CamClosedSignal();
|
||||||
|
|||||||
Reference in New Issue
Block a user