9.8 KiB
SptManager
**本文档引用的文件** - [SptManager.cpp](file://cpp/Managers/SptManager.cpp) - [SptManager.h](file://h/SptManager.h) - [Script2D.cpp](file://cpp/ProblemZone/Script2D.cpp) - [Script3D.cpp](file://cpp/ProblemZone/Script3D.cpp) - [ScriptCE.cpp](file://cpp/ProblemZone/ScriptCE.cpp) - [Script.h](file://h/Script.h) - [ProManager.cpp](file://cpp/Managers/ProManager.cpp) - [testzone.xml](file://CACHE/testzone.xml)目录
引言
SptManager模块是Geomative Studio软件中的核心组件,负责生成和管理各种测量脚本(包括2D、3D和跨孔测量)。该模块根据ProManager中定义的项目和测区信息,调用Script2D、Script3D、ScriptCE等具体类来生成符合测量协议的脚本数据。SptManager不仅处理脚本的创建和验证,还负责脚本的存储(如testzone.xml)和导出流程。本文档将深入分析SptManager的职责和实现,提供脚本生成失败或逻辑错误的排查方法,并通过代码示例展示从测区参数到最终脚本数据的转换过程。
项目结构
SptManager模块位于cpp/Managers/目录下,其主要功能是通过调用不同类型的脚本类(如Script2D、Script3D、ScriptCE)来生成测量脚本。这些脚本类位于cpp/ProblemZone/目录下,每个类负责特定类型的测量脚本生成。SptManager还与ProManager模块紧密协作,获取项目和测区信息,确保生成的脚本符合实际测量需求。
graph TB
subgraph "核心模块"
SptManager[SptManager]
ProManager[ProManager]
end
subgraph "脚本生成类"
Script2D[Script2D]
Script3D[Script3D]
ScriptCE[ScriptCE]
end
SptManager --> ProManager
SptManager --> Script2D
SptManager --> Script3D
SptManager --> ScriptCE
图表来源
章节来源
核心组件
SptManager的核心功能包括脚本的创建、验证、存储和导出。它通过Create2DSConInDB、CreateCESConInDB等方法创建不同类型的测量脚本,并将这些脚本存储在数据库中。SptManager还负责将脚本导出到设备,并从设备加载脚本。
章节来源
架构概述
SptManager的架构设计遵循模块化原则,通过继承和多态机制实现不同类型的脚本生成。CScript类作为基类,定义了所有脚本的通用接口,而CScript2D、CScript3D、CScriptCE等派生类则实现了特定类型的脚本生成逻辑。SptManager通过GetScript方法根据句柄动态创建相应的脚本对象,实现了灵活的脚本管理。
classDiagram
class CScript {
+DWORD m_dwID
+_ConnectionPtr m_pConnection
+int m_iAR
+int m_iEAmount
+CScript(DWORD dwID, _ConnectionPtr& pConnection)
+~CScript()
+virtual bool ShowSptDetailInfo(CListCtrl &sptDetailList)
+virtual bool ShowChannelList(CListCtrl &sptChannelList)
+virtual bool ShowSptConInfo(CListCtrl &sptConList)
+virtual void AdjustRecListColumn(int iAR, CListCtrl& sptConListInfo)
}
class CScript2D {
+CScript2D(DWORD dwID, _ConnectionPtr& pConnection)
+~CScript2D()
+bool ShowSptDetailInfo(CListCtrl &sptDetailList)
+bool ShowChannelList(CListCtrl &sptChannelList)
+bool ShowSptConInfo(CListCtrl &sptConList)
+void AdjustRecListColumn(int iAR, CListCtrl& sptConListInfo)
}
class CScript3D {
+CScript3D(DWORD dwID, _ConnectionPtr& pConnection)
+~CScript3D()
+bool ShowSptDetailInfo(CListCtrl &sptDetailList)
+bool ShowChannelList(CListCtrl &sptChannelList)
+bool ShowSptConInfo(CListCtrl &sptConList)
+void AdjustRecListColumn(int iAR, CListCtrl& sptConListInfo)
}
class CScriptCE {
+CScriptCE(DWORD dwID, _ConnectionPtr& pConnection)
+~CScriptCE()
+bool ShowSptDetailInfo(CListCtrl &sptDetailList)
+bool ShowChannelList(CListCtrl &sptChannelList)
+bool ShowSptConInfo(CListCtrl &sptConList)
}
CScript <|-- CScript2D
CScript <|-- CScript3D
CScript <|-- CScriptCE
图表来源
详细组件分析
SptManager分析
SptManager模块的主要职责是协调脚本的生成和管理。它通过Create2DSConInDB方法创建2D测量脚本,通过CreateCESConInDB方法创建跨孔测量脚本。这些方法首先通过对话框获取用户输入的脚本参数,然后在数据库中创建相应的记录。
脚本创建流程
sequenceDiagram
participant 用户 as "用户"
participant SptManager as "SptManager"
participant 数据库 as "数据库"
用户->>SptManager : 请求创建2D脚本
SptManager->>SptManager : 显示创建对话框
SptManager->>用户 : 获取脚本参数
SptManager->>数据库 : 检查脚本名称是否已存在
alt 脚本名称已存在
数据库-->>SptManager : 返回存在
SptManager-->>用户 : 显示错误消息
else 脚本名称不存在
数据库-->>SptManager : 返回不存在
SptManager->>数据库 : 插入scon记录
SptManager->>数据库 : 插入channel记录
SptManager->>数据库 : 插入script2d记录
数据库-->>SptManager : 确认插入成功
SptManager-->>用户 : 显示成功消息
end
图表来源
脚本验证与存储
SptManager在创建脚本时会进行严格的验证,确保脚本名称的唯一性。如果脚本名称已存在,系统会提示用户并取消创建操作。脚本数据存储在数据库的scon、channel和script2d表中,其中scon表存储脚本的基本信息,channel表存储通道信息,script2d表存储具体的测量点数据。
章节来源
Script2D分析
Script2D类负责生成2D测量脚本。它继承自CScript类,并实现了特定于2D测量的逻辑。Script2D的主要功能包括显示脚本详细信息、显示通道列表和显示脚本配置信息。
显示脚本详细信息
flowchart TD
Start([开始]) --> GetSConData["从scon表获取数据"]
GetSConData --> CheckRecordCount{"记录数 > 0?"}
CheckRecordCount --> |是| SetDetailInfo["设置详细信息"]
CheckRecordCount --> |否| End([结束])
SetDetailInfo --> End
图表来源
显示通道列表
Script2D通过查询channel和medium表来获取通道信息,并将其显示在列表控件中。每个通道的装置类型编号(AR)也会被获取并存储。
章节来源
Script3D分析
Script3D类负责生成3D测量脚本。它的实现与Script2D类似,但针对3D测量的特点进行了优化。Script3D同样实现了显示脚本详细信息、显示通道列表和显示脚本配置信息的功能。
章节来源
ScriptCE分析
ScriptCE类负责生成跨孔测量脚本。它继承自CScript类,并实现了特定于跨孔测量的逻辑。ScriptCE的主要功能包括显示脚本配置信息、显示脚本详细信息和显示通道列表。
章节来源
依赖分析
SptManager模块依赖于多个其他模块和类,包括ProManager、Script2D、Script3D、ScriptCE等。这些依赖关系确保了SptManager能够获取项目和测区信息,并生成符合实际测量需求的脚本。
graph TD
SptManager --> ProManager
SptManager --> Script2D
SptManager --> Script3D
SptManager --> ScriptCE
SptManager --> CMarkup
SptManager --> _ConnectionPtr
图表来源
性能考虑
SptManager在处理大量脚本数据时需要考虑性能问题。为了避免数据库操作的性能瓶颈,SptManager采用了事务处理机制,确保脚本创建的原子性。此外,SptManager还通过缓存机制减少对数据库的频繁访问,提高整体性能。
故障排除指南
当脚本生成失败或出现逻辑错误时,可以按照以下步骤进行排查:
- 检查脚本名称:确保脚本名称在数据库中是唯一的,避免名称冲突。
- 验证数据库连接:确保数据库连接正常,能够正确执行SQL语句。
- 检查参数输入:确认用户输入的脚本参数是否正确,特别是电极数量、通道数量等关键参数。
- 查看日志文件:检查系统日志文件,查找可能的错误信息或异常堆栈。
章节来源
结论
SptManager模块是Geomative Studio软件中不可或缺的一部分,负责生成和管理各种测量脚本。通过深入分析SptManager的职责和实现,我们可以更好地理解其工作原理,并在实际应用中更有效地使用和维护该模块。未来的工作可以进一步优化SptManager的性能,提高脚本生成的效率和可靠性。