gaozheng
|
0f521c5b24
|
feat(vtk): P1 复活中央渲染 — VtkSceneController + I3dSceneRepository + Scene加vtkProp
复活被 6241eb3 摘除的中央 VTK 数据驱动渲染:
- Scene 新增 addViewProp(vtkProp*):体绘制 vtkVolume(非 vtkActor)经此进场
- I3dSceneRepository(异步回调契约) + LocalSample3dRepository:dimensionOf 维度映射 /
loadVolume→VolumeGrid(std::array 去裸数组) / loadTerrainPaths;data 层零 VTK 依赖
- VtkSceneController(QObject) 取代 main.cpp 死掉的 rebuildCentral lambda + 裸 show* 标志:
勾选数据集/视图模式/图层/比例 → 经仓储取 core::* → I3dSceneView 重建场景;
QPointer+generation 守异步回调生命周期与新鲜度;inRebuild_ 避免同步路径双 render
- I3dSceneView 抽象解耦编排与 VTK(VtkSceneView 真实现 + 测试 fake)
- 删除被取代的 CentralScene;main.cpp 接线 对象勾选/2D-3D/图层/主题(主题 context 用 sceneCtrl 防悬垂)
- 新增测试 14(Scene/3d-repo/VtkSceneController),ctest 172/172 全绿
构建基建修复(本就潜在缺陷,任何 clean 构建/新人 checkout 都会撞):
- vcpkg.json 加 builtin-baseline:新版 vcpkg manifest 模式必需,否则全新 checkout 无法 configure
- build.bat 修 vswhere(VS2026 预览 -latest 恒空 → -all -prerelease -requires VC.Tools)
+ 括号块内路径变量加引号(防 Program Files (x86) 的 ) 提前闭合)
|
2026-06-15 21:01:26 +08:00 |
gaozheng
|
7007619bf2
|
feat(render): DEM 地形+影像贴图(spec ④) + dd_slice 交互切片
- TerrainActor(buildTerrain): GDAL 读 dem.tif(高程)+ image.tif(影像); DEM CRS→4326→
GeoLocalFrame 配准成 vtkStructuredGrid warp 面; 影像经 GDAL 读像素(行翻转正立)作纹理,
按经纬→EPSG:3857→像素 算纹理坐标贴图(影像/DEM 异源 CRS 重投影对位)。影像读失败→按高程上色。
离屏 verify_terrain_3d.png 核对: 卫星影像正立贴微起伏面、配准对位。+2 单测。
- 注: 影像须 GDAL 读(vtkTIFFReader 对此压缩 TIFF 报错"reading the row")。
- dd_slice: 3D「视图详情」加「切片」图层 = vtkImagePlaneWidget 在体素 image 拖切面(spec M1-b)。
- 接入 app: 3D 浮层五图层(帘面/体素/切片/地形); repo.demPath()/imagePath(); PROJ 不可用则禁用。
- vcpkg 加 gdal(连带 hdf5/netcdf/geos 等, 已缓存); 全 40 测试绿; app 构建干净。
- 注: 地形/切片 Z 基准与帘面/体素纵向夸张未统一(spec M-3 待办); dem 低分辨率→起伏细微。
|
2026-06-08 11:25:45 +08:00 |
gaozheng
|
d32cbbf7c4
|
feat(net): RSA 加密器(OpenSSL PKCS1v1.5+base64) + 捕获真实 RSA 公钥
- RsaEncryptor: EVP_PKEY 解析公钥(非法 PEM 抛异常) + PKCS#1 v1.5 加密 + base64; 3/3 测试过
- resources/rsa_public_key.pem: 用 Playwright route 注入 setPublicKey hook + 缓存绕过, 真登录捕获的 RSA-2048 公钥
- spec §8.3: RSA 公钥阻塞解除
- vcpkg.json: 加 openssl
|
2026-06-07 21:17:38 +08:00 |
gaozheng
|
4fdc6f7b86
|
feat(core): CrsTransform(PROJ 封装, UTM/WGS84/WebMercator 互转)
- RAII 管理 PJ_CONTEXT/PJ;normalize_for_visualization 统一轴序为 (x=经度/东, y=纬度/北)
- vcpkg 加 proj 依赖;core 链接 PROJ::proj(保持 core 纯净,无 Qt/VTK)
- 测试经 CMake gtest_discover_tests 注入 PROJ_DATA,ctest 开箱即用
- 修正用例期望值:UTM49N(516868) 实际经度约 111.16°E(中央经线 111°E);
WebMercator tfw 原点 114.16°E 在 49N 的 easting 约 825km,均与 PROJ 数据库一致
|
2026-06-07 20:06:37 +08:00 |
gaozheng
|
238faff56e
|
feat(core): LocalFrame 坐标系(原点偏移+东北轴向+Z基准)
|
2026-06-07 19:40:23 +08:00 |
gaozheng
|
85e4dbea56
|
spike(S3): VTK banded contour 管线跑通真实网格样本(图#18)
vtkImageData(规则栅格)->vtkDataSetSurfaceFilter->vtkBandedPolyDataContourFilter(GenerateContourEdges) 离屏渲染成功, 验证设计§4.3管线选型(B-1/B-2修正)。
颜色精确映射(colorBar非均匀值)留 render 层用 vtkColorTransferFunction 做。
|
2026-06-07 19:26:58 +08:00 |
gaozheng
|
acbc6d5b46
|
spike: 准备 S1 冒烟构建 + voxel 离线验证
- tools/validate_voxel.py: 两交叉剖面 IDW+maxDist 成体素, 切片可视化; 实证 105k 体素仅 15.9% 有约束(可信体需≥3线/3D网格)
- CMakeLists: VTK find_package 指定 COMPONENTS(VTK9 必需, 否则 VTK_LIBRARIES 空)
- vcpkg.json: 依赖按层递增, 当前仅 gtest(免 S1 被 GDAL/PROJ 拖慢)
|
2026-06-07 19:17:11 +08:00 |
gaozheng
|
c76461609a
|
build: 切换为方案②-修订(官方 MSVC Qt + 源码 VTK + vcpkg 仅非Qt依赖)
经双专家评审+实机勘验: 原装 D:\Qt\6.11.1 为 MinGW 版(MSVC 不可链), VTK 无 MSVC 预编译须源码编, VS18=14.51 链官方 Qt(v143) ABI 安全(新链旧)。
- vcpkg.json: 移除 qtbase/qttools/vtk/qtkeychain/qt-advanced-docking-system(凡依赖 Qt 者不走 vcpkg), 仅留非 Qt 依赖
- CMakeLists/CMakePresets: 官方 Qt 经 CMAKE_PREFIX_PATH, VTK 经 VTK_DIR(external/vtk-install), ADS/QtKeychain 走 FetchContent
- 设计 §11/K-8 + ENV_SETUP 改写为方案②-修订; external/ 加入 .gitignore
|
2026-06-07 18:28:30 +08:00 |
gaozheng
|
87eba2c5a3
|
scaffold: M1 工程骨架(CMake+vcpkg+分层目录+spike冒烟程序)
- 顶层 CMakeLists / CMakePresets / vcpkg.json(全 vcpkg, Qt+VTK[qt] 共用一份 Qt)
- .clang-format / .clangd / .editorconfig(AI 编码上下文基础设施, 规约 §10.1)
- src 分层目录(core/data/net/render/view/controller/app)+ 各层 README
- src/app: Qt+VTK 冒烟程序(锥体), 作 spike#1/#2 起点
- tests: gtest 冒烟 + ctest 接入
- README
|
2026-06-07 17:41:10 +08:00 |