Files
geomative/GeomativeStudio/.qoder/repowiki/zh/content/API参考/脚本管理API.md
T
coco df489d5640 a
2026-07-03 16:05:30 +08:00

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类的统一接口,实现了脚本创建、管理和持久化的完整生命周期管理。建议在大规模脚本生成时采用批量处理和事务优化策略,以提高系统性能和稳定性。