90 lines
3.3 KiB
C++
90 lines
3.3 KiB
C++
#ifndef BATCHVALIDATION_H
|
||
#define BATCHVALIDATION_H
|
||
|
||
#include <QVector>
|
||
#include <QString>
|
||
#include <QStringList>
|
||
|
||
#include <functional>
|
||
|
||
class QWidget;
|
||
class QObject;
|
||
|
||
struct BatchValidationItem
|
||
{
|
||
QString inputPath;
|
||
QString companionPath;
|
||
};
|
||
|
||
// 默认值即为“2D 图片 + TXT 点云按文件名配对”的批量复检配置,
|
||
// 应用通常无需填写任何字段;特殊项目只需在默认值上增删。
|
||
struct BatchValidationOptions
|
||
{
|
||
QStringList inputNameFilters{QStringLiteral("*.png"), QStringLiteral("*.jpg"),
|
||
QStringLiteral("*.jpeg"), QStringLiteral("*.bmp")};
|
||
QStringList companionNameFilters{QStringLiteral("*.txt")};
|
||
// 常见命名:<序号>_origin.png / <序号>_input.png / <序号>_2d_input.png
|
||
// 配 <序号>_cloud.txt / <序号>.txt
|
||
QStringList inputSuffixAliases{QStringLiteral("_2d_input"), QStringLiteral("_origin"),
|
||
QStringLiteral("_input")};
|
||
QStringList companionSuffixAliases{QStringLiteral("_2d_input"), QStringLiteral("_input"),
|
||
QStringLiteral("_origin"), QStringLiteral("_cloud")};
|
||
// 不限制输入后缀,只按文件名关键字排除生成文件:复检输出(_reinspection)
|
||
// 以及结果图、结果 txt、掩膜。
|
||
QStringList excludedKeywords{QStringLiteral("_reinspection"),
|
||
QStringLiteral("result"),
|
||
QStringLiteral("mask")};
|
||
bool allowMultipleInputsPerCompanion = false;
|
||
bool requireCompanion = true;
|
||
bool recursive = true;
|
||
};
|
||
|
||
struct BatchValidationSummary
|
||
{
|
||
int attempted = 0;
|
||
int succeeded = 0;
|
||
int failed = 0;
|
||
};
|
||
|
||
// Shared file selection, directory enumeration, pairing and sequential
|
||
// processing for offline validation flows in application projects.
|
||
class BatchValidation
|
||
{
|
||
public:
|
||
using Processor = std::function<int(const BatchValidationItem&)>;
|
||
using ProgressCallback = std::function<void(const BatchValidationItem&, int, int)>;
|
||
using CompletionCallback = std::function<void(const BatchValidationSummary&)>;
|
||
using StartedCallback = std::function<void(int)>;
|
||
|
||
static QString SelectFileOrDirectory(QWidget* parent,
|
||
const QString& title,
|
||
const QString& nameFilter,
|
||
const QString& initialPath = QString());
|
||
|
||
static QVector<BatchValidationItem> Collect(
|
||
const QString& inputPath,
|
||
const BatchValidationOptions& options = BatchValidationOptions());
|
||
|
||
static QVector<BatchValidationItem> CollectTextData(const QString& inputPath);
|
||
|
||
// 批量复检进度百分比,例如 12.34%。
|
||
static QString ProgressPercent(int index, int total);
|
||
|
||
static BatchValidationSummary ProcessSequentially(
|
||
const QVector<BatchValidationItem>& items,
|
||
const Processor& processor,
|
||
const ProgressCallback& progress = ProgressCallback());
|
||
|
||
static bool StartTextDataValidation(
|
||
QObject* context,
|
||
QWidget* dialogParent,
|
||
const QString& title,
|
||
const Processor& processor,
|
||
const ProgressCallback& progress,
|
||
const CompletionCallback& completion,
|
||
QString* errorMessage = nullptr,
|
||
const StartedCallback& started = StartedCallback());
|
||
};
|
||
|
||
#endif // BATCHVALIDATION_H
|