feat/vtk-3d-view #7
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
#include "algo/VolumeBuilder.hpp" // core::PointSet / BuiltVolume / buildVolume(含 Field.hpp)
|
||||
#include "api/DatasetLoadHandles.hpp"
|
||||
#include "GprVolumeRepository.hpp" // createGprVolumeGrid(§6 接入:GPR 体直产)
|
||||
#include "model/ColorScale.hpp"
|
||||
#include "model/detail/DetailPayloads.hpp"
|
||||
#include "repo/IAsyncDatasetRepository.hpp"
|
||||
|
|
@ -38,11 +39,9 @@ DsDimension Api3dRepository::dimensionOf(const DsRow& ds) const {
|
|||
return DsDimension::Dim3D;
|
||||
}
|
||||
if (c == "dd_slice") return DsDimension::Analysis3D;
|
||||
// 足迹型(测线/各类轨迹) → 二维数据集:地面 lat/lon 序列,平铺进地图(spec §4.1/§4.2)。
|
||||
if (c == "dd_trajectory_data" || c == "dd_transient_electromagnetic_trajectory_data" ||
|
||||
c == "dd_radar_channel_trajectory" || c == "dd_radar_rtk_trajectory") {
|
||||
return DsDimension::Dim2D;
|
||||
}
|
||||
// 足迹型 → 二维数据集:地面 lat/lon 序列,平铺进地图。dd_trajectory_data = 统一通用轨迹
|
||||
// (数据字典 DD0623「保留」,已并入 dd_radar_rtk_trajectory);瞬变电磁/雷达通道/RTK 轨迹字典均「删除」。
|
||||
if (c == "dd_trajectory_data") return DsDimension::Dim2D;
|
||||
return DsDimension::Other;
|
||||
}
|
||||
|
||||
|
|
@ -121,6 +120,29 @@ std::string Api3dRepository::createVolume(const VoxelGenerateRequest& req) {
|
|||
return id;
|
||||
}
|
||||
|
||||
std::string Api3dRepository::createGprVolume(const std::string& lineDir,
|
||||
const std::string& linePrefix,
|
||||
const std::string& name, int coarse) {
|
||||
// 走 io::gpr 逐线管线(含线内通道插值)直接产体(抛异常透传给调用方)。
|
||||
VolumeGrid grid = geopro::data::createGprVolumeGrid(lineDir, linePrefix, coarse);
|
||||
// 简易灰度色阶(负→暗、零→灰、正→亮)覆盖体值域,使体素渲染可见。
|
||||
core::ColorScale scale;
|
||||
const double mid = 0.5 * (grid.vmin + grid.vmax);
|
||||
scale.addStop(grid.vmin, core::Rgba{20, 24, 40, 255});
|
||||
scale.addStop(mid, core::Rgba{140, 140, 150, 255});
|
||||
scale.addStop(grid.vmax, core::Rgba{235, 232, 220, 255});
|
||||
|
||||
const std::string id = "vol-" + std::to_string(++volumeCounter_);
|
||||
StoredVolume sv;
|
||||
sv.name = name;
|
||||
sv.createTime =
|
||||
QDateTime::currentDateTime().toString(QStringLiteral("yyyy-MM-dd HH:mm")).toStdString();
|
||||
sv.cachedGrid = std::move(grid); // 预填 → loadVolume 直接命中渲染(不走 mock IDW)
|
||||
sv.cachedScale = scale;
|
||||
volumes_[id] = std::move(sv);
|
||||
return id;
|
||||
}
|
||||
|
||||
const VoxelGenerateRequest* Api3dRepository::lastVoxelRequest(const std::string& dsId) const {
|
||||
const auto it = volumes_.find(dsId);
|
||||
return (it != volumes_.end() && it->second.request) ? &*it->second.request : nullptr;
|
||||
|
|
|
|||
|
|
@ -49,11 +49,9 @@ DsDimension LocalSample3dRepository::dimensionOf(const DsRow& ds) const {
|
|||
}
|
||||
// 切片:三维分析栏。
|
||||
if (c == "dd_slice") return DsDimension::Analysis3D;
|
||||
// 足迹型(测线/各类轨迹):二维数据集(与 Api3dRepository 同口径)。
|
||||
if (c == "dd_trajectory_data" || c == "dd_transient_electromagnetic_trajectory_data" ||
|
||||
c == "dd_radar_channel_trajectory" || c == "dd_radar_rtk_trajectory") {
|
||||
return DsDimension::Dim2D;
|
||||
}
|
||||
// 足迹型 → 二维数据集。dd_trajectory_data = 统一通用轨迹(数据字典 DD0623「保留」,已并入
|
||||
// dd_radar_rtk_trajectory);瞬变电磁/雷达通道/RTK 等轨迹型字典均标「删除」,不再单列。
|
||||
if (c == "dd_trajectory_data") return DsDimension::Dim2D;
|
||||
return DsDimension::Other;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,12 +36,13 @@ TEST(LocalSample3dRepo, DimensionOfMapsDdCode) {
|
|||
EXPECT_EQ(repo.dimensionOf(rowWith("dd_section")), DsDimension::Dim3D);
|
||||
EXPECT_EQ(repo.dimensionOf(rowWith("dd_inversion_data")), DsDimension::Dim3D);
|
||||
EXPECT_EQ(repo.dimensionOf(rowWith("dd_slice")), DsDimension::Analysis3D);
|
||||
// 足迹型 → 二维:数据字典 DD0623 只 dd_trajectory_data 为统一通用轨迹「保留」;
|
||||
// 瞬变电磁/雷达通道/RTK 等轨迹型字典均「删除」→ 不再归 2D(落 Other)。
|
||||
EXPECT_EQ(repo.dimensionOf(rowWith("dd_trajectory_data")), DsDimension::Dim2D);
|
||||
// 足迹型(各类轨迹) → 二维(spec §4.1)。
|
||||
EXPECT_EQ(repo.dimensionOf(rowWith("dd_transient_electromagnetic_trajectory_data")),
|
||||
DsDimension::Dim2D);
|
||||
EXPECT_EQ(repo.dimensionOf(rowWith("dd_radar_channel_trajectory")), DsDimension::Dim2D);
|
||||
EXPECT_EQ(repo.dimensionOf(rowWith("dd_radar_rtk_trajectory")), DsDimension::Dim2D);
|
||||
DsDimension::Other);
|
||||
EXPECT_EQ(repo.dimensionOf(rowWith("dd_radar_channel_trajectory")), DsDimension::Other);
|
||||
EXPECT_EQ(repo.dimensionOf(rowWith("dd_radar_rtk_trajectory")), DsDimension::Other);
|
||||
EXPECT_EQ(repo.dimensionOf(rowWith("dd_unknown_xyz")), DsDimension::Other);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue