diff --git a/HPPA/HPPA.cpp b/HPPA/HPPA.cpp
index 0ba25cb..19b0aa8 100644
--- a/HPPA/HPPA.cpp
+++ b/HPPA/HPPA.cpp
@@ -294,6 +294,18 @@ HPPA::HPPA(QWidget *parent)
createActionGroups();
connect(mImagerGroup, &QActionGroup::triggered, this, &HPPA::selectingImager);
+
+ connect(this->ui.mAction_is_motor_enable, SIGNAL(triggered()), this, SLOT(onMotorSwitch()));
+ QSettings settings;
+ bool isMotorEnable = settings.value("isMotorEnable").toBool();
+ this->ui.mAction_is_motor_enable->setChecked(isMotorEnable);
+}
+
+void HPPA::onMotorSwitch()
+{
+ QSettings settings;
+ settings.setValue("isMotorEnable", this->ui.mAction_is_motor_enable->isChecked());
+ settings.sync();
}
void HPPA::createActionGroups()
@@ -400,24 +412,54 @@ void HPPA::CalculateIntegratioinTimeRange()
void HPPA::onStartRecordStep1()
{
- ////测试代码,用于没有马达时,仅采集光谱仪数据
- //m_RecordState += 1;
+ bool isMotorEnable = this->ui.mAction_is_motor_enable->isChecked();
+ if (!isMotorEnable)//停用马达,仅采集光谱仪数据
+ {
+ m_RecordState += 1;
- //if (m_RecordState % 2 == 1)
- //{
- // onCreateTab(1);
- // m_numberOfRecording = 0;
- // m_Imager->setFileName2Save(m_FilenameLineEdit->text().toStdString());
- // emit StartRecordSignal();//发射开始采集信号
- //}
- //else
- //{
- // m_Imager->setRecordControlState(false);//光谱仪停止采集
+ if (m_RecordState % 2 == 1)
+ {
+ //判断是否覆盖存在的文件
+ FileOperation* fileOperation = new FileOperation();
+ string directory = fileOperation->getDirectoryFromString();
+ //string imgPath = directory + "\\tmp_image";
+ string imgPath = directory + "\\" + m_FilenameLineEdit->text().toStdString() + "_" + std::to_string(1) + ".bil";
+ int x = _access(imgPath.c_str(), 0);
+ if (!x)//如果文件存在就执行此if的代码
+ {
+ enum QMessageBox::StandardButton response = QMessageBox::question(this, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("文件存在!是否覆盖?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);;
+ if (response == QMessageBox::Yes)//
+ {
+ //std::cout << "覆盖" << std::endl;
+ }
+ else
+ {
+ //std::cout << "不覆盖" << std::endl;
+ m_RecordState -= 1;//不覆盖的话就需要还原这个参数,并停止采集
+ return;
+ }
+ }
- // ui.action_start_recording->setText(QString::fromLocal8Bit("采集"));
- // ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}");
- //}
+ ui.ImageViewerTabWidget->clear();
+ onCreateTab(0);
+ m_numberOfRecording = 0;
+ m_Imager->setFrameNumber(this->frame_number->text().toInt());
+ m_Imager->setFileName2Save(imgPath);
+ emit StartRecordSignal();//发射开始采集信号
+
+ ui.action_start_recording->setText(QString::fromLocal8Bit("停止采集"));
+ ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}");
+ }
+ else
+ {
+ m_Imager->setRecordControlState(false);//光谱仪停止采集
+
+ ui.action_start_recording->setText(QString::fromLocal8Bit("采集"));
+ ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}");
+ }
+ return;
+ }
//确保x马达所在位置 小于 x马达最大采集限制位置
int validLineCount = 0;
@@ -454,7 +496,7 @@ void HPPA::onStartRecordStep1()
FileOperation * fileOperation = new FileOperation();
string directory = fileOperation->getDirectoryFromString();
//string imgPath = directory + "\\tmp_image";
- string imgPath = directory + "\\" + m_FilenameLineEdit->text().toStdString() + "_" + std::to_string(1);
+ string imgPath = directory + "\\" + m_FilenameLineEdit->text().toStdString();
int x = _access(imgPath.c_str(), 0);
if (!x)//如果文件存在就执行此if的代码
{
@@ -476,13 +518,13 @@ void HPPA::onStartRecordStep1()
operateWidget = QObject::sender()->objectName();
//设置文件保存名
- m_Imager->setFileName2Save(m_FilenameLineEdit->text().toStdString());
+ m_Imager->setFileName2Save(imgPath);
//删除所有tab
ui.ImageViewerTabWidget->clear();
//创建记录x马达位置的文件
- string x_location = directory + "\\" + m_FilenameLineEdit->text().toStdString() + "x_location.pos";
+ string x_location = removeFileExtension(imgPath) + "x_location.pos";
m_hTimesFile = fopen(x_location.c_str(), "w+");
//开始循环
@@ -542,7 +584,6 @@ void HPPA::onStartRecordStep2(int lineNumber)
else if (lineNumber == -1)
{
std::cout << "软件自动终止采集。" << std::endl;
- m_RecordState++;
ui.action_start_recording->setText(QString::fromLocal8Bit("采集"));
ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}");
@@ -700,7 +741,7 @@ void HPPA::onLeftMouseButtonPressed(int x, int y)
FileOperation * fileOperation = new FileOperation();
string directory = fileOperation->getDirectoryFromString();
- string imgPath = directory + "\\" + m_FilenameLineEdit->text().toStdString() + "_" + std::to_string(m_TabWidgetCurrentIndex + 1);
+ string imgPath = directory + "\\" + m_FilenameLineEdit->text().toStdString() + "_" + std::to_string(m_TabWidgetCurrentIndex + 1) + ".bil";
ImageReaderWriter *ImageReader = new ImageReaderWriter(imgPath.c_str());
@@ -1862,15 +1903,19 @@ void HPPA::onReference()
msgBox.setText(QString::fromLocal8Bit("请确保白板放置正确!"));
msgBox.exec();
- //移动x马达
- if (!isMotorConnected(m_xMotor))
+ bool isMotorEnable = this->ui.mAction_is_motor_enable->isChecked();
+ if (isMotorEnable)
{
- m_xMotor->EnableMotro();
- m_lXmotorLocationOfStartRecord = m_xMotor->GetLocationNow();
- m_xMotor->SettingSpeed(ui.xmotor_speed_slider->OriginalValue());
- //m_xMotor->SettingSpeed(m_lManualSpeedOfXMotor);
+ //移动x马达
+ if (!isMotorConnected(m_xMotor))
+ {
+ m_xMotor->EnableMotro();
+ m_lXmotorLocationOfStartRecord = m_xMotor->GetLocationNow();
+ m_xMotor->SettingSpeed(ui.xmotor_speed_slider->OriginalValue());
+ //m_xMotor->SettingSpeed(m_lManualSpeedOfXMotor);
- m_xMotor->MoveMotar(true);
+ m_xMotor->MoveMotar(true);
+ }
}
emit RecordWhiteSignal();
@@ -1880,12 +1925,16 @@ void HPPA::recordWhiteFinish()
{
ui.mainToolBar->widgetForAction(ui.action_reference)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}");
- //移动x马达
- if (!isMotorConnected(m_xMotor))
+ bool isMotorEnable = this->ui.mAction_is_motor_enable->isChecked();
+ if (isMotorEnable)
{
- //x马达返回采集前的位置
- m_xMotor->SettingSpeed(m_lManualSpeedOfXMotor);
- m_xMotor->MoveToLocation(m_lXmotorLocationOfStartRecord);
+ //移动x马达
+ if (!isMotorConnected(m_xMotor))
+ {
+ //x马达返回采集前的位置
+ m_xMotor->SettingSpeed(m_lManualSpeedOfXMotor);
+ m_xMotor->MoveToLocation(m_lXmotorLocationOfStartRecord);
+ }
}
}
@@ -2004,11 +2053,19 @@ void HPPA::PlotSpectral(int state)
void HPPA::onRecordFinishedSignal_WhenFrameNumberMeet()
{
std::cout << "停止采集原因:帧数采集完了。" << std::endl;
+
+ ui.action_start_recording->setText(QString::fromLocal8Bit("采集"));
+ ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}");
+
+ m_RecordState++;//当自动停止采集
}
void HPPA::onRecordFinishedSignal_WhenFrameNumberNotMeet()
{
std::cout << "停止采集原因:(1)帧数没有采集够时,马达到达最大位置;(2)手动停止采集。" << std::endl;
+
+ ui.action_start_recording->setText(QString::fromLocal8Bit("采集"));
+ ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}");
}
ForLoopControl::ForLoopControl()
diff --git a/HPPA/HPPA.h b/HPPA/HPPA.h
index 669e1b0..82554f7 100644
--- a/HPPA/HPPA.h
+++ b/HPPA/HPPA.h
@@ -236,7 +236,6 @@ private:
void getRequest(QString str);
QActionGroup* mImagerGroup = nullptr;
- QString imagerSelected;
void createActionGroups();
void selectingImager(QAction* selectedAction);
@@ -322,6 +321,8 @@ public Q_SLOTS:
void ontimerMoveXmotor();
void ontimerMoveYmotor();
+ void onMotorSwitch();
+
//
void onimagerSimulatorMove(int x, int y);
void OnSendLogToCallClass(QString str);
diff --git a/HPPA/HPPA.ui b/HPPA/HPPA.ui
index 5e5db0f..f245af2 100644
--- a/HPPA/HPPA.ui
+++ b/HPPA/HPPA.ui
@@ -6,8 +6,8 @@
0
0
- 1078
- 623
+ 1120
+ 675
@@ -84,7 +84,7 @@
0
0
- 1078
+ 1120
30
@@ -162,8 +162,15 @@ color:white;
绐楀彛
+
+
@@ -1535,6 +1542,28 @@ QDockWidget::title {
宸ュ叿鏍
+
+
+ true
+
+
+ 椹揪
+
+
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ 寮鍚
+
+
diff --git a/HPPA/ImagerOperationBase.cpp b/HPPA/ImagerOperationBase.cpp
index ecd9efb..21f9133 100644
--- a/HPPA/ImagerOperationBase.cpp
+++ b/HPPA/ImagerOperationBase.cpp
@@ -204,16 +204,13 @@ void ImagerOperationBase::start_record()
exit(EXIT_FAILURE);
}
- FileOperation* fileOperation = new FileOperation();
- string directory = fileOperation->getDirectoryFromString();
- string imgPath = directory + "\\" + m_FileName2Save + "_" + std::to_string(m_FileSavedCounter);
-
- FILE* m_fImage = fopen((imgPath + ".bil").c_str(), "w+b");
+ m_FileName2Save2 = m_FileName2Save + "_" + std::to_string(m_FileSavedCounter) + ".bil";
+ FILE* m_fImage = fopen(m_FileName2Save2.c_str(), "w+b");
size_t x;
double pixelValueTmp;
- string timesFile = imgPath + ".times";
+ string timesFile = removeFileExtension(m_FileName2Save2) + ".times";
FILE* hTimesFile = fopen(timesFile.c_str(), "w+");
imagerStartCollect();
@@ -404,11 +401,7 @@ void ImagerOperationBase::WriteHdr()
//write an ENVI compatible header file
using namespace std;
-
- FileOperation* fileOperation = new FileOperation();
- string directory = fileOperation->getDirectoryFromString();
-
- string hdrPath = directory + "\\" + m_FileName2Save + "_" + std::to_string(m_FileSavedCounter) + ".hdr";
+ string hdrPath = removeFileExtension(m_FileName2Save2) + ".hdr";
std::ofstream outfile(hdrPath.c_str());
outfile << "ENVI\n";
diff --git a/HPPA/ImagerOperationBase.h b/HPPA/ImagerOperationBase.h
index d4a079b..b96fb46 100644
--- a/HPPA/ImagerOperationBase.h
+++ b/HPPA/ImagerOperationBase.h
@@ -66,6 +66,7 @@ protected:
//以下两个参数用于给保存的影像文件命名
string m_FileName2Save;//保存的影像文件名
+ string m_FileName2Save2;
int m_FileSavedCounter;//保存了几个影像文件
bool m_HasDark;//当采集了暗电流之后,设置为true
diff --git a/HPPA/ResononNirImager.cpp b/HPPA/ResononNirImager.cpp
index 94f79f7..a302f17 100644
--- a/HPPA/ResononNirImager.cpp
+++ b/HPPA/ResononNirImager.cpp
@@ -285,16 +285,13 @@ void ResononNirImager::start_record()
exit(EXIT_FAILURE);
}
- FileOperation* fileOperation = new FileOperation();
- string directory = fileOperation->getDirectoryFromString();
- string imgPath = directory + "\\" + m_FileName2Save + "_" + std::to_string(m_FileSavedCounter);
-
- FILE* m_fImage = fopen((imgPath + ".bil").c_str(), "w+b");
+ m_FileName2Save2 = m_FileName2Save + "_" + std::to_string(m_FileSavedCounter) + ".bil";
+ FILE* m_fImage = fopen(m_FileName2Save2.c_str(), "w+b");
size_t x;
double pixelValueTmp;
- string timesFile = imgPath + ".times";
+ string timesFile = removeFileExtension(m_FileName2Save2) + ".times";
FILE* hTimesFile = fopen(timesFile.c_str(), "w+");
reConnectImage();//nir第二次采集时需要重新连接相机,否则函数imagerStartCollect()会报错。。。。。。
@@ -395,11 +392,7 @@ void ResononNirImager::WriteHdr()
//write an ENVI compatible header file
using namespace std;
-
- FileOperation* fileOperation = new FileOperation();
- string directory = fileOperation->getDirectoryFromString();
-
- string hdrPath = directory + "\\" + m_FileName2Save + "_" + std::to_string(m_FileSavedCounter) + ".hdr";
+ string hdrPath = removeFileExtension(m_FileName2Save2) + ".hdr";
std::ofstream outfile(hdrPath.c_str());
outfile << "ENVI\n";
diff --git a/HPPA/ResononNirImager.h b/HPPA/ResononNirImager.h
index a38239b..4e310a3 100644
--- a/HPPA/ResononNirImager.h
+++ b/HPPA/ResononNirImager.h
@@ -7,6 +7,7 @@
#include "resonon_imager_allied.h"
#include "image2display.h"
#include "fileOperation.h"
+#include "utility_tc.h"
class ResononNirImager :public ImagerOperationBase
{
diff --git a/HPPA/about.ui b/HPPA/about.ui
index da3fff9..3c7ecba 100644
--- a/HPPA/about.ui
+++ b/HPPA/about.ui
@@ -9,7 +9,7 @@
0
0
- 523
+ 629
463
@@ -25,7 +25,7 @@
90
250
- 341
+ 434
134
@@ -70,7 +70,7 @@
- 鐗堟湰锛1.8.6
+ 鐗堟湰锛1.8.7
diff --git a/HPPA/utility_tc.cpp b/HPPA/utility_tc.cpp
index 482660f..016cdf4 100644
--- a/HPPA/utility_tc.cpp
+++ b/HPPA/utility_tc.cpp
@@ -101,6 +101,17 @@ bool createDir(QString fullPath)
}
}
+std::string removeFileExtension(std::string filename)
+{
+ size_t lastDot = filename.find_last_of(".");
+ if (lastDot == std::string::npos) {
+ // 濡傛灉娌℃湁鎵惧埌鍚庣紑锛岃繑鍥炲師瀛楃涓
+ return filename;
+ }
+ return filename.substr(0, lastDot);
+
+}
+
QList getFileInfo(QString file)
{
QFileInfo fileInfo = QFileInfo(file);
diff --git a/HPPA/utility_tc.h b/HPPA/utility_tc.h
index fb3ab27..c7700df 100644
--- a/HPPA/utility_tc.h
+++ b/HPPA/utility_tc.h
@@ -3,6 +3,7 @@
#include
#include
+#include
#include
#include
@@ -18,6 +19,7 @@ void bubbleSort(unsigned short * a, int n);
void swap(unsigned short * a, unsigned short * b);
bool createDir(QString fullPath);
+std::string removeFileExtension(std::string filename);
QList getFileInfo(QString file);