14 KiB
14 KiB
3D项目创建
**本文引用的文件** - [DialNew3DTask.cpp](file://cpp/Views/DialNew3DTask.cpp) - [DialNew3DTask.h](file://h/DialNew3DTask.h) - [TaskDataOper.h](file://h/TaskDataOper.h) - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp) - [DialTaskManager.cpp](file://cpp/Views/DialTaskManager.cpp) - [DialCreateNew3DSpt.cpp](file://cpp/Views/DialCreateNew3DSpt.cpp) - [DialCreateNew3DSpt.h](file://h/DialCreateNew3DSpt.h) - [Script3D.cpp](file://cpp/ProblemZone/Script3D.cpp) - [GeoMative.rc](file://GeoMative.rc) - [Resource.h](file://Resource.h)目录
简介
本文件系统性地文档化Geomative Studio中“3D项目创建”流程,重点覆盖:
- 三维网格信息(X/Y方向电极数量、电极步长、电极间距等)的配置与来源
- DialNew3DTask对话框如何基于选定的测试脚本自动计算并展示网格尺寸信息
- 三维测量中电缆布线方式的特殊要求与适配
- 发射周期、迭代次数等通用参数的继承与适配策略
- 三维测量任务参数结构体(ST3DTaskParam)与数据库存储的映射关系
- 任务创建成功后的ID返回机制
项目结构
围绕3D项目创建的关键文件组织如下:
- 视图层:DialNew3DTask(3D任务创建对话框)、DialCreateNew3DSpt(3D脚本创建对话框)
- 操作层:TaskDataOper(任务数据操作,含Create3DTask)
- 脚本层:Script3D(脚本信息查询与展示)
- 资源与控件:GeoMative.rc、Resource.h(包含3D相关控件ID)
graph TB
subgraph "视图层"
DNT["DialNew3DTask<br/>3D任务创建对话框"]
DCNS["DialCreateNew3DSpt<br/>3D脚本创建对话框"]
end
subgraph "操作层"
TDO["CTaskDataOper<br/>任务数据操作"]
end
subgraph "脚本层"
S3D["CScript3D<br/>脚本信息查询"]
end
subgraph "资源与控件"
RC["GeoMative.rc<br/>资源定义"]
RH["Resource.h<br/>控件ID常量"]
end
DNT --> TDO
DCNS --> S3D
DNT --> RC
DNT --> RH
DCNS --> RC
DCNS --> RH
图表来源
章节来源
核心组件
- DialNew3DTask:负责3D任务创建的用户交互,包括测试方式、装置类型、脚本选择、电缆布线方式、发射周期、采样间隔、迭代次数等,并将参数封装为ST3DTaskParam后交由CTaskDataOper执行创建。
- CTaskDataOper:提供Create3DTask接口,完成数据库插入、生成任务ID、写入td与tdchannel表、导入脚本点位信息等。
- CScript3D:提供脚本查询能力,用于获取脚本的Rect、PoleStep、PoleDistance、LineDirection等网格与布线相关信息。
- DialCreateNew3DSpt:3D脚本创建对话框,承载X/Y网格大小、电极间距、迭代数、电缆方向等输入与绘制预览。
- 资源与控件:通过GeoMative.rc与Resource.h定义3D相关控件ID,确保UI一致性。
章节来源
- DialNew3DTask.h
- TaskDataOper.h
- TaskDataOper.cpp
- Script3D.cpp
- DialCreateNew3DSpt.h
- GeoMative.rc
- Resource.h
架构总览
下图展示了3D任务创建从UI到数据库的端到端流程。
sequenceDiagram
participant 用户 as "用户"
participant DNT as "DialNew3DTask"
participant TDO as "CTaskDataOper"
participant DB as "数据库"
participant S3D as "CScript3D"
用户->>DNT : 选择测试方式/装置/脚本/布线方式/周期/采样间隔/迭代次数
DNT->>S3D : 查询脚本网格信息(Rect/PoleStep/PoleDistance/LineDirection)
S3D-->>DNT : 返回网格尺寸与步长/间距/方向
DNT->>DNT : 自动计算并显示网格信息
DNT->>TDO : Create3DTask(ST3DTaskParam, TaskCN)
TDO->>DB : 插入td表(含Rect/RectLoc/Espace/Edistance/Clayout等)
TDO->>DB : 插入tdchannel表
TDO->>DB : 批量导入脚本3D点位到td3dcon
TDO-->>DNT : 返回新任务ID
DNT-->>用户 : 创建成功并返回任务ID
图表来源
章节来源
详细组件分析
DialNew3DTask:3D任务创建对话框
-
功能要点
- 测试方式、装置类型、脚本、布线方式、发射周期、采样间隔、迭代次数等参数收集
- 基于脚本查询自动填充网格尺寸(X/Y方向电极数量、步长、间距、方向)
- 将参数封装为ST3DTaskParam并调用CTaskDataOper::Create3DTask
- 成功后返回新任务ID并在任务管理器中使用
-
关键逻辑路径
- 脚本选择事件:OnSelchangeCombo3dScript
- 通过QuerySptRectByARandSCname获取Rect、PoleStep、PoleDistance、LineDirection
- 解析并填充m_rcGridSize、m_fXElecStep、m_fYElecStep、m_fXElecDistance、m_fYElecDistance、m_byLineDirection
- 更新界面显示网络尺寸(X: right+1, Y: bottom+1)
- OK事件:OnOK
- 参数校验(步长、任务名、测试方式、布线方式、迭代次数、发射周期、采样间隔)
- 组装ST3DTaskParam并调用Create3DTask
- 记录新任务ID并返回
- 脚本选择事件:OnSelchangeCombo3dScript
-
三维网格参数映射
- X/Y方向电极数量:来自Rect解析后的right、bottom加一
- 电极步长:来自PoleStep(X、Y方向)
- 电极间距:来自PoleDistance(X、Y方向)
- 测线方向:来自LineDirection(0:X方向,1:Y方向)
章节来源
CTaskDataOper:3D任务创建与数据库映射
-
Create3DTask流程
- 查询脚本基础信息(Eamount、TPamount、Rect、RectLoc、PoleStep、PoleDistance、CN、LineDirection)
- 生成任务CN并开启事务
- 插入td表(含TDname、TDCN、Tlocation、TZID、SCID、SCCN、Sname、Stype、Ttype、Eamount、TPamount、CHamount、N、TRwave、TRfrequency、SAfrequency、Clayout、SkipCable、Espace、Edistance、rect、rect_loc、Cdate、Ctime、DESN、STime、ETime、TTimer、TdStatus、TestGRFlag、LineDirection、CreateTime)
- 插入tdchannel表(TDID、CHnumber、AR)
- 批量导入脚本3D点位到td3dcon
- 提交事务并返回任务ID
-
数据库字段与ST3DTaskParam映射要点
- ST3DTaskParam中的iSptID、iSptType、iTestType、iAR、iCableLayout、iStacking、iTxWave、iTxPeriod、iSAInterval、ucTestGRFlag等直接映射到td表对应字段
- 脚本查询返回的Rect、PoleStep、PoleDistance、LineDirection写入td表的rect、rect_loc、Espace、Edistance、LineDirection
- 任务ID通过查询td表最大ID返回
章节来源
DialCreateNew3DSpt:3D脚本创建与网格输入
-
功能要点
- 输入X/Y网格大小、电极间距、迭代数、电缆方向等
- 初始化绘图板,根据输入更新X/Y电极数量、间距,并重绘
- 支持不同测量方法与装置类型的组合显示
-
关键参数
- m_uiXGridSize、m_uiYGridSize:X/Y方向电极数量
- m_fXPoleDistance、m_fYPoleDistance:X/Y方向电极间距
- m_uiIterationNumber:迭代次数
- m_comCableDirection:电缆方向(X或Y)
章节来源
3D脚本信息查询(CScript3D)
- 作用:提供脚本Rect、PoleStep、PoleDistance、LineDirection等信息,供DialNew3DTask自动计算网格尺寸
- 影响:直接影响DialNew3DTask对话框中网格尺寸的显示与验证
章节来源
3D任务参数结构体(ST3DTaskParam)与数据库映射
- 结构体字段(节选)
- strTDName、strTestPlace、iTestType、iCableLayout、iAR、iSptID、strSptName、iSptType、iSkipCable、iStacking、iTxWave、iTxPeriod、iSAInterval、ucTestGRFlag
- 数据库存储映射
- td表字段与ST3DTaskParam字段一一对应,包括但不限于:Ttype、Clayout、N、TRwave、TRfrequency、SAfrequency、Espace、Edistance、rect、rect_loc、LineDirection、TestGRFlag、CreateTime等
- 任务ID返回
- 通过查询td表的最大ID返回新任务ID
章节来源
DialTaskManager:参数继承与适配
- 在任务类型选择为3D时,DialTaskManager从DialNew3DTask读取参数并写入任务参数结构
- 关键参数继承
- 测试类型、发射周期、脚本ID、装置类型、布线方式、采样间隔、迭代次数
- 三维特有的电极步长、电极间距、网格尺寸、测线方向也从DialNew3DTask传递
章节来源
依赖分析
- DialNew3DTask依赖TaskDataOper进行脚本查询与任务创建
- TaskDataOper依赖数据库连接与ADO Recordset进行数据持久化
- DialCreateNew3DSpt与DialNew3DTask共同影响最终的网格与布线参数
- 资源文件GeoMative.rc与Resource.h为3D相关控件提供ID与布局
graph LR
DNT["DialNew3DTask"] --> TDO["CTaskDataOper"]
DNT --> S3D["CScript3D"]
DCNS["DialCreateNew3DSpt"] --> DNT
TDO --> DB["数据库"]
RC["GeoMative.rc"] --> DNT
RH["Resource.h"] --> DNT
图表来源
章节来源
性能考量
- 脚本查询与数据库访问
- DialNew3DTask在脚本切换时进行一次脚本信息查询,建议避免频繁重复查询
- TaskDataOper在Create3DTask中使用事务,减少多次提交带来的开销
- 网格尺寸计算
- 仅基于脚本返回的Rect/PoleStep/PoleDistance/LineDirection进行简单解析与显示,复杂度低
- UI更新
- DialCreateNew3DSpt在参数变化时触发重绘,建议在大量参数变更时合并更新以降低刷新频率
[本节为通用指导,无需特定文件引用]
故障排查指南
- 步长为空或格式错误
- 现象:OnOK中对步长进行非空与范围校验,若为空或越界会弹窗提示
- 处理:检查脚本PoleStep格式(X,Y),确保输入合法
- 任务名为空
- 现象:必填项校验失败
- 处理:填写任务名称后重试
- 测试方式/布线方式/脚本未选择
- 现象:必选项未选择导致校验失败
- 处理:按提示选择相应项
- 迭代次数越界
- 现象:范围校验失败
- 处理:将迭代次数调整至1~255范围内
- 发射周期未选择(电阻率/激电)
- 现象:测试方式切换时周期控件启用状态变化
- 处理:根据当前测试方式正确选择周期
- 采样间隔越界
- 现象:范围校验失败
- 处理:将采样间隔调整至0~30000范围内
- 任务创建失败
- 现象:Create3DTask返回负值
- 处理:检查数据库连接、事务回滚日志,确认脚本ID有效且数据库权限正常
章节来源
结论
- 3D项目创建流程以DialNew3DTask为核心入口,结合脚本查询自动填充网格尺寸,确保X/Y方向电极数量、步长、间距与测线方向的一致性
- 电缆布线方式在不同测试方式下进行过滤与适配,保证三维测量的可行性
- 通用参数(发射周期、采样间隔、迭代次数)在对话框中进行严格校验,并在任务管理器中继承到最终任务参数
- ST3DTaskParam与数据库字段映射清晰,Create3DTask通过事务保障数据一致性,返回新任务ID供后续使用
[本节为总结,无需特定文件引用]
附录
3D网格参数与UI控件对照
- X方向电极数量:来自Rect解析后的right+1
- Y方向电极数量:来自Rect解析后的bottom+1
- X方向电极步长:来自PoleStep的X分量
- Y方向电极步长:来自PoleStep的Y分量
- X方向电极间距:来自PoleDistance的X分量
- Y方向电极间距:来自PoleDistance的Y分量
- 测线方向:来自LineDirection(0:X方向,1:Y方向)
- 电缆方向:COMBOBOX控件(X或Y)
章节来源