geopro/src/app/panels/chart/ScatterDataOps.hpp

63 lines
3.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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/vv==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);
// 收集「显示/隐藏」要持久化的点 idM1
// hide=true → 收集当前可见(displayStatus==0)的点 id原版隐藏全部已选/可见点)。
// hide=false → 收集当前隐藏(displayStatus!=0)的点 id原版显示全部已隐藏点
// id 为空串的点跳过(无效)。
QJsonArray collectScatterIds(const geopro::core::ScatterField& field, bool hide);
// 组装散点过滤请求体M3applyScatterFilter
// {sourceDsObjectId, sourceVFieldCode, min, max}(字段名对照原版 applyScatterFilterInfo
QJsonObject buildScatterFilterBody(const QString& dsObjectId, const QString& vFieldCode,
double min, double max);
// 组装 measurement「另存为」请求体M11saveRawData对照原版 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/maxstep = 单箱宽度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