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