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);