271 lines
7.9 KiB
Markdown
271 lines
7.9 KiB
Markdown
# 脚本管理API
|
|
|
|
<cite>
|
|
**本文档引用文件**
|
|
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp)
|
|
- [SptManager.h](file://h/SptManager.h)
|
|
- [Script.h](file://h/Script.h)
|
|
- [Script2D.h](file://h/Script2D.h)
|
|
- [Script3D.h](file://h/Script3D.h)
|
|
- [ScriptCE.h](file://h/ScriptCE.h)
|
|
- [Script2D.cpp](file://cpp/ProblemZone/Script2D.cpp)
|
|
- [Script3D.cpp](file://cpp/ProblemZone/Script3D.cpp)
|
|
- [ScriptCE.cpp](file://cpp/ProblemZone/ScriptCE.cpp)
|
|
- [COpCreateSptDlg.h](file://h/opcreatesptdlg.h)
|
|
- [COpCreateCESptDlg.h](file://h/opcreatecesptdlg.h)
|
|
- [OpCreate3DSptDlg.h](file://h/OpCreate3DSptDlg.h)
|
|
</cite>
|
|
|
|
## 目录
|
|
1. [简介](#简介)
|
|
2. [项目结构](#项目结构)
|
|
3. [核心组件](#核心组件)
|
|
4. [架构概述](#架构概述)
|
|
5. [详细组件分析](#详细组件分析)
|
|
6. [依赖分析](#依赖分析)
|
|
7. [性能考虑](#性能考虑)
|
|
8. [故障排除指南](#故障排除指南)
|
|
9. [结论](#结论)
|
|
|
|
## 简介
|
|
本技术文档全面阐述了Geomative Studio中的脚本管理API,重点介绍SptManager类对2D、3D及跨孔测量脚本的生成与管理功能。文档详细说明了Script2D、Script3D和ScriptCE脚本对象的构造过程、配置参数和序列化机制,提供API使用示例,并解释脚本验证规则、依赖关系处理以及与任务执行模块的协同机制。
|
|
|
|
## 项目结构
|
|
脚本管理功能主要位于cpp/Managers和h目录下,相关类文件组织清晰,遵循功能模块化设计原则。
|
|
|
|
```mermaid
|
|
graph TD
|
|
A[脚本管理] --> B[SptManager.cpp/h]
|
|
A --> C[脚本基类]
|
|
C --> D[Script.h/cpp]
|
|
C --> E[Script2D.h/cpp]
|
|
C --> F[Script3D.h/cpp]
|
|
C --> G[ScriptCE.h/cpp]
|
|
A --> H[脚本创建对话框]
|
|
H --> I[opcreatesptdlg.h]
|
|
H --> J[opcreatecesptdlg.h]
|
|
H --> K[OpCreate3DSptDlg.h]
|
|
```
|
|
|
|
**Diagram sources**
|
|
- [SptManager.h](file://h/SptManager.h)
|
|
- [Script.h](file://h/Script.h)
|
|
- [Script2D.h](file://h/Script2D.h)
|
|
- [Script3D.h](file://h/Script3D.h)
|
|
- [ScriptCE.h](file://h/ScriptCE.h)
|
|
|
|
**Section sources**
|
|
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp)
|
|
- [Script2D.cpp](file://cpp/ProblemZone/Script2D.cpp)
|
|
- [Script3D.cpp](file://cpp/ProblemZone/Script3D.cpp)
|
|
- [ScriptCE.cpp](file://cpp/ProblemZone/ScriptCE.cpp)
|
|
|
|
## 核心组件
|
|
脚本管理API的核心是SptManager类,负责创建、管理和操作各种类型的测量脚本。该类通过工厂模式动态创建不同类型的脚本对象(Script2D、Script3D、ScriptCE),并维护脚本对象的生命周期。
|
|
|
|
**Section sources**
|
|
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L127-L157)
|
|
- [SptManager.h](file://h/SptManager.h)
|
|
|
|
## 架构概述
|
|
脚本管理API采用分层架构设计,上层为用户界面交互,中层为业务逻辑处理,底层为数据持久化。
|
|
|
|
```mermaid
|
|
graph TD
|
|
UI[用户界面] --> SptManager[SptManager]
|
|
SptManager --> Script[脚本基类 CScript]
|
|
Script --> Script2D[CScript2D]
|
|
Script --> Script3D[CScript3D]
|
|
Script --> ScriptCE[CScriptCE]
|
|
SptManager --> Database[数据库操作]
|
|
Database --> scon[scon表]
|
|
Database --> channel[channel表]
|
|
Database --> script2d[script2d表]
|
|
Database --> script1d[script1d表]
|
|
```
|
|
|
|
**Diagram sources**
|
|
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp)
|
|
- [Script.h](file://h/Script.h)
|
|
- [Script2D.h](file://h/Script2D.h)
|
|
- [Script3D.h](file://h/Script3D.h)
|
|
- [ScriptCE.h](file://h/ScriptCE.h)
|
|
|
|
## 详细组件分析
|
|
### SptManager类分析
|
|
SptManager类是脚本管理的核心,负责脚本的创建、获取和删除操作。
|
|
|
|
```mermaid
|
|
classDiagram
|
|
class CSptManager {
|
|
+GetScript(dwHandle) CScript*
|
|
+DeleteObjInMem(dwHandle) void
|
|
+Create2DSConInDB(dwSConID) UINT
|
|
+Delete2DSConInDB(dwSConID) void
|
|
+CreateCESConInDB(dwSConID) UINT
|
|
+Create3DSConInDB(dwSConID) UINT
|
|
}
|
|
class CScript {
|
|
+m_iSType int
|
|
+m_iEAmount int
|
|
+m_chaList CLinkList
|
|
}
|
|
class CScript2D {
|
|
+CScript2D(dwID, pConnection)
|
|
}
|
|
class CScript3D {
|
|
+CScript3D(dwID, pConnection)
|
|
}
|
|
class CScriptCE {
|
|
+CScriptCE(dwID, pConnection)
|
|
}
|
|
CSptManager --> CScript : "创建"
|
|
CScript <|-- CScript2D : "继承"
|
|
CScript <|-- CScript3D : "继承"
|
|
CScript <|-- CScriptCE : "继承"
|
|
```
|
|
|
|
**Diagram sources**
|
|
- [SptManager.h](file://h/SptManager.h#L24-L50)
|
|
- [Script.h](file://h/Script.h#L14-L30)
|
|
- [Script2D.h](file://h/Script2D.h#L15-L25)
|
|
- [Script3D.h](file://h/Script3D.h#L15-L25)
|
|
- [ScriptCE.h](file://h/ScriptCE.h#L13-L23)
|
|
|
|
**Section sources**
|
|
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L127-L800)
|
|
|
|
### 脚本对象构造分析
|
|
脚本对象的构造过程涉及用户界面交互、参数验证和数据库持久化。
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
participant User as 用户
|
|
participant SptManager as SptManager
|
|
participant Script as CScript
|
|
participant DB as 数据库
|
|
User->>SptManager : 创建2D脚本
|
|
SptManager->>SptManager : 显示创建对话框
|
|
SptManager->>User : 获取输入参数
|
|
User->>SptManager : 提交参数
|
|
SptManager->>SptManager : 验证脚本名称唯一性
|
|
SptManager->>DB : 开始事务
|
|
SptManager->>DB : 插入scon记录
|
|
DB-->>SptManager : 返回脚本ID
|
|
SptManager->>DB : 插入channel记录
|
|
SptManager->>DB : 插入script2d记录
|
|
SptManager->>DB : 更新测点数量
|
|
SptManager->>DB : 提交事务
|
|
SptManager-->>User : 创建成功
|
|
```
|
|
|
|
**Diagram sources**
|
|
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L257-L487)
|
|
- [opcreatesptdlg.h](file://h/opcreatesptdlg.h)
|
|
|
|
### 脚本序列化机制
|
|
脚本对象通过数据库表进行序列化存储,不同类型的脚本使用不同的数据表。
|
|
|
|
```mermaid
|
|
erDiagram
|
|
scon ||--o{ channel : "包含"
|
|
scon ||--o{ script2d : "包含"
|
|
scon ||--o{ script1d : "包含"
|
|
scon {
|
|
string CN PK
|
|
string Sname
|
|
int Stype
|
|
int Eamount
|
|
int CHamount
|
|
int TPamount
|
|
string definer
|
|
datetime DEdate
|
|
string SCdesc
|
|
string Rect
|
|
string RectLoc
|
|
string PoleDistance
|
|
string PoleStep
|
|
}
|
|
channel {
|
|
int ID PK
|
|
int SCID FK
|
|
int CHnumber
|
|
int AR
|
|
int MaxLayer
|
|
}
|
|
script2d {
|
|
int ID PK
|
|
int CHID FK
|
|
int TSN
|
|
int C1
|
|
int C2
|
|
int P1
|
|
int P2
|
|
float K
|
|
int N
|
|
int Layer
|
|
float XPos
|
|
}
|
|
script1d {
|
|
int ID PK
|
|
int CHID FK
|
|
int TSN
|
|
float a
|
|
float b
|
|
float x
|
|
float y
|
|
float K
|
|
int N
|
|
}
|
|
```
|
|
|
|
**Diagram sources**
|
|
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L363-L380)
|
|
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L714-L720)
|
|
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L741-L749)
|
|
|
|
## 依赖分析
|
|
脚本管理API与其他模块存在紧密的依赖关系。
|
|
|
|
```mermaid
|
|
graph TD
|
|
SptManager --> Database[数据库连接]
|
|
SptManager --> GUI[用户界面组件]
|
|
SptManager --> Medium[介质模型]
|
|
SptManager --> Channel[通道管理]
|
|
SptManager --> ScriptRecord[测点记录]
|
|
SptManager --> GUCodeCreator[GUID生成器]
|
|
Database --> ADO[ADO数据库访问]
|
|
GUI --> MFC[MFC框架]
|
|
Medium --> MediumA[MediumA.h]
|
|
Medium --> MediumB[MediumB.h]
|
|
Medium --> MediumC[MediumC.h]
|
|
```
|
|
|
|
**Diagram sources**
|
|
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L5-L57)
|
|
- [SptManager.h](file://h/SptManager.h)
|
|
|
|
**Section sources**
|
|
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp)
|
|
|
|
## 性能考虑
|
|
在大规模脚本生成时,应注意以下性能优化点:
|
|
1. 批量数据库操作:使用事务处理减少数据库往返次数
|
|
2. 内存管理:及时释放不再使用的脚本对象
|
|
3. 对话框响应:避免在UI线程中执行耗时操作
|
|
4. 数据验证:在用户输入时进行即时验证,减少错误提交
|
|
|
|
## 故障排除指南
|
|
常见问题及解决方案:
|
|
1. 脚本创建失败:检查数据库连接状态和磁盘空间
|
|
2. 脚本名称重复:确保脚本名称在同类型脚本中唯一
|
|
3. 电极布局错误:验证电极数量和布局参数的合理性
|
|
4. 数据库事务失败:检查数据库表结构和约束条件
|
|
|
|
**Section sources**
|
|
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L341-L345)
|
|
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L653-L658)
|
|
|
|
## 结论
|
|
脚本管理API为Geomative Studio提供了强大的测量脚本生成功能,支持2D、3D和跨孔测量等多种模式。通过SptManager类的统一接口,实现了脚本创建、管理和持久化的完整生命周期管理。建议在大规模脚本生成时采用批量处理和事务优化策略,以提高系统性能和稳定性。 |