gaozheng
|
f14902cdd4
|
feat(ui): GridDataChartView 接入 QwtPlot+ContourPlotItem(真实比尺,白底,色阶条)
plotArea 占位换 QwtPlot(仿 RawDataChartView: 白底浅 palette, x 轴 xBottom/y 轴 yLeft,
LivePanner 实时平移, Magnifier setWheelFactor(1/0.9), QwtPlotRescaler ref=xBottom
aspect=1 真实比尺; 网格线/过原点零线省去, 被填充覆盖)。色阶占位换 ColorBarWidget。
setGridData: 建 ColorMapService(gridScale) + ContourPlotItem.setData → attach,
按数据 bbox setAxisScale + rescale + replot, 更新色阶条与底部异常表。
工具条「显示异常/显示等值线标注」复选框 → 切 ContourPlotItem 开关并 replot。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-11 17:00:36 +08:00 |
gaozheng
|
32e0aaec28
|
feat(ui): ContourPlotItem 网格填充栅格热力图 + 矢量等值线/标注/异常叠加
QwtPlotItem(非 Q_OBJECT)。填充用预渲染 ARGB32 QImage(每格细分 K=4,
双线性插值, 离散色带取色 → 平滑填充带边界; 含 NaN 格的像素透明 → 不规则白边),
draw 时按数据 bbox 映射目标矩形 blit + SmoothPixmapTransform(拖动/缩放快)。
等值线复用 buildContourBands 的 lines(矢量), 黑 cosmetic 细线;
level 由线上代表点采网格值吸附最近色阶级回填(管线恒 0), 沿线方向旋转标注(字号10)。
异常按 markType 画 点(方块)/线(折线)/面(闭合多边形), lineColor + dashed->虚线。
x 轴绑 xBottom, y 轴绑 yLeft。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-11 17:00:22 +08:00 |
gaozheng
|
bac0a198ff
|
feat(ui): 网格数据懒加载接线(控制器 gridReady + 页签首次激活触发)
DatasetDetailController 新增 GridData 内嵌结构 + loadGridData slot
(busy 守卫, 仅 dd_inversion_data; 拉 rows+色阶type2+异常) + gridReady 信号。
buildTabbedPanel 暴露 tabGroup 供调用方监听页签切换。
DatasetDetailPage 在「网格数据」页签首次激活且未加载时 emit gridDataNeeded;
setGridData 转发给 GridDataChartView 并标记已加载(切 ds 重置)。
DatasetDetailPanel 透传 gridDataNeeded / 按 dsId 路由 setGridData。
main.cpp 接线 gridDataNeeded->loadGridData, gridReady->setGridData。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-11 17:00:07 +08:00 |
gaozheng
|
e54a28e571
|
perf(ui): 原数据加载严格对齐原版只拉散点+色阶2个(异常随网格懒加载)
|
2026-06-11 16:41:56 +08:00 |
gaozheng
|
1054c227e1
|
perf/fix(ui): 详情懒加载(双击只拉散点~0.8s,网格4s推迟) + 实时拖动平移(LivePanner替换像素抓取) + 横纵网格线
|
2026-06-11 16:33:35 +08:00 |
gaozheng
|
525c123211
|
feat(ui): 原数据散点锁定 x:y 真实比尺(QwtPlotRescaler aspect=1, Expanding)
|
2026-06-11 16:14:37 +08:00 |
gaozheng
|
cf47314500
|
fix(ui): 散点 滚轮缩放方向反转(上滚=放大)+放开最小宽度(随面板收缩) + 色阶条居中74%宽(非满宽,对齐原版)
|
2026-06-11 16:09:00 +08:00 |
gaozheng
|
1f28505227
|
fix(ui): 原数据散点 白底+散点项关联xTop轴(修x压缩)+过原点零线 + 色阶条等宽色带/深色文字/白底
|
2026-06-11 15:55:32 +08:00 |
gaozheng
|
e405fc1565
|
feat(ui): 原数据散点视图(QwtPlot x顶轴+Panner/Magnifier+连续色阶+方块散点+独立色阶条)
- ColorBarWidget:独立 QWidget 色阶条,水平离散色带 + 断点刻度,固定高 36px,
作为 QwtPlot 兄弟 widget 布局在图表下方,不进 Qwt 坐标系(不随缩放移动)。
- ScatterPlotItem:QwtPlotItem 子类,每点画固定 7px 方块(kHalfSide=3.5px),
白色描边(1px),颜色由 ColorMapService::colorAtContinuous 连续插值决定。
- RawDataChartView:plotArea 换成 QwtPlot,x 轴顶部(xTop)、关闭 xBottom、yLeft 正常;
QwtPlotPanner(左键拖动平移)+ QwtPlotMagnifier(滚轮缩放);
setData 时重建 ColorMapService + ScatterPlotItem,按数据包围盒设轴范围;
独立色阶条随 setData 更新。
|
2026-06-11 15:40:43 +08:00 |
gaozheng
|
c7fec86d3b
|
feat(core+chart): ColorScale::stops() 暴露断点 + ColorMapService 连续插值色阶服务
- core::ColorScale 新增 stops() 方法,返回升序 (value, Rgba) 断点列表,供连续插值用。
- app::ColorMapService:从 ColorScale 构建,支持 normalized()/colorAtContinuous()/colorAtDiscrete();
连续模式在归一化断点位置间线性插值 RGB,与原版 Plotly colorscale 一致。
- cmake/qwt.cmake 补加 QWT_MOC_INCLUDE=1,修复 Qwt AUTOMOC self-include 宏保护缺失导致
Q_OBJECT MOC 代码不编入 .obj 的链接错误(LNK2019 x61 系列)。
- 新增 TDD 测试 ColorMapService.*(4 个用例,全绿)。
|
2026-06-11 15:40:27 +08:00 |
gaozheng
|
7808b8422a
|
feat(ui): 数据集详情三层UI骨架(下划线页签+原数据/网格各自工具条+网格页底部异常列表/描述)
- 新建 DescriptionPanel:只读 QTextEdit,供网格数据底部「描述」页签使用
- 新建 RawDataChartView:工具条(网格/色阶配置/图形类型ComboBox/另存为) + 图表占位(stretch) + 色阶占位(36px)
- 新建 GridDataChartView:工具条(网格/色阶配置/白化/滤波/显示开关/简化容差滑块/异常标注/自动标注/另存为) + 图表占位(stretch) + 色阶占位(36px) + 底部200px双页签(异常列表/描述)
- 重写 DatasetDetailPage:用 buildTabbedPanel 做「原数据/网格数据」下划线页签 + 右侧「导出」HeaderAction
- 删除 DatasetChartView(已被 RawDataChartView/GridDataChartView 替代)
- CMakeLists:注册新 .cpp,移除 DatasetChartView,条件链接 qwt 目标
|
2026-06-11 15:04:34 +08:00 |
gaozheng
|
e0c36e3600
|
docs(plan): 二维图表返工实现计划 v2(QwtPlot 三层分离,9步对照验收)
|
2026-06-11 14:54:57 +08:00 |
gaozheng
|
b772b5a169
|
build(qwt): 集成 Qwt 6.2 静态库(cmake/qwt.cmake 对接官方Qt6,绕开qmake/vcpkg) + 冒烟用例 + 返工方案文档
二维图表返工前置:QwtPlot 作科学图表框架。源码 external/qwt-src(gitignore)按 ENV_SETUP 拉取。
|
2026-06-11 14:47:19 +08:00 |
gaozheng
|
82b654176e
|
fix(ui): 审查修复 loadFailed接线/控制器重入守卫+ddCode降级/散点越界/点异常/Tab deleteLater/makeLines
- main.cpp: DatasetDetailController::loadFailed 连接到 statusBar,5s 显示失败消息
- DatasetDetailController: 加 busy_ 重入守卫;ddCode 非 dd_inversion_data 时直接 loadFailed 降级
- DatasetChartView::showScatter: 按 x/y/v 三者最短长度循环,防越界;加 #include <algorithm>
- DatasetChartView::rebuildAnomalyItems: 先处理 markType==1 点异常(小方块),再走原折线/多边形分支
- DatasetChartView::clearChart: 加注释说明 scene_->clear() + anomalyItems_.clear() 不变式
- DatasetDetailPanel: tabCloseRequested 改用 deleteLater,避免在事件处理期间同步析构
- ContourBands: buildContourBands 按 opt.makeLines 决定是否开 GenerateContourEdgesOn 及提取等值线
|
2026-06-11 12:42:04 +08:00 |
gaozheng
|
548895bdcf
|
test(controller): DatasetDetailController chartReady/loadFailed 编排
|
2026-06-11 12:22:37 +08:00 |
gaozheng
|
08ba483550
|
feat(ui): 接线数据详情面板(移除旧VTK详情)+单击聚焦/双击打开/反向联动
- 移除旧 VTK 数据详情 dock(detailWidget/独立 renderer/工具条 原数据·网格数据·显示异常/电极/等值线)
及 rebuildDetail lambda、共享态(currentDsId/detailMode/showAnomalies/...)与相关连接
- 清理因删除产生的孤儿:animateReveal、DetailMode、kScatterPointSize、kBarBtnQss
- 新建 DatasetDetailPanel 多 Tab 面板 dock(QGraphicsView 平面图表)
- buildWorkbench 加参 DatasetDetailController&;main() 构造 ApiDatasetRepository + DatasetDetailController
- 单击=属性表单+聚焦已开页;双击=openDataset(dsId,ddCode);chartReady→openOrUpdate;
focusRequested→focusDataset;activeDatasetChanged→反向高亮列表
- 新增 kDsDdCodeRole(0x0104),populateDatasetList 写入 ddCode
- 保留 rebuildCentral 及中央场景、repo.loadGrid(grid1)
|
2026-06-11 12:18:18 +08:00 |
gaozheng
|
88d2fea9df
|
feat(ui): DatasetDetailPanel 多Tab壳(按dsId去重+反向联动信号)
|
2026-06-11 12:09:38 +08:00 |
gaozheng
|
b8c74962e8
|
feat(ui): DatasetDetailPage 原数据/网格切换+叠加开关+异常联动
|
2026-06-11 12:08:13 +08:00 |
gaozheng
|
535db496c4
|
feat(ui): AnomalyTablePanel ds级异常表(行眼睛→隐藏集信号)
|
2026-06-11 12:07:06 +08:00 |
gaozheng
|
d61775a3bc
|
feat(controller): DatasetDetailController 编排 + ErtInversionStrategy 标识
|
2026-06-11 12:04:12 +08:00 |
gaozheng
|
46c75ed419
|
feat(ui): dd 图表策略接口 + 注册表(未注册降级)
|
2026-06-11 12:01:31 +08:00 |
gaozheng
|
facb812bca
|
feat(ui): DatasetChartView 散点/等值面/异常叠加(QGraphicsView)
|
2026-06-11 11:57:49 +08:00 |
gaozheng
|
3192cf24cf
|
feat(data): ApiDatasetRepository 接真实 API + loadScatterColorScale 提到接口
|
2026-06-11 11:52:05 +08:00 |
gaozheng
|
e1bbf39d6d
|
feat(data): DatasetChartDto 解析 inversion网格/散点/colorBar/异常
|
2026-06-11 11:50:08 +08:00 |
gaozheng
|
00c42f7a8d
|
feat(render): ContourBands NaN 凸包裁剪(剔除无效quad)+等值线DP简化
|
2026-06-11 11:41:26 +08:00 |
gaozheng
|
b7e0a2034d
|
feat(render): ContourBands 双线性上采样+盒式平滑预处理(对齐 web 2x+smooth)
|
2026-06-11 11:39:05 +08:00 |
gaozheng
|
f1ad490096
|
feat(render): ContourBands 从 VTK banded 提取色带多边形+等值线几何
|
2026-06-11 11:37:09 +08:00 |
gaozheng
|
179f46b42c
|
feat(core): Grid 增 NaN 约定 + hasValue(凸包裁剪用)
|
2026-06-11 11:34:11 +08:00 |
gaozheng
|
467dbb3841
|
chore(scripts): 本地构建/测试封装(vcvars+VS cmake/ctest, build/release)
|
2026-06-11 11:30:52 +08:00 |
gaozheng
|
29cef952fe
|
docs(plan): 数据集详情视图改造实现计划(TDD,7 阶段)
|
2026-06-11 11:16:45 +08:00 |
gaozheng
|
e2c8fccbde
|
docs(spec): 数据集详情视图改造为平面图表(QGraphicsView,源码级复刻 web)
- 详情 dock 从 VTK 渲染换为本地面板+平面图表,并真正接上数据集选择
- 散点=Plotly scattergl 方块(客户端用 QGraphicsRectItem 复刻输出)
- 网格等值面=自制 marching-squares 引擎;采用 VTK+预处理混合方案(~95%)
上采样2x+平滑+banded+NaN凸包裁剪+等值线简化
- 真实 API:getErtRawDataScatterGraph/inversion·rows/colorGradation/queryException
- dd 类型驱动的图表策略框架,首版落地 dd_inversion_data
- 异常归属辨析:右上对象异常(地图)与详情底部异常表(图表)并存
- 复用 core::Grid/ScatterField/ColorScale/Anomaly + 现有 GridContourActor 管线
|
2026-06-11 10:52:05 +08:00 |
gaozheng
|
012abcf423
|
Merge pull request 'feat/object-selection-panels' (#4) from feat/object-selection-panels into main
Reviewed-on: https://gitea.geomative.cn/gaozheng/geopro/pulls/4
|
2026-06-10 21:33:30 +08:00 |
gaozheng
|
b7fbb0457c
|
清理重复文件
|
2026-06-10 21:33:07 +08:00 |
gaozheng
|
72abeaa1d8
|
fix(ui): 修复 DynamicFormView::clear() 对嵌套布局重复释放导致的崩溃
it==it->layout()(QLayout 即 QLayoutItem),原代码 delete sub 后又 delete it 双重释放。
触发:clear 一个已填充表单时(切项目/重选对象→showMessage/setForm)崩溃。
|
2026-06-10 21:31:00 +08:00 |
gaozheng
|
3daaad3de3
|
fix(controller): setCheckedTms busy 时挂起重放(不丢弃) + 切项目清 currentParentId/挂起态
|
2026-06-10 21:22:39 +08:00 |
gaozheng
|
d435fca32d
|
feat(ui): 属性面板改两列卡片式表单(边框/底色/分隔线,主题协调)
|
2026-06-10 21:18:12 +08:00 |
gaozheng
|
7a56e49584
|
feat(ui): 接线 对象单击/勾选/数据集单击 → 三面板(移除占位)
|
2026-06-10 21:04:38 +08:00 |
gaozheng
|
0d17a00931
|
fix(ui): 对象树项目根设为非交互容器(仅 GS/TM 可勾选/单击)
|
2026-06-10 20:58:09 +08:00 |
gaozheng
|
68296a5d36
|
feat(ui): ObjectTreePanel GS三态勾选 + objectClicked/checkedTmsChanged 合并发射
|
2026-06-10 20:50:51 +08:00 |
gaozheng
|
595d65cd3b
|
feat(ui): ObjectExceptionPanel 异常+异常体只读树(含详情展开)
|
2026-06-10 20:44:25 +08:00 |
gaozheng
|
5686155faa
|
feat(ui): DynamicFormView 动态表单分组键值渲染器
|
2026-06-10 20:36:03 +08:00 |
gaozheng
|
6cf53ab199
|
fix(controller): 无条件清异常缓存(跨空间) + 移动语义 + 信号参数正名
|
2026-06-10 20:29:46 +08:00 |
gaozheng
|
8cab498f81
|
feat(controller): selectObject/setCheckedTms/selectDataset 编排 + 异常缓存
|
2026-06-10 20:22:09 +08:00 |
gaozheng
|
4621e11c73
|
feat(data): 仓储泛化 loadRows + 对象/数据集详情 + 按TM异常 接口实现
|
2026-06-10 20:15:00 +08:00 |
gaozheng
|
a21d392816
|
feat(data): groupExceptionsByConsortium 按异常体分组 + 独立异常
|
2026-06-10 20:09:37 +08:00 |
gaozheng
|
acf71bdaef
|
feat(data): parseExceptions 映射异常字段 + 详情摘要
|
2026-06-10 20:03:28 +08:00 |
gaozheng
|
0018c11e0a
|
feat(data): parseDynamicForm 合并动态表单字段定义与值(含排序)
|
2026-06-10 19:56:55 +08:00 |
gaozheng
|
37300d523e
|
docs(plan): 对象单击/勾选驱动三面板 实现计划(TDD,10 任务)
|
2026-06-10 19:48:22 +08:00 |
gaozheng
|
c3cedd8c2a
|
docs(spec): 异常面板纳入异常体只读树(对象→异常体→异常+独立异常),详情展开做/眼睛推迟
|
2026-06-10 19:38:29 +08:00 |
gaozheng
|
8ac5f33c7f
|
docs(spec): 对象单击/勾选驱动 数据列表·异常·属性 三面板(接真实API)设计
|
2026-06-10 19:27:32 +08:00 |