63 lines
3.0 KiB
C++
63 lines
3.0 KiB
C++
#pragma once
|
||
#include <vector>
|
||
|
||
#include <QJsonArray>
|
||
#include <QJsonObject>
|
||
#include <QString>
|
||
|
||
#include "model/Field.hpp"
|
||
|
||
namespace geopro::app {
|
||
|
||
// measurement 散点的纯逻辑(仅依赖 QtCore JSON + core model,无 Widgets/MOC)。
|
||
// 拆出独立 TU 以便单测(与 InversionFormParse 同范式)。
|
||
|
||
// 值类型变换(M7 值类型下拉:线性 / 倒数 / 对数)。原版本地变换显示,无后端。
|
||
enum class ScatterValueType {
|
||
Linearity, // 线性:原值 v
|
||
Inverse, // 倒数:1/v(v==0 → 保持 0,避免 inf)
|
||
Logarithm, // 对数:log10(v)(v<=0 → 保持原值,避免 NaN/-inf 污染色阶范围)
|
||
};
|
||
|
||
// fieldCode('linearity'/'inverse'/'logarithm')→ 枚举;未知回退线性。
|
||
ScatterValueType scatterValueTypeFromCode(const QString& code);
|
||
|
||
// 对一组 v 值应用变换,返回新数组(不可变:不改入参)。
|
||
std::vector<double> applyScatterValueType(const std::vector<double>& v, ScatterValueType type);
|
||
|
||
// 收集「显示/隐藏」要持久化的点 id(M1)。
|
||
// hide=true → 收集当前可见(displayStatus==0)的点 id(原版隐藏全部已选/可见点)。
|
||
// hide=false → 收集当前隐藏(displayStatus!=0)的点 id(原版显示全部已隐藏点)。
|
||
// id 为空串的点跳过(无效)。
|
||
QJsonArray collectScatterIds(const geopro::core::ScatterField& field, bool hide);
|
||
|
||
// 组装散点过滤请求体(M3,applyScatterFilter):
|
||
// {sourceDsObjectId, sourceVFieldCode, min, max}(字段名对照原版 applyScatterFilterInfo)。
|
||
QJsonObject buildScatterFilterBody(const QString& dsObjectId, const QString& vFieldCode,
|
||
double min, double max);
|
||
|
||
// 组装 measurement「另存为」请求体(M11,saveRawData,对照原版 saveRawDataValue):
|
||
// {dsId, operationType(1新增/0覆盖)},仅新增(operationType==1)才带 name。
|
||
QJsonObject buildSaveRawDataBody(const QString& dsId, int operationType, const QString& name);
|
||
|
||
// 直方图分箱结果(M3 数据过滤分布图):等宽 binCount 个箱,落在 [min,max] 区间内计数。
|
||
// binMin/binMax = 分箱区间端点(= 入参 min/max);step = 单箱宽度;counts[i] = 第 i 箱内点数。
|
||
// 边界归属:左闭右开 [lo,hi),末箱右闭以纳入恰等于 max 的点。
|
||
struct ScatterHistogram {
|
||
double binMin = 0.0;
|
||
double binMax = 0.0;
|
||
double step = 0.0;
|
||
std::vector<int> counts;
|
||
};
|
||
|
||
// 对 v 数组在 [min,max] 区间按 binCount 等宽分箱(M3,对照原版 D3 直方图 stepRange=20)。
|
||
// 非有限值(NaN/inf)跳过;区间外的点不计入;min>=max 或 binCount<=0 → counts 全 0。
|
||
ScatterHistogram buildScatterHistogram(const std::vector<double>& v, double min, double max,
|
||
int binCount);
|
||
|
||
// 行级显隐状态取反(M2,对照原版 updateStatus = record.displayStatus ? 0 : 1)。
|
||
// 入参/返回 0=显示、1=隐藏。当前显示(0) → 隐藏(1);当前隐藏(非0) → 显示(0)。
|
||
int toggledDisplayStatus(int currentStatus);
|
||
|
||
} // namespace geopro::app
|