geopro/src/core/model/detail/DetailPayloads.hpp

120 lines
4.8 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 <QMetaType>
#include <QString>
#include "model/Field.hpp"
#include "model/ColorScale.hpp"
#include "model/Anomaly.hpp"
// 详情渲染载荷(纯数据,跨 QVariant 类型擦除传递)。无 Qt-widget 依赖。
// 命名空间 geopro::core与同目录 Field.hpp/ColorScale.hpp 一致)。
namespace geopro::core {
// 下拉项:字段码 + 显示名measurement 工具条 x/y/v/method 下拉驱动code 可空如 method
struct FieldOption {
QString code;
QString name;
};
// measurement 散点工具条配置(来自服务端 scatterGraphConf反演留空 → 视图渲染反演工具条)。
// x/y/v/method 为各下拉的可选项(含 fieldCode+namedefaultX/Y/V/Method 为默认选中项的
// fieldCodemethod 的 fieldCode 全为 null故 defaultMethod 用 name。empty() 判定走 x 是否为空。
struct ScatterToolbarConf {
std::vector<FieldOption> x, y, v, method;
QString defaultX, defaultY, defaultV, defaultMethod;
bool empty() const { return x.empty(); }
};
// 散点载荷:反演原数据 / measurement 散点共用(≈ data::ChartParts
// 两者上色一致——按数据 min/max 连续插值Plotly cauto含负异常值RawDataChartView 据 v
// 有限值 min/max 设 setDataRange。verticalLegend=truemeasurement时色阶图例画在右侧竖条
// 离散带1323→0 自上而下对齐原版false默认反演原数据时画在底部横条。
// toolbar 非空measurement时视图渲染 measurement 工具条altX*/altY* 为 x/y 下拉本地重绘
// 用的备选列(平距/斜距、伪深度/伪深度+高程),与 scatter.v/.a... 同序、一一对应,避免再发请求。
struct ScatterPayload {
geopro::core::ScatterField scatter;
geopro::core::ColorScale scale;
bool verticalLegend = false;
ScatterToolbarConf toolbar;
std::vector<double> altXHorizontal, altXSlope; // x 下拉:平距 / 斜距
std::vector<double> altYPseudo, altYElevationPseudo; // y 下拉:伪深度 / 伪深度+高程
};
// 等值面载荷grid(rows) + 色阶 + 异常(≈ data::GridParts
// Grid 无默认构造,给占位初始化以满足 QVariant 对默认可构造的要求。
struct ContourPayload {
geopro::core::Grid grid{1, 1};
geopro::core::ColorScale scale;
std::vector<geopro::core::Anomaly> anomalies;
};
// 列渲染种类Text=预格式化文本默认Toggle=每行开关蓝色药丸开关ON=可见)。
enum class TableColumnKind { Text, Toggle };
// 通用表格列定义。
struct TableColumn {
QString code;
QString title;
int width = 0;
int sort = 0;
TableColumnKind kind = TableColumnKind::Text;
};
// 通用表格载荷:列定义 + 预格式化的行(每格 QString+ 总数(分页用)。
struct TablePayload {
std::vector<TableColumn> columns;
std::vector<std::vector<QString>> rows;
int total = 0;
};
// 柱状图系列:名称(图例/legend+ 各类目的 y 值 + 填充色hex如 #5470c6数据色两主题一致
struct BarSeries {
QString name;
std::vector<double> values;
QString color;
};
// 柱状图载荷dd_ert_measurement_gr_data 接地电阻类目x 轴标签,如 "#1".."#40"+
// 一个或多个系列P1/P2每系列一组按类目对齐的 y 值)+ 轴标题。
struct BarPayload {
std::vector<QString> categories;
std::vector<BarSeries> series;
QString xTitle;
QString yTitle;
};
// 折线图载荷dd_trajectory_data 高程页签):单条平滑折线。
// 类目x 轴标签,如 "#1".."#40",来自 electrodeNo+ 对齐的 y 值(高程)+ 系列名 + 线色hex
// 如 #5470c6ECharts 默认蓝,两主题一致)+ 轴标题x「电极号」/ y「高程」+ 是否平滑。
struct LinePayload {
std::vector<QString> categories;
std::vector<double> y;
QString seriesName;
QString color;
QString xTitle;
QString yTitle;
bool smooth = true;
};
// 轨迹地图点dd_trajectory_data 地图页签):电极号 + WGS84 经纬度。
// 服务端 dd/ert/trajectory/line 直接返回 EPSG:4326 经纬x=经度 lon、y=纬度 lat
struct MapPoint {
int electrodeNo = 0;
double lon = 0;
double lat = 0;
};
// 轨迹地图载荷:一组电极经纬点(按电极号顺序)。视图据此在 Leaflet 上画橙色空心圈标记。
struct MapPayload {
std::vector<MapPoint> points;
};
} // namespace geopro::core
Q_DECLARE_METATYPE(geopro::core::ScatterPayload)
Q_DECLARE_METATYPE(geopro::core::ContourPayload)
Q_DECLARE_METATYPE(geopro::core::TablePayload)
Q_DECLARE_METATYPE(geopro::core::BarPayload)
Q_DECLARE_METATYPE(geopro::core::LinePayload)
Q_DECLARE_METATYPE(geopro::core::MapPayload)