diff --git a/a8k_optalgo b/a8k_optalgo index f1e84f5..65fed4d 160000 --- a/a8k_optalgo +++ b/a8k_optalgo @@ -1 +1 @@ -Subproject commit f1e84f5f99f42f6e810a77611cf197826a430271 +Subproject commit 65fed4d521197fa45d33f68c4407829624a8a34a diff --git a/libzqt/zui/zqui.cpp b/libzqt/zui/zqui.cpp index 6046efa..ae9517d 100644 --- a/libzqt/zui/zqui.cpp +++ b/libzqt/zui/zqui.cpp @@ -18,15 +18,22 @@ void ZQUI::ishow(const char *fmt, ...) { vsnprintf(buf, sizeof(buf), fmt, args); va_end(args); QString text(buf); - if (m_ishow) m_ishow(text); + if (m_ishow) m_ishow(false, text); +} +void ZQUI::ishow_raw(const char *fmt, ...) { + va_list args; + va_start(args, fmt); + char buf[1024] = {0}; + vsnprintf(buf, sizeof(buf), fmt, args); + va_end(args); + QString text(buf); + if (m_ishow) m_ishow(true, text); } void ZQUI::instructionPreviewClear() { if (m_instructionPreviewClear) m_instructionPreviewClear(); } - - void ZQUI::rawshow(const char *fmt, ...) { va_list args; va_start(args, fmt); diff --git a/libzqt/zui/zqui.hpp b/libzqt/zui/zqui.hpp index 92e9a6b..800d75f 100644 --- a/libzqt/zui/zqui.hpp +++ b/libzqt/zui/zqui.hpp @@ -41,9 +41,9 @@ class ZQUI : public QObject { public: typedef std::function display_func_t; - std::function m_ishow; - std::function m_rawshow; - std::function m_instructionPreviewClear; + std::function m_ishow; + std::function m_rawshow; + std::function m_instructionPreviewClear; public: static ZQUI *ins(); @@ -52,10 +52,11 @@ class ZQUI : public QObject { void doinui(std::function dowhat); void ishow(const char *fmt, ...); + void ishow_raw(const char *fmt, ...); void rawshow(const char *fmt, ...); void instructionPreviewClear(); - void setishow(std::function func) { m_ishow = func; } + void setishow(std::function func) { m_ishow = func; } void setrawshow(std::function func) { m_rawshow = func; } void setInstructionPreviewClear(std::function func) { m_instructionPreviewClear = func; } @@ -68,4 +69,5 @@ class ZQUI : public QObject { extern void DoInUi(std::function dowhat); -#define ISHOW(fmt, ...) ZQUI::ins()->ishow(fmt, ##__VA_ARGS__) \ No newline at end of file +#define ISHOW(fmt, ...) ZQUI::ins()->ishow(fmt, ##__VA_ARGS__) +#define ISHOW_RAW(fmt, ...) ZQUI::ins()->ishow_raw(fmt, ##__VA_ARGS__) \ No newline at end of file diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 1bc6930..75c2488 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -75,12 +75,18 @@ void MainWindow::doinui_slot(QFunction func) { * PreviewShow * ***********************************************************************************************************************/ -void MainWindow::ishow(QString text) { - QString info; - info.append(QDateTime::currentDateTime().toString("hh:mm:ss")); - info.append("|"); - info.append(text); - emit doinui_signal(QFunction([this, info]() { ui->instructionPreview->append(info); })); +void MainWindow::ishow(bool raw, QString text) { + if (!raw) { + QString info; + info.append(QDateTime::currentDateTime().toString("hh:mm:ss")); + info.append("|"); + info.append(text); + emit doinui_signal(QFunction([this, info]() { ui->instructionPreview->append(info); })); + } else { + QString info; + info.append(text); + emit doinui_signal(QFunction([this, info]() { ui->instructionPreview->append(info); })); + } } void MainWindow::rawshow(QString text) { @@ -264,7 +270,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi qRegisterMetaType("QFunction"); connect(this, SIGNAL(doinui_signal(QFunction)), this, SLOT(doinui_slot(QFunction))); ZQUI::ins()->initialize(); - ZQUI::ins()->setishow([this](QString text) { ishow(text); }); + ZQUI::ins()->setishow([this](bool raw, QString text) { ishow(raw, text); }); ZQUI::ins()->setrawshow([this](QString text) { rawshow(text); }); ZQUI::ins()->setInstructionPreviewClear([this]() { instructionPreviewClear(); }); diff --git a/src/mainwindow.h b/src/mainwindow.h index c5be252..6f91347 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -110,7 +110,7 @@ signals: static void log_output(QtMsgType type, const QMessageLogContext &context, const QString &msg); void instructionPreviewClear(); - void ishow(QString info); + void ishow(bool raw, QString text); void rawshow(QString info); void displayInfo(bool suc, QString info); diff --git a/src/tab/a8k_opt_tab.cpp b/src/tab/a8k_opt_tab.cpp index b572639..fb9051f 100644 --- a/src/tab/a8k_opt_tab.cpp +++ b/src/tab/a8k_opt_tab.cpp @@ -253,39 +253,33 @@ void A8kOptTab::construct(QTabWidget *fathertab) { ZQFunctionListBox *box = new ZQFunctionListBox(tab, "结果处理", 4); // 预分析结果 - box->newSubButton("光学结果预分析", [this](int argn, const char **args) { - int32_t lasterGain = atoi(args[0]); - int32_t scanGain = atoi(args[1]); - ICM->callcmd2(getDeviceId(), ka8k_opt_v2_t_open_laster, lasterGain, scanGain); - + box->newSubButton("光学结果(预)分析", [this](int argn, const char **args) { if (m_optData.dataNum == 0) { ZQUI::ins()->ishow("请先进行光学分析,并读取扫描结果"); return; } ISHOW("------ OptRawResultInfo ------"); - ISHOW("laster gain:%d", lasterGain); - ISHOW("scan gain:%d", scanGain); + ISHOW("laster gain:%d", m_laserGain); + ISHOW("scan gain:%d", m_scanGain); ISHOW("opt Type:%s", optType2Str(m_optType)); // 1. 预分析 OptAlgoPreProcessResult result; if (m_optType == kfopt) { - F_A8kOptAlgoPreProcess(array2vector(m_optData), scanGain, 2600, 2800, result); + F_A8kOptAlgoPreProcess(array2vector(m_optData), m_scanGain, 2600, 2800, result); } else if (m_optType == ktopt) { - T_A8kOptAlgoPreProcess(array2vector(m_optData), scanGain, 2600, 2800, result); + T_A8kOptAlgoPreProcess(array2vector(m_optData), m_scanGain, 2600, 2800, result); } ISHOW("------ OptPreParseResult ------"); - ISHOW("scanAgain :%s", result.scanAgain ? "true" : "false"); - ISHOW("suggestScanGain:%d", result.suggestScanGain); + ISHOW("重新扫描 :%s", result.scanAgain ? "true" : "false"); + ISHOW("重新扫描建议增益 :%d", result.suggestScanGain); }); box->newSubButtonEnd(); // 分析结果 - box->newSubButton("光学结果分析", [this](int argn, const char **args) { - int32_t lasterGain = atoi(args[0]); - int32_t scanGain = atoi(args[1]); - ICM->callcmd2(getDeviceId(), ka8k_opt_v2_t_open_laster, lasterGain, scanGain); + box->newSubButton("光学结果分析2", [this](int argn, const char **args) { + DoInUi([]() {}); if (m_optData.dataNum == 0) { ZQUI::ins()->ishow("请先进行光学分析,并读取扫描结果"); @@ -293,20 +287,47 @@ void A8kOptTab::construct(QTabWidget *fathertab) { } ISHOW("------ OptRawResultInfo ------"); - ISHOW("laster gain:%d", lasterGain); - ISHOW("scan gain:%d", scanGain); + ISHOW("laster gain:%d", m_laserGain); + ISHOW("scan gain:%d", m_scanGain); ISHOW("opt Type:%s", optType2Str(m_optType)); + OptAlgoResult result; + PorcessContext context; + A8kOptAlgoProcess(array2vector(m_optData), result); + A8kOptAlgoGetProcessContext(context); + + DoInUi([result, context]() { + WidgetPlot2D *plot2d = new WidgetPlot2D(); + + QStringList lines; + lines.push_back("opt"); + lines.push_back("diff"); + lines.push_back("diffX2"); + plot2d->initGraphName(lines); + + for (int i = 0; i < result.displayData.size(); i++) { + plot2d->addData("opt", result.displayData[i]); + } + for (int i = 0; i < context.diff.size(); i++) { + plot2d->addData("diff", context.diff[i]); + } + for (int i = 0; i < context.diffX2.size(); i++) { + plot2d->addData("diffX2", context.diffX2[i]); + } - // 1. 预分析 - OptAlgoPreProcessResult result; - if (m_optType == kfopt) { - F_A8kOptAlgoPreProcess(array2vector(m_optData), scanGain, 2600, 2800, result); - } else if (m_optType == ktopt) { - T_A8kOptAlgoPreProcess(array2vector(m_optData), scanGain, 2600, 2800, result); - } - ISHOW("------ OptPreParseResult ------"); - ISHOW("scanAgain :%s", result.scanAgain ? "true" : "false"); - ISHOW("suggestScanGain:%d", result.suggestScanGain); + // 250 个点的情况下,峰的标准位置在 40 80 120 160 200 + for (int i = 1; i < 6; i++) { + plot2d->addRefLine(40 * i); + } + plot2d->show(); + + ISHOW_RAW("Peak,find,pos,startpos,endpos"); + ISHOW_RAW("040,%s,%d,%d,%d,%f", result.pin040.find_peak ? "true" : "false", result.pin040.peak_pos, result.pin040.peak_start_pos, result.pin040.peak_end_pos, result.pin040.area); + ISHOW_RAW("080,%s,%d,%d,%d,%f", result.pin080.find_peak ? "true" : "false", result.pin080.peak_pos, result.pin080.peak_start_pos, result.pin080.peak_end_pos, result.pin080.area); + ISHOW_RAW("120,%s,%d,%d,%d,%f", result.pin120.find_peak ? "true" : "false", result.pin120.peak_pos, result.pin120.peak_start_pos, result.pin120.peak_end_pos, result.pin120.area); + ISHOW_RAW("160,%s,%d,%d,%d,%f", result.pin160.find_peak ? "true" : "false", result.pin160.peak_pos, result.pin160.peak_start_pos, result.pin160.peak_end_pos, result.pin160.area); + ISHOW_RAW("200,%s,%d,%d,%d,%f", result.pin200.find_peak ? "true" : "false", result.pin200.peak_pos, result.pin200.peak_start_pos, result.pin200.peak_end_pos, result.pin200.area); + }); + // }); box->newSubButtonEnd(); // 打印分析报告