diff --git a/experiment_data/analysis_state/03-111.xlsx b/experiment_data/analysis_state/03-111.xlsx index d28dda0..063fbd7 100644 Binary files a/experiment_data/analysis_state/03-111.xlsx and b/experiment_data/analysis_state/03-111.xlsx differ diff --git a/experiment_data/analysis_state/162-new.xlsx b/experiment_data/analysis_state/162-new.xlsx new file mode 100644 index 0000000..7a91345 Binary files /dev/null and b/experiment_data/analysis_state/162-new.xlsx differ diff --git a/experiment_data/analysis_state/6-1-new.xlsx b/experiment_data/analysis_state/6-1-new.xlsx index b5fd905..1bd823e 100644 Binary files a/experiment_data/analysis_state/6-1-new.xlsx and b/experiment_data/analysis_state/6-1-new.xlsx differ diff --git a/experiment_data/analysis_state/616-2-new.xlsx b/experiment_data/analysis_state/616-2-new.xlsx new file mode 100644 index 0000000..fcaecfd Binary files /dev/null and b/experiment_data/analysis_state/616-2-new.xlsx differ diff --git a/experiment_data/analysis_state/616-new.xlsx b/experiment_data/analysis_state/616-new.xlsx new file mode 100644 index 0000000..d90cdbd Binary files /dev/null and b/experiment_data/analysis_state/616-new.xlsx differ diff --git a/experiment_data/analysis_state/6163-new.xlsx b/experiment_data/analysis_state/6163-new.xlsx new file mode 100644 index 0000000..b8e6825 Binary files /dev/null and b/experiment_data/analysis_state/6163-new.xlsx differ diff --git a/experiment_data/analysis_state/6164-new.xlsx b/experiment_data/analysis_state/6164-new.xlsx new file mode 100644 index 0000000..03ef2ee Binary files /dev/null and b/experiment_data/analysis_state/6164-new.xlsx differ diff --git a/experiment_data/analysis_state/6165-new.xlsx b/experiment_data/analysis_state/6165-new.xlsx new file mode 100644 index 0000000..8028bba Binary files /dev/null and b/experiment_data/analysis_state/6165-new.xlsx differ diff --git a/experiment_data/analysis_state/6166-new.xlsx b/experiment_data/analysis_state/6166-new.xlsx new file mode 100644 index 0000000..399ff3f Binary files /dev/null and b/experiment_data/analysis_state/6166-new.xlsx differ diff --git a/experiment_data/analysis_state/6167-new.xlsx b/experiment_data/analysis_state/6167-new.xlsx new file mode 100644 index 0000000..dfd4f11 Binary files /dev/null and b/experiment_data/analysis_state/6167-new.xlsx differ diff --git a/experiment_data/analysis_state/6168-new.xlsx b/experiment_data/analysis_state/6168-new.xlsx new file mode 100644 index 0000000..4696c5d Binary files /dev/null and b/experiment_data/analysis_state/6168-new.xlsx differ diff --git a/experiment_data/analysis_state/6169-new.xlsx b/experiment_data/analysis_state/6169-new.xlsx new file mode 100644 index 0000000..79c4f9f Binary files /dev/null and b/experiment_data/analysis_state/6169-new.xlsx differ diff --git a/experiment_data/analysis_state/~$616-new.xlsx b/experiment_data/analysis_state/~$616-new.xlsx new file mode 100644 index 0000000..d4a5841 Binary files /dev/null and b/experiment_data/analysis_state/~$616-new.xlsx differ diff --git a/src/data/xlsxhandler.cpp b/src/data/xlsxhandler.cpp index 9d5546e..80d5616 100644 --- a/src/data/xlsxhandler.cpp +++ b/src/data/xlsxhandler.cpp @@ -44,7 +44,8 @@ int XlsxHandler::readFile(const QString filePath, Global::CurveFileData &cfd) _currentFilePath = filePath; - cfd.fileName = fileInfo.fileName(); +// cfd.fileName = fileInfo.fileName(); + cfd.filePath = filePath; QXlsx::Document xlsx(filePath); @@ -254,10 +255,11 @@ void XlsxHandler::writeExperimentFile(const QString filePath) QVector edVtr = Global::_curveExperimentDataVtr.at(i).dataVtr; - if(Global::_smoothnessFlag){ + if(!Global::_curveExperimentDataVtr.at(i).smoothDataVtr.empty()){ edVtr = Global::_curveExperimentDataVtr.at(i).smoothDataVtr; } + // phase data size. dataSizeRow = row; xlsx.write(row , 1, ConPhaseDataSize); @@ -289,7 +291,6 @@ void XlsxHandler::writeExperimentFile(const QString filePath) logde<<"Save xlsx failed."; return ; } - } void XlsxHandler:: xlsxFileAppendAnalysisOperation(const QString filePath) @@ -313,63 +314,6 @@ void XlsxHandler:: xlsxFileAppendAnalysisOperation(const QString filePath) writeAnalysisOperationDetail(xlsx,row); -#if 0 - QVector& aoVtr = - AnalysisOperationRecorder::_analysisOperationVtr; - - xlsx->write(row , 1, ConAnalysisOperationCount); - xlsx->write(row , 2, aoVtr.size()); - row++; - - for (AnaOpRecorderOperation& ao:aoVtr){ - QString analysisOpName; - - switch(ao.mode){ - case AnalysisMode::NumericalLabel: - { - analysisOpName = AnalysisOperationRecorder::NumericalLabelStr; - break; - } - case AnalysisMode::StartPoint: - { - analysisOpName = AnalysisOperationRecorder::StartPointStr; - break; - } - case AnalysisMode::StopPoint: - { - analysisOpName = AnalysisOperationRecorder::StopPointStr; - break; - } - case AnalysisMode::PeakSynthesisAnalysis: - { - analysisOpName = AnalysisOperationRecorder::PeakSynthesisAnalysisStr; - break; - } - case AnalysisMode::GlassTransition: - { - analysisOpName = AnalysisOperationRecorder::GlassTransitionStr; - break; - } - case AnalysisMode::OnsetTemperaturePoint: - { - analysisOpName = AnalysisOperationRecorder::OnsetTemperaturePointStr; - break; - } - case AnalysisMode::EndsetTemperaturePoint: - { - analysisOpName = AnalysisOperationRecorder::EndsetTemperaturePointStr; - break; - } - default:break; - } - - xlsx->write(row , 1, analysisOpName); - xlsx->write(row , 2, ao.x1); - xlsx->write(row , 3, ao.x2); - row++; - } -#endif - // save #if 1 if (!xlsx->saveAs(filePath)) { @@ -430,9 +374,9 @@ void XlsxHandler::readAnalysisOperation( for(int i = 0;i < size; i++){ AnaOpRecorderOperation ao; - ao.filePath = cfd.fileName; + ao.filePath = cfd.filePath; - logde<<"cfd fileName:"<cellAt(startLineIndex, 1)->value().toString(); @@ -662,8 +606,11 @@ void XlsxHandler::writeSmoothnessFile(const QString filePath) // logde<<"Global::_curveExperimentDataVtr size:" // <& edVtr = + QVector edVtr = phaseVtr.at(i).dataVtr; + if(!phaseVtr.at(i).smoothDataVtr.empty()){ + edVtr = phaseVtr.at(i).smoothDataVtr; + } // phase data size. dataSizeRow = row; @@ -698,24 +645,21 @@ void XlsxHandler::writeSmoothnessFile(const QString filePath) } } -void XlsxHandler::writeAnalysisiFile(const QString filePath) +void XlsxHandler::writeXlsxFile(const QString filePath) { - QXlsx::Document* xlsx = openXlsxFile(_currentFilePath); - if(!xlsx){ - logde<<"xlsx is nullptr." ; + if(Global::_curveFileDataVtr.empty()){ + logde<<"curve file data vtr empty..."; return; } - QXlsx::Worksheet *sheet = xlsx->currentWorksheet(); - if(!sheet) - { - logde << "current sheet is empty."; - return; + QVector& phaseVtr = + Global::_curveFileDataVtr.first().phaseTotalVtr; + + if(phaseVtr.first().smoothDataVtr.empty()){ + logde<<"xlsx file data smooth vtr is empty."; + xlsxFileAppendAnalysisOperation(filePath); + }else{ + logde<<"xlsx file data smooth vtr is not empty."; + writeSmoothnessFile(filePath); } - int index = sheet->dimension().lastRow(); - logde<<"lastRow:"< phaseTotalVtr; QVector analysisOperationVtr; @@ -120,7 +121,7 @@ extern int _currentPhase; extern ExperimentInfo _experimentInfo; extern QVector _curveExperimentDataVtr; extern CurveExperimentData* _currentCurveExperimentDataPtr; -extern bool _smoothnessFlag; +//extern bool _smoothnessFlag; #if 0 // Smoothness data @@ -147,6 +148,7 @@ QString converDoubleToStr(const double); void quadraticLeastSquaresFit(double x[], double y[], int n, double coeff[]); double findNegativeStartPoint(double m, double b, double start, double end); bool isZero(double value, double epsilon = 1e-9); +QString getFileName(const QString filePath); }; #endif // GLOBAL_H diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 0f3e488..cafcf6b 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -276,6 +276,9 @@ bool MainWindow::saveFile(const QString fileName,const Global::Mode mode) // 分析模式下,但是文件数据为空,说明做完实验没有保存数据。 XlsxHandler::writeExperimentFile(filePath); }else{ + // 分析模式下,存在文件数据,将文件数据写入文件。 + XlsxHandler::writeXlsxFile(filePath); +#if 0 // 分析模式下,直接保存从文件读取来的数据。 if(Global::_smoothnessFlag){ XlsxHandler::writeSmoothnessFile(filePath); @@ -283,6 +286,7 @@ bool MainWindow::saveFile(const QString fileName,const Global::Mode mode) // 直接在xlsx文件的基础上添加分析数据。 XlsxHandler::xlsxFileAppendAnalysisOperation(filePath); } +#endif } }else if(mode == Global::Mode::Experiment){ XlsxHandler::writeExperimentFile(filePath); @@ -293,12 +297,15 @@ bool MainWindow::saveFile(const QString fileName,const Global::Mode mode) void MainWindow::smoothness(const int level) { +#if 0 Global::_smoothnessFlag = true; + // process data. QVector smoothDataVtr; QString objectName; QCPCurve ** curvePtrPtr; + // 当前数据为实验数据时,需要把所有的当前实验数据都尽心平滑处理。 if(!Global::_curveExperimentDataVtr.empty()){ for(auto & item:Global::_curveExperimentDataVtr){ if(_centralWidget->isCurrentCurve(item.curve)){ @@ -333,6 +340,33 @@ void MainWindow::smoothness(const int level) _centralWidget->addCurveData(smoothDataVtr,wholeObjectName); *curvePtrPtr = _centralWidget->getCurrentCurve(); +#endif + + if(!Global::_curveExperimentDataVtr.empty()){ + // 当前数据为实验数据时,需要把所有的当前实验数据都进行平滑处理。 + + // 删除所有objectName为experiment的curve. + _centralWidget->deleteCurveByObjectName(Global::ObjectNameExperiemnt); + // 添加所有平滑后的curve. + for(auto & item:Global::_curveExperimentDataVtr){ + item.smoothDataVtr = smoothnessDetail(level,item.dataVtr); + item.curve = _centralWidget->addCurveData(item.smoothDataVtr,Global::ObjectNameExperiemnt); + } + }else{ + // 当前数据为文件分析数据时,需要把当前文件下的所有数据都进行平滑处理。 + QString selectedCurveObjectName = _centralWidget->getCurrentCurve()->objectName(); + _centralWidget->deleteCurveByObjectName(selectedCurveObjectName); + + for(Global::CurveFileData &cfd :Global::_curveFileDataVtr){ + if(selectedCurveObjectName.contains(cfd.filePath)){ + for(Global::PhaseTotalInfo& pti:cfd.phaseTotalVtr){ + pti.smoothDataVtr = smoothnessDetail(level,pti.dataVtr); + pti.curve = _centralWidget->addCurveData(pti.smoothDataVtr, + cfd.filePath); + } + } + } + } } @@ -704,8 +738,32 @@ void MainWindow::on_actionSmoothness10_triggered() void MainWindow::on_actionOriginalData_triggered() { - Global::_smoothnessFlag = false; + if(!Global::_curveExperimentDataVtr.empty()){ + // 删除所有objectName为experiment的curve. + _centralWidget->deleteCurveByObjectName(Global::ObjectNameExperiemnt); + for(auto & item:Global::_curveExperimentDataVtr){ + item.smoothDataVtr.clear(); + item.curve = _centralWidget->addCurveData(item.dataVtr,Global::ObjectNameExperiemnt); + } + }else{ + // 当前数据为文件分析数据时,需要把当前文件下的所有数据都进行平滑处理。 + QString selectedCurveObjectName = _centralWidget->getCurrentCurve()->objectName(); + _centralWidget->deleteCurveByObjectName(selectedCurveObjectName); + + for(Global::CurveFileData &cfd :Global::_curveFileDataVtr){ + if(selectedCurveObjectName.contains(cfd.filePath)){ + for(Global::PhaseTotalInfo& pti:cfd.phaseTotalVtr){ + pti.smoothDataVtr.clear(); + pti.curve = _centralWidget->addCurveData(pti.dataVtr, + cfd.filePath); + } + } + } + } + + +#if 0 // process data. QVector targetDataVtr; QString objectName; @@ -726,16 +784,17 @@ void MainWindow::on_actionOriginalData_triggered() if(_centralWidget->isCurrentCurve(pti.curve)){ targetDataVtr = pti.dataVtr; - objectName = cfd.fileName; + objectName = cfd.filePath; curvePtrPtr = &pti.curve; } } } } // - _centralWidget->deleteCurrentCurve(); + _centralWidget->deleteCurveByObjectName(_centralWidget->getCurrentCurve()->objectName()); _centralWidget->addCurveData(targetDataVtr,objectName); *curvePtrPtr = _centralWidget->getCurrentCurve(); +#endif } diff --git a/src/ui/centralwidget.cpp b/src/ui/centralwidget.cpp index fee529f..a8c36e9 100644 --- a/src/ui/centralwidget.cpp +++ b/src/ui/centralwidget.cpp @@ -124,12 +124,19 @@ bool CentralWidget::isCurrentCurve(QCPCurve *curve) return _currentCurve == curve; } +#if 0 void CentralWidget::deleteCurrentCurve() { slotDelCurve(_currentCurve); } -void CentralWidget::addCurveData( +void CentralWidget::deleteAllExperimentCurve() +{ + deleteCurve(Global::ObjectNameExperiemnt); +} +#endif + +QCPCurve* CentralWidget::addCurveData( const QVector &dataVtr,const QString objectName) { PointCalculate::setAnalysisData(dataVtr); @@ -186,6 +193,8 @@ void CentralWidget::addCurveData( // Refresh ui. _customPlot->replot(); + + return _currentCurve; } void CentralWidget::setAnalysisMode(const AnalysisMode mode) @@ -319,14 +328,21 @@ void CentralWidget::slotAnalysisSettingApply() return; } + QString selectedCurveObjectName = _currentCurve->objectName(); + // Set curve data to PointCalculate. if(Global::_curveFileDataVtr.empty()){ // Load experiment data. logde<<"experiment vtr size:"<objectName().toStdString(); - deleteCurve(curve->objectName()); + deleteCurveByObjectName(curve->objectName()); } void CentralWidget::slotGetAxisInfo() @@ -579,7 +600,7 @@ void CentralWidget::uiLoadXlsxFileData() _currentCurve->setSelectable(QCP::stWhole); // 设置曲线可选 _currentCurve->setLineStyle(QCPCurve::lsLine); // 线性连接 - _currentCurve->setObjectName(cfd.fileName); + _currentCurve->setObjectName(cfd.filePath); // Set axis range. QPair minMaxXAxisPair; @@ -607,7 +628,7 @@ void CentralWidget::uiLoadXlsxFileData() if(cfd.analysisOperationVtr.size() > 0){ for(AnaOpRecorder::AnalysisOperation& ao :cfd.analysisOperationVtr){ - loadAnalysisData(ao.mode,ao.x1,ao.x2,cfd.fileName); + loadAnalysisData(ao.mode,ao.x1,ao.x2,cfd.filePath); } } } @@ -1062,7 +1083,7 @@ void CentralWidget::clearData(const CentralWidget::ClearDataMode mode) _currentCurve = nullptr; - Global::_smoothnessFlag = false; +// Global::_smoothnessFlag = false; case ClearDataMode::JustUi: //ui clearAllUiData(); @@ -1152,7 +1173,7 @@ void CentralWidget::clearAllUiData() } } -void CentralWidget::deleteCurve(const QString objectName) +void CentralWidget::deleteCurveByObjectName(const QString objectName) { for (int i = _analysisFilePathVtr.size() - 1; i >= 0; --i) { if (_analysisFilePathVtr[i].startsWith(objectName)) { diff --git a/src/ui/centralwidget.h b/src/ui/centralwidget.h index 5586ac2..c214de1 100644 --- a/src/ui/centralwidget.h +++ b/src/ui/centralwidget.h @@ -41,8 +41,14 @@ public: bool isCurrentCurve(QCPCurve* curve); +#if 0 void deleteCurrentCurve(); - void addCurveData(const QVector &,const QString objectName); + void deleteAllExperimentCurve(); +#endif + + void deleteCurveByObjectName(const QString); + + QCPCurve* addCurveData(const QVector &,const QString objectName); QCPCurve * getCurrentCurve(){return _currentCurve;} signals: @@ -106,7 +112,7 @@ private: void clearData(const ClearDataMode); void clearAllUiData(); - void deleteCurve(const QString); + void loadAnalysisData(const AnalysisMode mode,const double x1,const double x2,const QString objectName); @@ -114,7 +120,7 @@ private: private: AnalysisOperationRecorder::AnalysisMode _analysisMode; LocalCustomPlot *_customPlot; - QCPCurve * _currentCurve; + QCPCurve * _currentCurve; EventHandler* _eventHandler; QCPItemStraightLine *_line1,*_line2; QVector _lineVtr; diff --git a/src/ui/experimentsettingform.cpp b/src/ui/experimentsettingform.cpp index a2e0ba9..bfdeaa8 100644 --- a/src/ui/experimentsettingform.cpp +++ b/src/ui/experimentsettingform.cpp @@ -652,6 +652,7 @@ void ExperimentSettingForm::slotRecvPhaseInfo(const QByteArray &ba) Phase *phase = (Phase *)(data + i * PHASE_BYTE_SIZE); phaseVtr.push_back(*phase); #endif + #if 0 u8* localData = data + i * PHASE_BYTE_SIZE; int index = 0; diff --git a/src/ui/printpreviewform.cpp b/src/ui/printpreviewform.cpp index 6b64127..0029313 100644 --- a/src/ui/printpreviewform.cpp +++ b/src/ui/printpreviewform.cpp @@ -95,8 +95,9 @@ void PrintPreviewForm::slotPaintRequested(QPrinter *printer) frameRect.width(),30); painter.drawRect(fileInfoRect); - QString fileInfoStr = QString(" 设备:差式扫描量热仪 文件名:") - + Global::_curveFileDataVtr.first().fileName; + QString fileName = Global::getFileName(Global::_curveFileDataVtr.first().filePath); + QString fileInfoStr = QString(" 设备:差式扫描量热仪 文件名:") + fileName; + painter.drawText(fileInfoRect, Qt::AlignLeft|Qt::AlignVCenter, fileInfoStr); // Experiment info. diff --git a/src/ui/specificheatcomparisonmethodform.cpp b/src/ui/specificheatcomparisonmethodform.cpp index 06f0282..6a8fcec 100644 --- a/src/ui/specificheatcomparisonmethodform.cpp +++ b/src/ui/specificheatcomparisonmethodform.cpp @@ -113,13 +113,13 @@ void SpecificHeatComparisonMethodForm::showEvent(QShowEvent *event) for(auto& cfd:Global::_curveFileDataVtr){ for(auto& item:cfd.phaseTotalVtr){ if(item.curve == _baseLineCurve){ - _baseLineLineEdit->setText(cfd.fileName); + _baseLineLineEdit->setText(cfd.filePath); _baseLineDataVtr = &(item.dataVtr); }else if(item.curve == _standardSampleCurve){ - _standardSampleLineEdit->setText(cfd.fileName); + _standardSampleLineEdit->setText(cfd.filePath); _standardSampleDataVtr = &(item.dataVtr); }else if(item.curve == _sampleCurve){ - _sampleLineEdit->setText(cfd.fileName); + _sampleLineEdit->setText(cfd.filePath); _sampleDataVtr = &(item.dataVtr); } }