diff --git a/experiment_data/analysis_state/6172-new.xlsx b/experiment_data/analysis_state/6172-new.xlsx index 1416640..3f021d9 100644 Binary files a/experiment_data/analysis_state/6172-new.xlsx and b/experiment_data/analysis_state/6172-new.xlsx differ diff --git a/experiment_data/analysis_state/6174-new.xlsx b/experiment_data/analysis_state/6174-new.xlsx new file mode 100644 index 0000000..e844b12 Binary files /dev/null and b/experiment_data/analysis_state/6174-new.xlsx differ diff --git a/experiment_data/analysis_state/new.xlsx b/experiment_data/analysis_state/new.xlsx index 1c30087..b5d9a4c 100644 Binary files a/experiment_data/analysis_state/new.xlsx and b/experiment_data/analysis_state/new.xlsx differ diff --git a/experiment_data/analysis_state/~$617-new.xlsx b/experiment_data/analysis_state/~$617-new.xlsx deleted file mode 100644 index d4a5841..0000000 Binary files a/experiment_data/analysis_state/~$617-new.xlsx and /dev/null differ diff --git a/experiment_data/analysis_state/~$6172-new.xlsx b/experiment_data/analysis_state/~$6172-new.xlsx deleted file mode 100644 index d4a5841..0000000 Binary files a/experiment_data/analysis_state/~$6172-new.xlsx and /dev/null differ diff --git a/experiment_data/analysis_state/~$616-new.xlsx b/experiment_data/analysis_state/~$6174-new.xlsx similarity index 100% rename from experiment_data/analysis_state/~$616-new.xlsx rename to experiment_data/analysis_state/~$6174-new.xlsx diff --git a/src/data/xlsxhandler.cpp b/src/data/xlsxhandler.cpp index ff6baa1..faba3c5 100644 --- a/src/data/xlsxhandler.cpp +++ b/src/data/xlsxhandler.cpp @@ -395,6 +395,8 @@ void XlsxHandler::readAnalysisOperation( ao.mode = AnalysisMode::OnsetTemperaturePoint; }else if(modeStr == AnaOpRecorder::EndsetTemperaturePointStr){ ao.mode = AnalysisMode::EndsetTemperaturePoint; + }else if(modeStr == AnaOpRecorder::OITStr){ + ao.mode = AnalysisMode::OIT; } ao.x1 = sheet->cellAt(startLineIndex, 2)->value().toDouble(); @@ -464,6 +466,11 @@ void XlsxHandler::writeAnalysisOperationDetail(QXlsx::Document *xlsx, const int analysisOpName = AnalysisOperationRecorder::EndsetTemperaturePointStr; break; } + case AnalysisMode::OIT: + { + analysisOpName = AnalysisOperationRecorder::OITStr; + break; + } default:break; } @@ -696,8 +703,8 @@ int XlsxHandler::deleteInvalidRow(QXlsx::Document *doc) || cellValue == AnaOpRecorder::EndsetTemperaturePointStr ) { qDebug() << "Row" << row << "is empty or contains specified string. Deleting row."; -// sheet->deleteRows(row, 1); // 删除当前行 -// sheet->deleteRow(row); + // sheet->deleteRows(row, 1); // 删除当前行 + // sheet->deleteRow(row); } } } diff --git a/src/mainwindow.h b/src/mainwindow.h index c6386e6..0afbe1b 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -122,7 +122,6 @@ private: void smoothness(const int level); QVector smoothnessDetail(const int level,const QVector&); void smoothnessExperimentData(const int level); - private: bool _manuallyStopTheExperimentFlag; Ui::MainWindow *ui; diff --git a/src/ui/analysisoperationrecorder.h b/src/ui/analysisoperationrecorder.h index 8d67b54..735ea46 100644 --- a/src/ui/analysisoperationrecorder.h +++ b/src/ui/analysisoperationrecorder.h @@ -9,8 +9,8 @@ const QString PeakSynthesisAnalysisStr("PeakSynthesisAnalysis"); const QString GlassTransitionStr("GlassTransition"); const QString OnsetTemperaturePointStr("OnsetTemperaturePoint"); const QString EndsetTemperaturePointStr("EndsetTemperaturePoint"); +const QString OITStr("OIT"); -#if 1 enum AnalysisMode{ Null, NumericalLabel, @@ -22,7 +22,6 @@ enum AnalysisMode{ EndsetTemperaturePoint, OIT }; -#endif struct AnalysisOperation{ QString filePath; @@ -39,7 +38,6 @@ extern QVector _analysisOperationVtr; void removeTheLastAnalysisOperation(); void removeAnalysisOperationByObjectName(const QString objectName); - } diff --git a/src/ui/centralwidget.cpp b/src/ui/centralwidget.cpp index 3896737..4b5d777 100644 --- a/src/ui/centralwidget.cpp +++ b/src/ui/centralwidget.cpp @@ -331,6 +331,7 @@ void CentralWidget::slotAnalysisSettingApply() QString selectedCurveObjectName = _currentCurve->objectName(); // Set curve data to PointCalculate. + QVector totalDataVtr; if(Global::_curveFileDataVtr.empty()){ // Load experiment data. logde<<"experiment vtr size:"<setObjectName(cfd.filePath); +#if 0 // Set axis range. QPair minMaxXAxisPair; if(_axisMode == AxisMode::SingleY){ @@ -620,14 +646,37 @@ void CentralWidget::uiLoadXlsxFileData() minMaxYAxisPair.first,minMaxYAxisPair.second); _customPlot->yAxis->setRange(newYAxisPair.first , newYAxisPair.second); +#endif // pti.curve = _currentCurve; } + // Axis setting. PointCalculate::setAnalysisData(allDataVtr); + // Set axis range. + QPair minMaxXAxisPair; + if(_axisMode == AxisMode::SingleY){ + // Axis x is temperature value. + minMaxXAxisPair = PointCalculate::getMinAndMaxOfSampleTemp(); + }else{ + // Axis x is time value. + minMaxXAxisPair = PointCalculate::getMinAndMaxOfRunTime(); + } + QPairnewXAxisPair = PointCalculate::getMinAndMaxOfAxis( + minMaxXAxisPair.first,minMaxXAxisPair.second); + _customPlot->xAxis->setRange(newXAxisPair.first, newXAxisPair.second); + + QPair minMaxYAxisPair = PointCalculate::getMinAndMaxOfDSC(); + QPairnewYAxisPair = PointCalculate::getMinAndMaxOfAxis( + minMaxYAxisPair.first,minMaxYAxisPair.second); + _customPlot->yAxis->setRange(newYAxisPair.first , + newYAxisPair.second); // Add analysis operation data. - if(cfd.analysisOperationVtr.size() > 0){ + logde<<"analysis operation vtr size:" + < tickPositions = _customPlot->yAxis->tickVector(); + // qDebug() << "Y-axis tick positions:"; + // for (double pos : tickPositions) { + // qDebug() << pos; + // } + double step = tickPositions.at(1) - tickPositions.at(0); -// Global::ExperimentData ed = PointCalculate::findOnSetDataByTemperature(x1,x2); + // + Global::ExperimentData ed = PointCalculate::findOnSetDataByTime(x1,x2); -// PointCalculate::setRegionPointX(x1,x2); + // Global::ExperimentData ed = PointCalculate::findOnSetDataByTemperature(x1,x2); + + // PointCalculate::setRegionPointX(x1,x2); Global::ExperimentData startData = PointCalculate::_dataVtr.first(); -// QPair -// startEndDataPair = PointCalculate::calculateStartAndEndData(); + // QPair + // startEndDataPair = PointCalculate::calculateStartAndEndData(); logde<<"start data time:"< xVtr,yVtr; - xVtr.push_back(startData.runTime); - xVtr.push_back(startData.runTime); + logde << "step:"<(step) / 5 / 2; - QCPGraph *startLine = _customPlot->addGraph(); - startLine->setData(xVtr, yVtr); - startLine->setPen(QPen(Qt::red, 1)); + double startOffset = localStep ; + double endOffset = localStep * 2; - // Draw end vertical line. - xVtr.clear(); - yVtr.clear(); - xVtr.push_back(endData.runTime); - xVtr.push_back(endData.runTime); + logde<<"start/end offset:" + <addGraph(); - endLine->setData(xVtr, yVtr); - endLine->setPen(QPen(Qt::red, 1)); -#endif + double verticalLineStartY = startData.dsc - startOffset; + double verticalLineEndY = startData.dsc - endOffset; + + double totalLineDsc = startData.dsc - (endOffset - startOffset) * 1.5; // Draw start line. QCPItemLine *startLine = new QCPItemLine(_customPlot); - startLine->start->setCoords(startData.runTime,startData.dsc - 10); - startLine->end->setCoords(startData.runTime,startData.dsc - 20); + startLine->start->setCoords(startData.runTime,verticalLineStartY); + startLine->end->setCoords(startData.runTime,verticalLineEndY); startLine->setPen(QPen(Qt::red, 1)); + ItemManager::addTemporaryQCPItemLine(startLine,objectName); + // Draw end line. QCPItemLine *endLine = new QCPItemLine(_customPlot); - endLine->start->setCoords(endData.runTime,endData.dsc - 10); - endLine->end->setCoords(endData.runTime,endData.dsc - 20); + endLine->start->setCoords(endData.runTime,verticalLineStartY); + endLine->end->setCoords(endData.runTime,verticalLineEndY); endLine->setPen(QPen(Qt::red, 1)); + ItemManager::addTemporaryQCPItemLine(endLine,objectName); // Draw total line. QCPItemLine *totalLine = new QCPItemLine(_customPlot); - totalLine->start->setCoords(startData.runTime,startData.dsc - 15); - totalLine->end->setCoords(endData.runTime,endData.dsc - 15); + totalLine->start->setCoords(startData.runTime,totalLineDsc); + totalLine->end->setCoords(endData.runTime,totalLineDsc); totalLine->setPen(QPen(Qt::red, 1)); + ItemManager::addTemporaryQCPItemLine(totalLine,objectName); // Draw title. - double textX = (endData.runTime - startData.runTime) / 2 + endData.runTime; + double textX = (endData.runTime - startData.runTime) / 3 + startData.runTime; + double textY = verticalLineEndY; QCPItemText *textLabel = new QCPItemText(_customPlot); - textLabel->setPositionAlignment(Qt::AlignCenter); // 对齐方式 + textLabel->setPositionAlignment(Qt::AlignLeft); // 对齐方式 textLabel->position->setType(QCPItemPosition::ptPlotCoords); // 使用数据坐标 - textLabel->position->setCoords(textX,startData.dsc - 20); // 设置文本位置在指定点上方 + textLabel->position->setCoords(textX,textY); // 设置文本位置在指定点上方 - textLabel->setText("OIT:123.44"); // 设置文本内容 + double elapseMin = endData.runTime - startData.runTime; + QString elapseMinStr = QString("OIT: ") + Global::converDoubleToStr(elapseMin) + + QString(" min"); + textLabel->setText(elapseMinStr); // 设置文本内容 QFont font(QFont("Arial", 10)); textLabel->setFont(font); textLabel->setSelectedFont(font); textLabel->setSelectable(true); // 设置为可选 + ItemManager::addTemporaryQCPItemText(textLabel,objectName); + _customPlot->replot(); } +void CentralWidget::setAxisMode(AxisMode mode) +{ + if(_axisMode != mode){ + _axisMode = mode; + uiLoadXlsxFileData(); + } +} + void CentralWidget::clearAllData() { Global::_mode = Global::Mode::Analysis; diff --git a/src/ui/centralwidget.h b/src/ui/centralwidget.h index c214de1..3d55c42 100644 --- a/src/ui/centralwidget.h +++ b/src/ui/centralwidget.h @@ -112,11 +112,13 @@ private: void clearData(const ClearDataMode); void clearAllUiData(); - - void loadAnalysisData(const AnalysisMode mode,const double x1,const double x2,const QString objectName); - void drawOITLine(const Global::ExperimentData startData,const Global::ExperimentData endData); + void drawOITLine(const Global::ExperimentData startData, + const Global::ExperimentData endData, + const int step,const QString objectName); + + void setAxisMode(Global::AxisMode mode); private: AnalysisOperationRecorder::AnalysisMode _analysisMode; LocalCustomPlot *_customPlot;