This commit is contained in:
coco
2026-07-03 16:05:30 +08:00
commit df489d5640
1101 changed files with 779140 additions and 0 deletions
@@ -0,0 +1,146 @@
# 任务包与地形配置
<cite>
**本文档引用文件**
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp)
- [DialCfgTerrain.cpp](file://cpp/Views/DialCfgTerrain.cpp)
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp)
</cite>
## 目录
1. [引言](#引言)
2. [任务包配置功能](#任务包配置功能)
3. [地形参数设置功能](#地形参数设置功能)
4. [任务包数据持久化机制](#任务包数据持久化机制)
5. [地形参数文件处理流程](#地形参数文件处理流程)
6. [用户界面操作指南](#用户界面操作指南)
7. [开发者实现解析](#开发者实现解析)
8. [结论](#结论)
## 引言
本文档全面阐述Geomative Studio软件中的任务包配置(DialCfgTaskPacket)与地形参数设置(DialCfgTerrain)两大核心功能。文档旨在为用户提供清晰的图形化界面操作指南,同时为开发者深入解析底层数据处理与持久化机制。通过详细说明调度参数配置、环境参数输入、数据验证规则及配置保存流程,确保用户能够高效、准确地完成地质勘探任务的前期配置工作。
## 任务包配置功能
任务包配置功能允许用户将多个测量任务组织成一个有序的执行序列。用户可以通过图形化界面选择并添加任务到任务包中,系统会自动管理任务的执行顺序。该功能的核心是调度参数的配置,包括循环次数和采集间隔,这些参数共同决定了任务包的执行时序。
**Section sources**
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp#L1-L301)
## 地形参数设置功能
地形参数设置功能用于输入测量区域的高程和地质条件信息。用户可以通过界面直接输入或从外部文件导入地形数据点,每个数据点包含水平(X)和垂直(Y)坐标。系统支持两种地形数据标志:水平距离和垂直距离,用户可根据实际测量需求进行选择。此外,用户还需指定第一个电极对应的地形数据点编号,以建立电极位置与地形数据的映射关系。
**Section sources**
- [DialCfgTerrain.cpp](file://cpp/Views/DialCfgTerrain.cpp#L1-L843)
## 任务包数据持久化机制
任务包的配置数据通过CTaskDataOper类实现内存与数据库间的持久化。当用户在DialCfgTaskPacket界面完成配置并点击“保存”时,系统会调用CTaskDataOper::InsertTaskPacketInfo方法,将任务包信息写入数据库。
```mermaid
sequenceDiagram
participant 用户 as "用户"
participant 界面 as "DialCfgTaskPacket"
participant 操作类 as "CTaskDataOper"
participant 数据库 as "数据库"
用户->>界面 : 点击“保存”
界面->>界面 : 验证输入参数
界面->>操作类 : 调用InsertTaskPacketInfo()
操作类->>数据库 : 开始事务
操作类->>数据库 : 删除旧的tdTaskPacket记录
操作类->>数据库 : 插入新的任务包属性
操作类->>数据库 : 删除旧的tdTaskPacketInfo记录
操作类->>数据库 : 插入新的任务列表
操作类->>数据库 : 提交事务
操作类-->>界面 : 返回结果
界面-->>用户 : 显示“保存成功”消息
```
**Diagram sources**
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp#L206-L300)
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp#L669-L715)
## 地形参数文件处理流程
地形参数的配置最终会保存到一个.dat格式的文件中。该流程涉及文件的读取、解析和写入操作。系统首先读取.dat文件的头部信息以确定装置类型,然后根据装置类型决定是否需要添加地形数据。在保存时,系统会从文件末尾开始查找零结束符的位置,然后在该位置写入新的地形数据,确保不破坏原有的测量脚本。
```mermaid
flowchart TD
Start([开始]) --> CheckFile["检查是否已导入dat文件"]
CheckFile --> |否| ShowError1["提示:请先导入dat文件"]
CheckFile --> |是| CheckFlag["检查地形数据标志"]
CheckFlag --> |未选择| ShowError2["提示:请先选择地形数据标志"]
CheckFlag --> |已选择| CheckData["检查地形数据点"]
CheckData --> |无数据| ShowError3["提示:请输入地形数据"]
CheckData --> |有数据| CheckElectrode["验证第一个电极编号"]
CheckElectrode --> |无效| ShowError4["提示:编号必须在有效范围内"]
CheckElectrode --> |有效| OpenFile["打开dat文件"]
OpenFile --> ReadHeader["读取文件头部"]
ReadHeader --> ParseHeader["解析装置类型"]
ParseHeader --> CheckType["判断是否需要地形数据"]
CheckType --> |不需要| ShowError5["提示:该装置无需地形数据"]
CheckType --> |需要| FindEnd["查找文件末尾零结束符"]
FindEnd --> |未找到| ShowError6["提示:未找到结束符"]
FindEnd --> |找到| WriteData["写入地形数据"]
WriteData --> CloseFile["关闭文件"]
CloseFile --> ShowSuccess["提示:保存成功"]
ShowError1 --> End([结束])
ShowError2 --> End
ShowError3 --> End
ShowError4 --> End
ShowError5 --> End
ShowError6 --> End
ShowSuccess --> End
```
**Diagram sources**
- [DialCfgTerrain.cpp](file://cpp/Views/DialCfgTerrain.cpp#L539-L693)
## 用户界面操作指南
### 任务包配置操作步骤
1. **打开配置界面**:在软件主界面中,导航至任务管理模块,选择“任务包配置”功能。
2. **选择任务**:从下拉菜单中选择一个待添加的任务。
3. **添加任务**:点击“添加”按钮,将选中的任务加入任务列表。系统会自动检查任务是否重复。
4. **配置调度参数**
* **循环次数**:输入任务包需要重复执行的总次数,有效范围为1-60000。
* **采集间隔**:输入每次循环之间的等待时间(秒),有效范围为1-60000。
* **PLC ID**:输入可编程逻辑控制器的标识符。
5. **删除任务**:在任务列表中选中某项,点击“删除”按钮可将其移除。
6. **保存配置**:确认所有参数无误后,点击“确定”按钮保存配置。系统会进行输入验证,若通过则提示“保存成功”。
### 地形参数设置操作步骤
1. **打开配置界面**:在软件主界面中,导航至地形设置模块,选择“地形参数设置”功能。
2. **导入数据文件**:点击“导入文件”按钮,选择一个.dat格式的测量脚本文件。
3. **输入地形数据**
* 在列表中点击“添加”按钮。
* 在X和Y输入框中分别输入地形点的水平和垂直坐标。
* 点击“添加”确认,数据点将被加入列表。
4. **修改或删除数据**:选中列表中的数据点,可通过“修改”按钮更新坐标,或通过“删除”按钮移除。
5. **选择地形标志**:从下拉框中选择“水平距离”或“垂直距离”。
6. **设置电极映射**:在“第一个电极对应的地形数据点编号”输入框中,输入一个正整数,该编号必须在已输入的地形数据点范围内。
7. **保存数据**:点击“保存数据”按钮,系统会将地形信息写入之前导入的.dat文件。
**Section sources**
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp#L47-L300)
- [DialCfgTerrain.cpp](file://cpp/Views/DialCfgTerrain.cpp#L450-L693)
## 开发者实现解析
### CTaskDataOper类核心方法
* **`QueryTaskPacketAttr`**: 该方法从数据库的`tdTaskPacket`表中查询当前的循环次数、采集间隔和PLC ID,并将结果填充到传入的引用参数中。它在DialCfgTaskPacket的`OnInitDialog`中被调用,用于初始化界面显示。
* **`InsertTaskPacketInfo`**: 这是任务包持久化的关键方法。它接收一个任务信息向量和一个属性结构体。方法内部使用数据库事务,首先清空`tdTaskPacket``tdTaskPacketInfo`两个表,然后重新插入新的配置数据,确保数据的一致性。
### 数据结构与映射关系
地形参数与测量脚本的空间映射关系至关重要。测量脚本(.dat文件)定义了电极的排列和测量序列,而地形数据则提供了这些电极所在位置的高程信息。通过“第一个电极对应的地形数据点编号”这一参数,系统能够将脚本中的第一个电极与地形数据列表中的某个点对齐,从而推算出所有电极的精确位置。这种映射直接影响后续数据采集的精度,尤其是在地形起伏较大的区域,准确的高程数据是进行精确电阻率反演的基础。
**Section sources**
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp#L669-L715)
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp#L147-L157)
- [DialCfgTerrain.cpp](file://cpp/Views/DialCfgTerrain.cpp#L539-L693)
## 结论
任务包配置与地形参数设置是Geomative Studio软件中两个紧密关联且至关重要的功能模块。任务包配置通过循环次数和采集间隔等参数,实现了对复杂测量任务的自动化调度,极大地提升了野外作业的效率。地形参数设置则通过精确的高程数据输入,为后续的数据采集和反演分析提供了关键的环境信息,确保了测量结果的准确性。两者的结合,使得软件能够适应多样化的地质勘探场景,为用户提供了一套完整、可靠的测量解决方案。
@@ -0,0 +1,231 @@
# 任务包配置
<cite>
**本文档引用的文件**
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp)
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp)
- [Constant.h](file://h/Constant.h)
- [DataMngStruct.h](file://h/DataMngStruct.h)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概述](#架构概述)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 简介
本文档全面说明Geomative Studio中的任务包配置功能(DialCfgTaskPacket),涵盖调度参数配置、图形界面操作流程以及底层数据持久化机制。文档详细阐述了循环时间、采集间隔和PLC ID等关键参数的配置规则,包括输入验证范围和默认值设定。同时为用户提供任务列表管理的操作指南,并为开发者解析CTaskDataOper类中InsertTaskPacketInfo方法的实现逻辑。
## 项目结构
任务包配置功能主要分布在Views和Operator两个模块中,通过数据库持久化任务配置信息。系统采用MFC框架构建图形用户界面,通过ADO接口与数据库交互。
```mermaid
graph TB
subgraph "用户界面层"
DialCfgTaskPacket["DialCfgTaskPacket (任务包配置对话框)"]
end
subgraph "业务逻辑层"
TaskDataOper["CTaskDataOper (任务数据操作类)"]
end
subgraph "数据访问层"
Database["数据库 (Access/SQL Server)"]
end
DialCfgTaskPacket --> TaskDataOper
TaskDataOper --> Database
```
**图示来源**
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp#L1-L301)
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp#L1-L800)
**本节来源**
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp#L1-L301)
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp#L1-L800)
## 核心组件
任务包配置功能的核心组件包括DialCfgTaskPacket对话框类和CTaskDataOper数据操作类。DialCfgTaskPacket负责用户界面交互和输入验证,CTaskDataOper负责数据持久化和数据库操作。两个组件通过STTaskPacketAttr结构体和STTdBrowseInfo向量进行数据传递,实现了界面与业务逻辑的分离。
**本节来源**
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp#L1-L301)
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp#L668-L714)
## 架构概述
任务包配置功能采用典型的三层架构设计,包括表示层、业务逻辑层和数据访问层。用户通过图形界面输入配置参数,系统进行验证后,将任务包信息持久化到数据库中。
```mermaid
sequenceDiagram
participant 用户 as "用户"
participant 界面 as "DialCfgTaskPacket"
participant 业务逻辑 as "CTaskDataOper"
participant 数据库 as "数据库"
用户->>界面 : 打开任务包配置对话框
界面->>业务逻辑 : 查询可选任务列表
业务逻辑->>数据库 : 执行SQL查询
数据库-->>业务逻辑 : 返回任务列表
业务逻辑-->>界面 : 返回任务列表数据
界面->>界面 : 显示任务列表和配置参数
用户->>界面 : 输入循环时间、采集间隔、PLC ID
用户->>界面 : 添加/删除任务
用户->>界面 : 点击保存
界面->>界面 : 验证输入参数
界面->>业务逻辑 : 调用InsertTaskPacketInfo
业务逻辑->>数据库 : 开始事务
业务逻辑->>数据库 : 删除旧的任务包配置
业务逻辑->>数据库 : 插入新的任务包属性
业务逻辑->>数据库 : 插入任务包包含的任务
业务逻辑->>数据库 : 提交事务
数据库-->>业务逻辑 : 返回操作结果
业务逻辑-->>界面 : 返回保存结果
界面->>用户 : 显示保存成功/失败消息
```
**图示来源**
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp#L206-L300)
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp#L668-L714)
## 详细组件分析
### 任务包配置对话框分析
DialCfgTaskPacket类实现了任务包配置的图形用户界面,提供任务选择、参数输入和任务列表管理功能。
```mermaid
classDiagram
class CDialCfgTaskPacket {
+CListCtrl m_listTaskPacket
+CComboBox m_cmbTaskName
+OnInitDialog() bool
+OnButtonAdd() void
+OnButtonDel() void
+OnOK() void
+InitialTaskList() void
+IsRepeatTask(int) bool
}
CDialCfgTaskPacket --> CTaskDataOper : "使用"
CDialCfgTaskPacket --> STTaskPacketAttr : "使用"
CDialCfgTaskPacket --> STTdBrowseInfo : "使用"
```
**图示来源**
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp#L18-L301)
**本节来源**
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp#L18-L301)
### 任务数据操作类分析
CTaskDataOper类负责任务相关数据的持久化操作,包括任务包配置的保存和查询。
```mermaid
classDiagram
class CTaskDataOper {
+InsertTaskPacketInfo(vector<STTdBrowseInfo>, STTaskPacketAttr) bool
+QueryTaskPacketAttr(int&, int&, CString&) bool
+QueryTdBrowseInfo(vector<STTdBrowseInfo>&, int, int) bool
+QueryTaskPacketInfo(vector<STTdBrowseInfo>&) bool
}
class STTaskPacketAttr {
+int iLoopTimes
+int iInterval
+CString strPlcID
}
class STTdBrowseInfo {
+int iTaskID
+CString strTaskName
}
CTaskDataOper --> STTaskPacketAttr
CTaskDataOper --> STTdBrowseInfo
```
**图示来源**
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp#L668-L714)
- [DataMngStruct.h](file://h/DataMngStruct.h#L1-L23)
**本节来源**
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp#L668-L714)
### 调度参数配置流程分析
任务包配置涉及循环时间、采集间隔和PLC ID三个核心调度参数的配置,系统实施严格的输入验证规则。
```mermaid
flowchart TD
Start([开始配置]) --> ValidateLoopTime["验证循环时间"]
ValidateLoopTime --> LoopTimeValid{"1-60000之间?"}
LoopTimeValid --> |否| ShowLoopTimeError["显示错误消息: 循环次数的值必须在1-60000之间"]
LoopTimeValid --> |是| ValidateInterval["验证采集间隔"]
ValidateInterval --> IntervalValid{"1-60000之间?"}
IntervalValid --> |否| ShowIntervalError["显示错误消息: 时间间隔的值必须在1-60000之间"]
IntervalValid --> |是| ValidatePLCID["验证PLC ID"]
ValidatePLCID --> PLCIDValid{"已输入?"}
PLCIDValid --> |否| ShowPLCIError["显示错误消息: 请输入PLC ID"]
PLCIDValid --> |是| SaveConfig["保存配置"]
SaveConfig --> BeginTransaction["开始数据库事务"]
BeginTransaction --> DeleteOldConfig["删除旧的任务包配置"]
DeleteOldConfig --> InsertAttr["插入任务包属性"]
InsertAttr --> InsertTasks["插入任务包包含的任务"]
InsertTasks --> CommitTransaction["提交事务"]
CommitTransaction --> Success{"成功?"}
Success --> |是| ShowSuccess["显示保存成功"]
Success --> |否| ShowFail["显示保存失败"]
ShowSuccess --> End([配置完成])
ShowFail --> End
ShowLoopTimeError --> End
ShowIntervalError --> End
ShowPLCIError --> End
```
**图示来源**
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp#L206-L300)
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp#L668-L714)
**本节来源**
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp#L206-L300)
## 依赖分析
任务包配置功能依赖于多个系统组件和外部库,形成复杂的依赖关系网络。
```mermaid
graph TD
DialCfgTaskPacket --> TaskDataOper
TaskDataOper --> ADO["ADO数据库接口"]
TaskDataOper --> GUCodeCreator["GUCodeCreator"]
TaskDataOper --> FileOperTools["FileOperTools"]
TaskDataOper --> AutoLock["AutoLock"]
ADO --> Database
GUCodeCreator --> UUID["UUID生成"]
FileOperTools --> FileSystem["文件系统"]
AutoLock --> Thread["多线程同步"]
style DialCfgTaskPacket fill:#f9f,stroke:#333
style TaskDataOper fill:#bbf,stroke:#333
style Database fill:#f96,stroke:#333
```
**图示来源**
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp#L1-L301)
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp#L1-L800)
**本节来源**
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp#L1-L800)
## 性能考虑
任务包配置功能在设计时考虑了性能优化,特别是在数据库操作方面采用了事务处理机制,确保数据一致性的同时提高操作效率。系统在保存任务包配置时,先删除旧配置再插入新配置,避免了复杂的更新逻辑。对于大量任务的处理,建议分批操作以减少内存占用和数据库压力。
## 故障排除指南
当任务包配置功能出现问题时,可按照以下步骤进行排查:
1. **界面无法打开**:检查DialCfgTaskPacket对话框的资源定义是否正确,确认IDD常量定义无误。
2. **任务列表为空**:验证数据库连接是否正常,确认td表中存在可配置的任务。
3. **保存失败**:检查数据库事务是否被正确提交,确认tdTaskPacket和tdTaskPacketInfo表的结构是否符合预期。
4. **参数验证错误**:确认循环时间和采集间隔在1-60000的有效范围内,确保PLC ID已正确输入。
5. **重复任务无法添加**:系统已实现重复检测机制,相同任务ID的任务不能重复添加。
**本节来源**
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp#L47-L108)
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp#L668-L714)
## 结论
任务包配置功能为Geomative Studio提供了灵活的任务调度能力,通过DialCfgTaskPacket和CTaskDataOper组件的协同工作,实现了用户友好的界面操作和可靠的数据持久化。系统对循环时间、采集间隔和PLC ID等关键参数实施了严格的验证规则,确保配置的正确性。开发者可通过理解InsertTaskPacketInfo方法的实现逻辑,进一步扩展和定制任务包配置功能,满足特定的自动化测量需求。
@@ -0,0 +1,145 @@
# 地形配置
<cite>
**本文档引用文件**
- [DialCfgTerrain.cpp](file://cpp/Views/DialCfgTerrain.cpp)
- [DialCfgTerrain.h](file://h/DialCfgTerrain.h)
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp)
- [TaskDataOper.h](file://h/TaskDataOper.h)
- [Rsp2DTd.cpp](file://cpp/ProblemZone/Rsp2DTd.cpp)
- [SP2DTd.cpp](file://cpp/ProblemZone/SP2DTd.cpp)
- [Res3DDatFile.cpp](file://cpp/Tools/Res3DDatFile.cpp)
- [Res3DDatFileRecord.cpp](file://cpp/Tools/Res3DDatFileRecord.cpp)
</cite>
## 目录
1. [简介](#简介)
2. [地形参数输入界面](#地形参数输入界面)
3. [数据格式与验证](#数据格式与验证)
4. [地形数据存储机制](#地形数据存储机制)
5. [地形参数与测量脚本的映射关系](#地形参数与测量脚本的映射关系)
6. [实际应用案例](#实际应用案例)
7. [结论](#结论)
## 简介
地形参数设置功能(DialCfgTerrain)是Geomative Studio软件中的一个关键模块,用于配置测量任务中的环境参数。该功能允许用户输入地形高程、地质条件和表面特征等信息,这些信息对于后续的数据采集精度和解释结果具有重要影响。通过图形化界面,用户可以方便地进行参数输入、验证和保存,确保测量方案的科学性和准确性。
**Section sources**
- [DialCfgTerrain.cpp](file://cpp/Views/DialCfgTerrain.cpp#L1-L843)
- [DialCfgTerrain.h](file://h/DialCfgTerrain.h#L1-L72)
## 地形参数输入界面
地形参数输入界面提供了直观的操作方式,用户可以通过该界面完成地形数据的配置。界面主要包括以下几个部分:
- **地形数据标志**:用户可以选择水平距离或垂直距离作为地形数据的标志。
- **地形数据明细**:用户可以在此列表中添加、修改和删除地形数据点,每个数据点包含ID、X坐标和Y坐标。
- **第一个电极对应的地形数据点编号**:用户需要指定第一个电极对应的地形数据点编号,以便系统正确映射地形数据与电极位置。
```mermaid
graph TD
A[地形参数输入界面] --> B[地形数据标志]
A --> C[地形数据明细]
A --> D[第一个电极对应的地形数据点编号]
B --> E[水平距离]
B --> F[垂直距离]
C --> G[添加数据点]
C --> H[修改数据点]
C --> I[删除数据点]
D --> J[输入编号]
```
**Diagram sources**
- [DialCfgTerrain.cpp](file://cpp/Views/DialCfgTerrain.cpp#L77-L81)
- [DialCfgTerrain.h](file://h/DialCfgTerrain.h#L25-L29)
## 数据格式与验证
为了确保地形数据的准确性和一致性,系统对输入的数据进行了严格的格式验证。具体要求如下:
- **X坐标和Y坐标**:必须为浮点数,且绝对值小于100000。
- **地形数据点编号**:必须为正整数,且在1到地形数据点总数之间。
- **地形数据标志**:必须选择水平距离或垂直距离之一。
```mermaid
flowchart TD
Start([开始]) --> ValidateInput["验证输入参数"]
ValidateInput --> InputValid{"输入有效?"}
InputValid --> |否| ReturnError["返回错误信息"]
InputValid --> |是| CheckDataCount["检查数据点数量"]
CheckDataCount --> DataCountValid{"数据点数量 > 0?"}
DataCountValid --> |否| ReturnError
DataCountValid --> |是| CheckFirstElectrode["检查第一个电极编号"]
CheckFirstElectrode --> FirstElectrodeValid{"编号在范围内?"}
FirstElectrodeValid --> |否| ReturnError
FirstElectrodeValid --> |是| SaveData["保存数据"]
SaveData --> End([结束])
ReturnError --> End
```
**Diagram sources**
- [DialCfgTerrain.cpp](file://cpp/Views/DialCfgTerrain.cpp#L472-L537)
- [DialCfgTerrain.h](file://h/DialCfgTerrain.h#L62)
## 地形数据存储机制
地形数据在系统中以特定的格式存储,并通过CTaskDataOper类进行管理和处理。具体存储机制如下:
- **数据结构**:地形数据以二维数组的形式存储,每个数据点包含X坐标和Y坐标。
- **文件格式**:地形数据保存在.dat文件中,文件末尾包含多个零作为结束符。
- **数据库存储**:地形数据的相关信息(如地形数据标志、数据点数量等)存储在数据库的`t2dtg`表中。
```mermaid
classDiagram
class CTaskDataOper {
+int m_iExplainStartIndex
+CString m_strDatFilePath
+bool CheckValidBeforSave()
+void OnButtonSaveData()
+int GetDevArrayFromText(const CString& strInfo)
+int GetWriteIndexFromEndTxt(CString strInfo, int &iEndZeroCnt)
+void InitUIByLanguage(int iLanguage)
}
class DialCfgTerrain {
+CEdit m_edit1stPtIndex
+CComboBox m_cmbTerrainDataFlag
+CListCtrl m_ctrlTerrainData
+CListCtrl m_ctrlRemarkHeader
+CListCtrl m_ctrlRemarkEnd
+CListCtrl m_ctrlRemarkDetail
}
CTaskDataOper --> DialCfgTerrain : "使用"
```
**Diagram sources**
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp#L44-L817)
- [TaskDataOper.h](file://h/TaskDataOper.h#L42-L72)
## 地形参数与测量脚本的映射关系
地形参数与测量脚本之间存在紧密的映射关系,这种关系确保了测量数据的准确性和可靠性。具体映射过程如下:
- **数据读取**:系统从.dat文件中读取地形数据,并解析出地形数据标志和数据点数量。
- **数据写入**:将解析后的地形数据写入到测量脚本中,确保每个测点的地形信息与实际位置一致。
- **数据验证**:在写入过程中,系统会验证地形数据的完整性和正确性,防止数据丢失或错误。
```mermaid
sequenceDiagram
participant User as "用户"
participant Interface as "图形界面"
participant Controller as "控制器"
participant Database as "数据库"
User->>Interface : 输入地形数据
Interface->>Controller : 提交数据
Controller->>Controller : 验证数据格式
Controller->>Database : 保存地形数据
Database-->>Controller : 确认保存成功
Controller-->>Interface : 显示成功消息
Interface-->>User : 通知用户
```
**Diagram sources**
- [Rsp2DTd.cpp](file://cpp/ProblemZone/Rsp2DTd.cpp#L4672-L4823)
- [SP2DTd.cpp](file://cpp/ProblemZone/SP2DTd.cpp#L3248-L3252)
## 实际应用案例
### 案例一:复杂地形测量
在一个复杂的山区环境中,用户需要进行高精度的地质测量。通过地形参数设置功能,用户可以精确输入每个测点的地形高程和表面特征,确保测量数据的准确性。系统根据这些参数自动调整测量脚本,优化测量路径,提高数据采集效率。
### 案例二:城市地下管线探测
在城市地下管线探测项目中,地形参数设置功能帮助用户快速配置不同区域的地形条件。通过导入已有的地形数据文件,用户可以快速完成参数设置,减少现场工作量。系统根据地形数据生成最优的测量方案,确保探测结果的可靠性。
## 结论
地形参数设置功能(DialCfgTerrain)是Geomative Studio软件中不可或缺的一部分,它通过图形化界面和严格的数据验证机制,确保了地形数据的准确性和一致性。该功能不仅提高了测量任务的效率,还显著提升了数据采集的精度和解释结果的可靠性。通过合理的地形参数配置,用户可以更好地指导测量方案的设计,实现更高质量的地质勘探。