Files
geomative/GeomativeStudio/.qoder/repowiki/zh/content/开发者指南/代码结构/ProblemZone模块/Script数据模型.md
T
coco df489d5640 a
2026-07-03 16:05:30 +08:00

9.4 KiB

Script数据模型

**本文档引用的文件** - [Script.h](file://h/Script.h) - [SptRecord.h](file://h/SptRecord.h) - [SptManager.cpp](file://cpp/Managers/SptManager.cpp) - [OpCreate3DSptDlg.cpp](file://cpp/Views/OpCreate3DSptDlg.cpp) - [GD10OperCmd.h](file://h/GD10OperCmd.h) - [GD10OperCmd.cpp](file://cpp/Tools/GD10OperCmd.cpp) - [Script.cpp](file://cpp/ProblemZone/Script.cpp) - [SptRecord.cpp](file://cpp/ProblemZone/SptRecord.cpp)

目录

  1. 引言
  2. Script类结构与功能
  3. SptRecord类数据结构
  4. 脚本生成与用户交互流程
  5. 脚本管理与增删改查操作
  6. 脚本与Medium模型的关联机制
  7. 脚本文件(.urf)导出格式
  8. 从脚本配置到设备指令的数据流
  9. 结论

引言

Script类及其相关SptRecord类是Geomative Studio系统中测量脚本管理的核心组件。这些类负责定义2D、3D及跨孔测量的任务序列,包括电极排列方式、测量模式(如温纳、施伦贝尔)、供电参数和采集频率等关键配置。本文档将深入分析Script类的实现机制,解释SptRecord作为脚本执行记录的数据结构,并结合UI组件说明脚本生成与编辑的用户交互流程。

Section sources

Script类结构与功能

Script类是测量脚本的基类,定义了所有测量任务的通用属性和方法。该类通过继承机制支持不同类型的测量任务,包括2D、3D和跨孔测量。Script类的核心属性包括电极数量(m_iEAmount)、测量类型(m_iSType)和装置类型(m_iAR),这些属性共同定义了测量任务的基本特征。

Script类通过虚函数ShowSptConInfo、ShowSptDetailInfo和ShowChannelList提供了显示脚本信息的接口,允许子类根据具体测量类型定制信息展示方式。这种设计模式实现了代码的可扩展性和灵活性,使得系统能够轻松支持新的测量模式。

Section sources

SptRecord类数据结构

SptRecord类作为脚本执行记录的数据结构,包含了测量过程中的关键参数和状态信息。该类不仅存储了测量配置参数,如电极位置(m_iC1, m_iC2, m_iP1, m_iP2)、几何因子(m_fK)和迭代次数(m_iN),还包含了执行状态和异常标记。

SptRecord类的成员变量设计体现了对测量过程全面监控的需求。m_bIsSel标志位用于标记测点是否被选中,m_colorREF用于可视化显示,m_recPtArea、m_fPtCenterX、m_fPtCenterY和m_fPtRadius共同定义了测点的区域范围,支持空间查询和交互操作。

Section sources

脚本生成与用户交互流程

脚本生成与编辑的用户交互主要通过OpCreate3DSptDlg类实现。该对话框提供了直观的界面,允许用户配置3D测量任务的关键参数,包括测量区域、电极间距、步长和装置类型。用户通过界面输入的参数被转换为Script3D对象的配置,最终生成具体的测量任务序列。

OpCreate3DSptDlg类的实现展示了复杂的用户交互逻辑,包括参数验证、装置类型选择和区域定义。当用户选择中梯装置时,界面会动态显示C1和C2电极的输入控件,确保用户能够正确配置测量参数。这种动态界面设计提高了用户体验和数据输入的准确性。

sequenceDiagram
participant 用户 as 用户
participant UI as OpCreate3DSptDlg
participant Script as Script3D
participant Medium as CMedium3D
用户->>UI : 输入测量参数
UI->>UI : 验证参数有效性
UI->>Script : 创建Script3D实例
Script->>Medium : 设置测量区域和参数
Medium->>Medium : 生成测量序列
Medium->>Script : 返回测量序列
Script->>UI : 存储测量序列
UI->>用户 : 显示生成结果

Diagram sources

脚本管理与增删改查操作

脚本管理功能由SptManager类实现,该类提供了对测量脚本的增删改查操作。SptManager使用链接列表(m_sptLinkList)管理所有脚本实例,通过句柄机制实现脚本的快速查找和访问。这种设计模式确保了脚本管理的高效性和内存使用的合理性。

SptManager类的Create2DSConInDB和Delete2DSConInDB方法实现了脚本在数据库中的持久化存储和删除。这些方法通过ADO数据库操作,将脚本配置信息写入scon、channel和script2d等数据表,实现了配置数据的可靠存储和版本管理。

Section sources

脚本与Medium模型的关联机制

Script类与Medium模型的关联是通过装置类型(m_iAR)和句柄处理器(m_handleProcessor)实现的。每种测量模式对应特定的Medium子类,如CMedium3D用于3D测量,CMediumCrossHoleGeomative用于跨孔测量。SptManager在创建脚本时,根据装置类型生成相应的Medium实例,并将其关联到脚本的通道中。

这种关联机制实现了测量逻辑与数据模型的解耦,使得系统能够灵活支持多种测量模式。当脚本执行时,相关的Medium实例负责生成具体的测量序列,而Script类则负责管理整体的测量流程和状态。

classDiagram
class Script {
+DWORD m_dwID
+int m_iEAmount
+int m_iSType
+int m_iAR
+CHandleProcessor m_handleProcessor
+_ConnectionPtr m_pConnection
}
class CScript2D {
+CList m_chaList
}
class CScript3D {
+CList m_chaList
}
class CScriptCE {
+CList m_chaList
}
class CChannel {
+int m_iChNumber
+CMedium* m_pMedium
+CArray m_sptRecArray
+int m_iPtAmount
}
class CMedium {
+int m_iAR
}
class CMedium3D {
+void create()
+bool generate()
+void GenerateSptRecElecVal3D()
}
class CMediumCrossHoleGeomative {
+void create()
+bool generate()
}
Script <|-- CScript2D
Script <|-- CScript3D
Script <|-- CScriptCE
CScript2D --> CChannel
CScript3D --> CChannel
CScriptCE --> CChannel
CChannel --> CMedium
CMedium <|-- CMedium3D
CMedium <|-- CMediumCrossHoleGeomative

Diagram sources

脚本文件(.urf)导出格式

脚本文件的导出格式采用XML结构,包含了测量任务的完整配置信息。导出的XML文件包含脚本名称、类型、描述、定义者、日期、测量区域、电极数量、通道信息和具体的测量序列。这种结构化的格式便于数据的交换和长期存储。

在跨孔测量等特殊情况下,系统还会生成额外的坐标文件,记录电极的三维位置信息。这些坐标文件通过C_H_Script标签在主脚本文件中引用,实现了测量配置与空间数据的分离管理。

flowchart TD
Start([开始导出]) --> CheckType["检查测量类型"]
CheckType --> |3D测量| GenerateXML["生成XML结构"]
CheckType --> |跨孔测量| GenerateCoord["生成坐标文件"]
GenerateXML --> AddHeader["添加XML头部"]
AddHeader --> AddBasicInfo["添加基本信息"]
AddBasicInfo --> AddChannelInfo["添加通道信息"]
AddChannelInfo --> AddLayout["添加测量序列"]
AddLayout --> SaveFile["保存文件"]
GenerateCoord --> SaveCoord["保存坐标文件"]
SaveCoord --> SaveMain["保存主脚本文件"]
SaveFile --> End([完成])
SaveMain --> End

Diagram sources

从脚本配置到设备指令的数据流

从脚本配置到设备指令的生成过程是一个复杂的数据转换流程。首先,用户通过UI界面配置测量参数,这些参数被封装为Script对象。然后,SptManager将Script对象的配置信息转换为数据库记录,实现持久化存储。

当测量任务执行时,系统从数据库读取脚本配置,通过GD10OperCmd类生成相应的设备指令。这些指令通过USB或蓝牙传输到GD10设备,控制其执行具体的测量操作。整个数据流确保了测量配置的准确传递和执行。

sequenceDiagram
participant UI as 用户界面
participant Script as Script类
participant DB as 数据库
participant GD10Cmd as GD10OperCmd
participant Device as GD10设备
UI->>Script : 输入测量配置
Script->>DB : 存储脚本配置
DB->>Script : 读取脚本配置
Script->>GD10Cmd : 请求生成指令
GD10Cmd->>GD10Cmd : 生成设备指令
GD10Cmd->>Device : 发送指令
Device->>Device : 执行测量
Device->>GD10Cmd : 返回结果
GD10Cmd->>Script : 处理结果
Script->>UI : 显示结果

Diagram sources

结论

Script类及其相关SptRecord类构成了Geomative Studio测量脚本管理的核心。通过精心设计的类结构和数据模型,系统实现了对2D、3D及跨孔测量任务的全面支持。从用户交互、数据存储到设备控制的完整数据流,确保了测量过程的准确性和可靠性。这种模块化的设计也为系统的扩展和维护提供了良好的基础。