# 2D项目创建 **本文档引用的文件** - [DialNew2DTask.cpp](file://cpp/Views/DialNew2DTask.cpp) - [DialNew2DTask.h](file://h/DialNew2DTask.h) - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp) - [TaskDataOper.h](file://h/TaskDataOper.h) ## 目录 1. [简介](#简介) 2. [参数配置](#参数配置) 3. [控件交互逻辑](#控件交互逻辑) 4. [跨孔测量模式约束](#跨孔测量模式约束) 5. [测试脚本选择机制](#测试脚本选择机制) 6. [接地电阻测试选项](#接地电阻测试选项) ## 简介 2D项目创建功能是Geomative Studio软件中的核心功能之一,用于配置和创建二维地球物理勘探任务。该功能通过`DialNew2DTask`对话框实现,允许用户设置任务的各种参数,包括装置类型、电缆布线方式、电极间距、孔间距(跨孔测量)、起始/结束电极、采样间隔等。本文档详细说明了该功能的实现细节和交互逻辑。 **Section sources** - [DialNew2DTask.cpp](file://cpp/Views/DialNew2DTask.cpp#L1-L665) - [DialNew2DTask.h](file://h/DialNew2DTask.h#L1-L92) ## 参数配置 2D项目创建对话框提供了多个参数的配置选项,主要包括: - **任务名称**:用户定义的任务标识名称 - **测试地点**:勘探任务的地理位置描述 - **测试方式**:包括电阻率(RES)、激电(IP)和自电(SP)三种模式 - **装置类型**:定义电极排列方式,如温纳、施伦贝谢等 - **测试脚本**:预定义的测量序列和参数配置 - **迭代次数**:测量数据的叠加次数,用于提高信噪比 - **发射周期**:电流发射的时间周期 - **电缆布线方式**:电缆的连接和部署方式 - **电极间距**:相邻电极之间的距离 - **采样间隔**:数据采集的时间间隔(毫秒) 这些参数共同定义了2D勘探任务的测量配置,确保数据采集的准确性和一致性。 **Section sources** - [DialNew2DTask.cpp](file://cpp/Views/DialNew2DTask.cpp#L80-L237) - [TaskDataOper.h](file://h/TaskDataOper.h#L40-L82) ## 控件交互逻辑 `DialNew2DTask`对话框中的控件具有复杂的交互逻辑,特别是装置类型变化时对脚本和电缆布线方式的动态过滤机制。 ### 装置类型变化事件 当用户选择不同的装置类型时,系统会触发`OnSelchangeCombo2dArray`事件处理函数,该函数执行以下操作: 1. 清空测试脚本下拉框 2. 根据选定的装置类型查询可用的测试脚本 3. 动态填充测试脚本下拉框 4. 根据装置类型显示或隐藏孔间距输入框 ```mermaid flowchart TD A[用户选择装置类型] --> B{装置类型为跨孔测量?} B --> |是| C[显示孔间距输入框] B --> |否| D[隐藏孔间距输入框] E[查询对应装置类型的测试脚本] --> F[填充测试脚本下拉框] G{装置类型为Geomative跨孔?} --> |是| H[禁用起始/结束电极输入] G --> |否| I[启用起始/结束电极输入] ``` **Diagram sources** - [DialNew2DTask.cpp](file://cpp/Views/DialNew2DTask.cpp#L239-L274) ### 测试方式变化事件 当测试方式(电阻率、激电、自电)发生变化时,系统会动态过滤电缆布线方式和发射周期选项: - 电阻率模式:过滤掉激电专用的布线方式 - 激电模式:过滤掉电阻率专用的布线方式 - 自电模式:显示所有布线方式但禁用发射周期 ```mermaid flowchart TD A[用户选择测试方式] --> B{测试方式为激电?} B --> |是| C[过滤电阻率布线方式] B --> |否| D{测试方式为电阻率?} D --> |是| E[过滤激电布线方式] D --> |否| F[显示所有布线方式] G[更新发射周期选项] --> H[根据测试方式启用/禁用] ``` **Diagram sources** - [DialNew2DTask.cpp](file://cpp/Views/DialNew2DTask.cpp#L312-L411) ## 跨孔测量模式约束 在跨孔测量模式下,系统对孔间距与电极间距存在严格的约束关系: 1. 当装置类型为跨孔测量(AR_CROSS_HOLE_TYPE)时,孔间距输入框会被显示 2. 系统会验证孔间距必须大于电极间距 3. 如果孔间距小于或等于电极间距,系统会弹出错误提示 ```mermaid flowchart TD A["用户选择跨孔装置类型"] --> B["显示孔间距输入框"] C["用户输入孔间距和电极间距"] --> D{"孔间距 > 电极间距?"} D --> |是| E["参数有效,继续"] D --> |否| F["显示错误提示: \"孔间距必须大于电极间距\""] ``` 这种约束确保了跨孔测量的物理可行性,防止用户配置不合理的参数。 **Section sources** - [DialNew2DTask.cpp](file://cpp/Views/DialNew2DTask.cpp#L530-L560) ## 测试脚本选择机制 当用户选择测试脚本后,系统会自动填充电极范围和层数,实现原理如下: 1. 调用`Query2DSptInfo`函数查询脚本的最小和最大层 2. 调用`QuerySptElecTpMount`函数查询脚本的电极数量和测量点数 3. 自动设置起始电极为1,结束电极为最大电极数 4. 填充起始层和结束层的值 ```mermaid sequenceDiagram participant User as 用户 participant Dialog as DialNew2DTask对话框 participant TaskOper as CTaskDataOper User->>Dialog : 选择测试脚本 Dialog->>TaskOper : Query2DSptInfo(iSptID) TaskOper-->>Dialog : 返回最小/最大层 Dialog->>TaskOper : QuerySptElecTpMount(iSptID) TaskOper-->>Dialog : 返回电极数量 Dialog->>Dialog : 设置起始电极为1 Dialog->>Dialog : 设置结束电极为最大电极数 Dialog->>Dialog : 填充层范围 ``` **Diagram sources** - [DialNew2DTask.cpp](file://cpp/Views/DialNew2DTask.cpp#L276-L309) - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp#L986-L1019) ## 接地电阻测试选项 接地电阻测试选项具有以下默认行为和可配置性: - **默认行为**:默认启用接地电阻测试(`((CButton*)GetDlgItem(IDC_IF_TEST_GR))->SetCheck(TRUE);`) - **用户可配置性**:用户可以通过复选框启用或禁用接地电阻测试 - **参数传递**:选中状态会作为`ucTestGRFlag`参数传递给任务创建函数 ```mermaid flowchart TD A[对话框初始化] --> B[默认选中接地电阻测试] C[用户操作] --> D{用户取消选中?} D --> |是| E[ucTestGRFlag = 0] D --> |否| F[ucTestGRFlag = 1] G[创建任务] --> H[将ucTestGRFlag写入任务参数] ``` 这种设计既保证了常规情况下进行接地电阻测试,又允许用户根据实际需求关闭该功能。 **Section sources** - [DialNew2DTask.cpp](file://cpp/Views/DialNew2DTask.cpp#L233-L235) - [TaskDataOper.h](file://h/TaskDataOper.h#L66-L80)