Files
coco df489d5640 a
2026-07-03 16:05:30 +08:00

14 KiB
Raw Blame History

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)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件系统性地文档化Geomative Studio中“3D项目创建”流程,重点覆盖:

  • 三维网格信息(X/Y方向电极数量、电极步长、电极间距等)的配置与来源
  • DialNew3DTask对话框如何基于选定的测试脚本自动计算并展示网格尺寸信息
  • 三维测量中电缆布线方式的特殊要求与适配
  • 发射周期、迭代次数等通用参数的继承与适配策略
  • 三维测量任务参数结构体(ST3DTaskParam)与数据库存储的映射关系
  • 任务创建成功后的ID返回机制

项目结构

围绕3D项目创建的关键文件组织如下:

  • 视图层:DialNew3DTask3D任务创建对话框)、DialCreateNew3DSpt3D脚本创建对话框)
  • 操作层: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等网格与布线相关信息。
  • DialCreateNew3DSpt3D脚本创建对话框,承载X/Y网格大小、电极间距、迭代数、电缆方向等输入与绘制预览。
  • 资源与控件:通过GeoMative.rc与Resource.h定义3D相关控件ID,确保UI一致性。

章节来源

架构总览

下图展示了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

图表来源

章节来源

详细组件分析

DialNew3DTask3D任务创建对话框

  • 功能要点

    • 测试方式、装置类型、脚本、布线方式、发射周期、采样间隔、迭代次数等参数收集
    • 基于脚本查询自动填充网格尺寸(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并返回
  • 三维网格参数映射

    • X/Y方向电极数量:来自Rect解析后的right、bottom加一
    • 电极步长:来自PoleStep(X、Y方向)
    • 电极间距:来自PoleDistanceX、Y方向)
    • 测线方向:来自LineDirection0:X方向,1:Y方向)

章节来源

CTaskDataOper3D任务创建与数据库映射

  • 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返回

章节来源

DialCreateNew3DSpt3D脚本创建与网格输入

  • 功能要点

    • 输入X/Y网格大小、电极间距、迭代数、电缆方向等
    • 初始化绘图板,根据输入更新X/Y电极数量、间距,并重绘
    • 支持不同测量方法与装置类型的组合显示
  • 关键参数

    • m_uiXGridSize、m_uiYGridSizeX/Y方向电极数量
    • m_fXPoleDistance、m_fYPoleDistanceX/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分量
  • 测线方向:来自LineDirection0:X方向,1:Y方向)
  • 电缆方向:COMBOBOX控件(X或Y)

章节来源