SSProcessManager 是 SunvStation 地理信息系统中的核心进程管理类，提供了对工作空间、地图、几何对象选择与编辑的完整操作能力。该类通过 Mixin 设计模式将功能模块化，为高级开发者提供了灵活且强大的地理数据处理接口。本文档将系统性地介绍 SSProcessManager 的完整 API 接口、架构设计以及使用方法。

## 核心架构设计

SSProcessManager 采用多重继承的 Mixin 设计模式，将复杂的功能拆分为五个独立的模块，每个模块负责特定的领域功能。这种设计使得代码具有高度的可维护性和扩展性，同时保持了良好的关注点分离原则。

### 类继承结构

```mermaid
classDiagram
    class SSProcessManager {
        +workspace: WorkSpace
        +map: ScaleMap
        +selGeoList: GeoBaseList
        +selNoteList: GeoBaseList
        +bufferObjList: GeoBaseList
        +curNewObj: tuple
        +logger: Logger
        +progress: Progress
        -__init__()
    }
    
    class SelectionMixin {
        +clearSelection()
        +clearSelectCondition()
        +setSelectCondition()
        +selectFilter()
        +getSelGeoCount()
        +getSelGeoValue()
        +setSelGeoValue()
        +updateSysSelection()
    }
    
    class GeoEditMixin {
        +createDefaultGeoBase()
        +createNewObjByCode()
        +createNewObjByClass()
        +setNewObjValue()
        +addNewObjPoint()
        +saveBufferObjToDatabase()
        +explodeGeoObject()
    }
    
    class ProjectMixin {
        +getWorkspace()
        +getCurrentMap()
        +getSysPathName()
        +getLayerCount()
        +setLayerStatus()
        +pushUndoMark()
    }
    
    class LogMixin {
        +set_logger()
        +log_error_msg()
    }
    
    class ProgressMixin {
        +disable_progress()
        +startProgress()
        +stepProgress()
        +closeProgress()
    }
    
    SSProcessManager --> SelectionMixin
    SSProcessManager --> GeoEditMixin
    SSProcessManager --> ProjectMixin
    SSProcessManager --> LogMixin
    SSProcessManager --> ProgressMixin
```

### 模块职责划分

**SelectionMixin** - 负责选择集管理，提供条件过滤、属性读写和系统选择集同步功能
**GeoEditMixin** - 负责地理对象编辑，包括对象创建、属性设置、缓存管理和打散操作
**ProjectMixin** - 负责项目和工作空间管理，包括图层控制、路径管理和地图帧操作
**LogMixin** - 负责日志记录，提供统一的错误日志接口
**ProgressMixin** - 负责进度条管理，提供可视化进度反馈

Sources: [PySSProcess.py](PySSProcess.py#L40-L63)

## 选择集操作 API

选择集操作是 SSProcessManager 的核心功能之一，提供了强大的条件查询和属性管理能力。选择集分为脚本选择集和系统选择集，两者可以通过特定方法进行双向同步。

### 基础选择集管理

`clearSelection()` - 清除脚本选择集中的全部点线面和注记对象。此方法不会影响地图显示的选择集，仅清理脚本内部的缓存。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L36-L43)

`clearSelectCondition()` - 清除所有已设置的选择条件。在执行新的查询前，通常需要调用此方法以避免条件累积。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L45-L52)

`clearSysSelection()` - 清除地图上的系统选择集并触发选择变更事件。此方法会影响地图的显示状态。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L139-L142)

### 条件设置与过滤

`setSelectCondition(conditionName, operateMode, conditionValue)` - 向选择条件集合中添加过滤条件。条件支持三种类型：

| 条件类型 | 前缀符号 | 示例 | 说明 |
|---------|---------|------|------|
| 基本属性 | SSObj_ | SSObj_Code, SSObj_Name | 对象固有属性 |
| 几何特性 | <> | <Overlap>, <Close> | 几何拓扑关系 |
| 扩展属性 | [] | [JG], [CS] | 用户自定义属性 |

支持的运算符包括：`==`, `>`, `<`, `<>`, `LIKE`, `NOT LIKE`, `CompareNoCase`（不区分大小写比较）, `Dec`（小数位控制）

Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L54-L122)

`selectFilter()` - 执行选择集过滤操作。该方法会清除旧的字段缓存，根据当前设置的条件从数据源中筛选对象，并将结果分类存储到 `selGeoList`（点线面）和 `selNoteList`（注记）中。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L124-L145)

### 选择集查询

`getSelGeoCount()` - 返回脚本选择集中点线面对象的数量。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L147-L154)

`getSelNoteCount()` - 返回脚本选择集中注记对象的数量。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L156-L163)

`getSysSelGeoList()` - 获取地图当前选中的几何对象列表。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L166-L177)

`getSysSelNoteList()` - 获取地图当前选中的注记对象列表。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L179-L190)

### 属性读写

`getSelGeoValue(index, fieldName)` - 获取选择集中指定索引对象的属性值。该方法会自动识别属性类型：

- **基本属性**：以 `SSObj_` 开头，直接通过 `ObjBaseAttr` 获取
- **扩展属性**：以 `[]` 包裹，从扩展属性表中查询
- **多属性查询**：支持使用逗号分隔多个属性名，如 `[JG,CS]`

Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L175-L219)

`getSelNoteValue(index, fieldName)` - 获取注记对象的属性值，方法与 `getSelGeoValue` 类似。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L221-L265)

`setSelGeoValue(index, fieldName, value)` - 设置选择集中指定对象的属性值。特殊处理：

- **SSObj_Code**：修改对象编码时直接设置整数值
- **SSObj_LayerName**：修改图层时需要克隆对象、删除原始对象并创建新对象，同时保留扩展属性
- **其他属性**：通过 `ObjBaseAttr` 统一处理

Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L267-L320)

`setSelNoteValue(index, fieldName, value)` - 设置注记对象的属性值。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L322-L375)

### 坐标操作

`getSelGeoPoint(index, pointIndex)` - 获取选择集中指定对象的指定点坐标。返回值为 `Point3D` 对象。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L385-L400)

`deleteSelGeoPoint(index, pointIndex)` - 删除选择集中指定对象的指定点。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L541-L553)

### 选择集同步

`updateSysSelection(mode)` - 实现脚本选择集与系统选择集的双向同步。mode 参数控制同步方向：

| mode | 同步方向 | 说明 |
|------|---------|------|
| 0 | 系统 → 脚本 | 从地图选择集同步到脚本选择集 |
| 1 | 脚本 → 系统 | 从脚本选择集同步到地图选择集（更新显示） |
| 2 | 脚本 → 系统 | 从脚本选择集同步到地图选择集（不更新显示） |

Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L147-L168)

## 地理对象编辑 API

地理对象编辑模块提供了完整的对象生命周期管理能力，包括创建、修改、缓存和持久化等操作。

### 对象创建

`createDefaultGeoBase(obj_type, dataset)` - 创建基础几何对象。obj_type 参数指定对象类型：

| obj_type | 几何类型 | 对应类 |
|----------|---------|--------|
| 0 | 点 | PointObject |
| 1 | 线 | LineObject |
| 2 | 面 | AreaObject |
| 3 | 注记 | MarkNote |

返回值为包含 `GeoObject` 和具体几何对象的元组。Sources: [geo_edit_mixin.py](ssprocess_mixins/geo_edit_mixin.py#L62-L89)

`createNewObjByCode(code)` - 根据要素代码创建新对象。该方法会自动查询要素代码表，获取对应的数据集、对象类型和样式属性，并创建完整的几何对象。创建成功后会更新 `curNewObj` 成员变量。Sources: [geo_edit_mixin.py](ssprocess_mixins/geo_edit_mixin.py#L113-L154)

`createNewObjByClass(noteClass)` - 根据注记分类号创建新注记对象。该方法会从注记模板表中获取模板，创建注记对象并应用模板样式。Sources: [geo_edit_mixin.py](ssprocess_mixins/geo_edit_mixin.py#L156-L180)

### 新建对象操作

`setNewObjValue(fieldName, value)` - 设置当前新建对象的属性值。该方法支持批量属性设置，用逗号分隔多个属性名和值。属性类型自动识别：

- **扩展属性**：以 `[]` 包裹，直接设置到 memoData
- **基本属性**：以 `SSObj_` 开头，调用对应设置方法
- **注记专属属性**：仅当对象类型为注记时有效

Sources: [geo_edit_mixin.py](ssprocess_mixins/geo_edit_mixin.py#L182-L349)

`addNewObjPoint(x, y, z, type, name)` - 向当前新建对象添加坐标点。type 参数使用二进制位存储点信息枚举。Sources: [geo_edit_mixin.py](ssprocess_mixins/geo_edit_mixin.py#L351-L371)

`deleteNewObj()` - 删除当前新建对象并清理 `curNewObj` 成员变量。Sources: [geo_edit_mixin.py](ssprocess_mixins/geo_edit_mixin.py#L373-L382)

`addNewObjToSelObjList()` - 将当前新建对象添加到脚本选择集。Sources: [geo_edit_mixin.py](ssprocess_mixins/geo_edit_mixin.py#L384-L394)

`addNewObjToSaveObjList()` - 将当前新建对象添加到持久化保存列表。Sources: [geo_edit_mixin.py](ssprocess_mixins/geo_edit_mixin.py#L396-L407)

### 缓存与持久化

`saveBufferObjToDatabase()` - 将缓存的对象批量保存到数据库。该方法处理三种缓存类型：

1. **新建对象缓存**：`newBufferObjList` 和 `newBufferNoteList`
2. **修改对象缓存**：`bufferObjList` 和 `bufferNoteList`
3. **删除对象缓存**：`delBufferGeoList`

保存时会将 memoData 转换为扩展属性，确保数据完整性。Sources: [geo_edit_mixin.py](ssprocess_mixins/geo_edit_mixin.py#L427-L456)

`transMemoDataToExtendAttr(geoList)` - 将几何对象的备忘数据转换为扩展属性。该方法使用事务模式批量更新，提高性能。Sources: [geo_edit_mixin.py](ssprocess_mixins/geo_edit_mixin.py#L409-L424)

`addSelGeoToSaveGeoList(index)` - 将选择集中的几何对象添加到保存缓存。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L555-L566)

`addSelNoteToSaveNoteList(index)` - 将选择集中的注记对象添加到保存缓存。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L568-L579)

### 对象重置

`resetSelGeoByCode(index, code)` - 根据要素代码重置选择集中的几何对象。该方法会：

1. 查询新代码对应的特征信息
2. 如果在相同数据集，仅修改代码
3. 如果在不同数据集，创建新对象并复制几何和扩展属性
4. 将旧对象加入删除缓存，新对象加入新建缓存

Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L381-L451)

`resetSelNoteByClass(index, noteClass)` - 根据注记分类号重置选择集中的注记对象。逻辑与 `resetSelGeoByCode` 类似，但处理注记特有属性。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L453-L511)

### 对象打散

`explodeGeoObject(geo, explodeWay, callback)` - 将几何对象打散为多个子对象。explodeWay 参数控制打散方式：

| explodeWay | 打散方式 | 说明 |
|-----------|---------|------|
| 0 | 图形打散 | 保持颜色，打散为基本图形 |
| 1 | 按编码表打散 | 根据符号表进行分解 |
| 11 | 拆分为线 | 转换为线对象列表 |
| 12 | 拆分环 | 按环拆分复杂多边形 |

callback 参数为回调函数名，用于处理打散后的对象。Sources: [geo_edit_mixin.py](ssprocess_mixins/geo_edit_mixin.py#L577-L762)

`explodeNoteObject(note, forExchange, callback)` - 将注记对象打散为多个子注记。Sources: [geo_edit_mixin.py](ssprocess_mixins/geo_edit_mixin.py#L509-L576)

`explodeSelectionObj(explodeWay, delSrcObj, callback)` - 批量打散选择集中的所有对象。delSrcObj 参数控制是否删除原始对象。Sources: [selection_mixin.py](ssprocess_mixins/selection_mixin.py#L600-L655)

### 辅助计算

`getPolar(pt0, pt1)` - 计算两点之间的距离和角度。返回值为 `(距离, 角度)` 元组。Sources: [geo_edit_mixin.py](ssprocess_mixins/geo_edit_mixin.py#L91-L105)

`getPoint(pt0, dist, angle)` - 根据起点、距离和角度计算终点坐标。返回值为 `Point3D` 对象。Sources: [geo_edit_mixin.py](ssprocess_mixins/geo_edit_mixin.py#L107-L119)

`getObjectAttr(objId, attrField)` - 根据对象 ID 获取属性值。该方法会先查询对象是否存在，然后读取指定属性。Sources: [geo_edit_mixin.py](ssprocess_mixins/geo_edit_mixin.py#L458-L507)

## 项目与工作空间 API

项目模块提供了对 SunvStation 工作空间和地图环境的高级访问能力，包括图层管理、路径操作和地图帧控制等功能。

### 工作空间与地图

`getWorkspace()` - 获取当前工作空间实例。工作空间是 SunvStation 数据组织的顶层容器。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L22-L32)

`getCurrentMap()` - 获取当前比例尺地图实例。地图是地理对象的显示和管理容器。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L34-L43)

`pushUndoMark(action)` - 创建撤销标记。在执行可撤销操作前调用此方法，action 参数描述操作名称，默认为 "CommandGroup"。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L45-L58)

### 系统路径管理

`getSysPathName(mode)` - 根据模式获取系统路径。mode 参数支持的路径类型：

| mode | 路径类型 | 说明 |
|------|---------|------|
| 0 | 配置路径 | GlobalOptions 配置目录 |
| 1 | 模板路径 | 系统模板目录 |
| 2 | Comm路径 | 通用文件目录 |
| 3 | Script路径 | 脚本文件目录 |
| 4 | SSTemp路径 | 临时文件目录 |
| 5 | 工程文件路径 | 当前工程所在目录 |
| 6 | 系统目录 | Windows/System32 或 /usr |
| 7/8 | 方案路径 | 当前方案文件目录 |

Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L60-L118)

### 图层管理

`getLayerCount()` - 获取当前地图中的图层数量。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L175-L184)

`getLayerName(index)` - 获取指定索引的图层名称。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L186-L198)

`setLayerStatus(layerName, status, type)` - 设置图层状态。type 参数控制状态类型：

| type | 控制类型 | status 含义 |
|------|---------|------------|
| 1 | 图层显示 | True=可见，False=隐藏 |
| 2 | 编辑锁定 | True=锁定，False=解锁 |

Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L200-L215)

### 地图帧操作

`createMapFrame()` - 创建地图帧。该方法会计算地图范围并生成地图帧点列表。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L120-L149)

`getMapFrameCount()` - 获取地图帧数量。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L151-L154)

`getMapFrameCenterPoint(index)` - 获取指定地图帧的中心点坐标。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L156-L163)

`setCurMapFrame(x, y)` - 设置当前地图帧。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L165-L171)

`getCurMapFrame()` - 获取当前地图帧的对象 ID。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L173-L178)

`getMapFrameNumber(x, y)` - 获取指定坐标所在的地图帧编号。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L180-L186)

`freeMapFrame()` - 释放地图帧缓存。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L188-L190)

### 系统表管理

`getFeatureCodeTB()` - 获取当前要素代码表名称。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L217-L226)

`getSymbolScriptTB()` - 获取当前符号表名称。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L228-L237)

`getNoteTemplateTB()` - 获取当前注记模板表名称。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L239-L248)

`setFeatureCodeTB(featureCodeTB, symbolScriptTB)` - 设置要素代码表和符号表。如果与当前设置不同，会重新加载并触发系统表变更事件。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L250-L262)

`setNoteTemplateTB(noteTemplateTB)` - 设置注记模板表。Sources: [project_mixin.py](ssprocess_mixins/project_mixin.py#L264-L273)

## 进度与日志 API

进度和日志模块为长时间操作提供了用户反馈和错误跟踪能力。

### 进度条管理

`disable_progress()` - 禁用进度条显示并立即关闭当前进度条。Sources: [progress_mixin.py](ssprocess_mixins/progress_mixin.py#L35-L44)

`startProgress(title, total)` - 创建并启动进度条。title 为进度条标题，total 为总进度值。Sources: [progress_mixin.py](ssprocess_mixins/progress_mixin.py#L46-L58)

`stepProgress(message)` - 更新进度条。message 为当前步骤描述信息。Sources: [progress_mixin.py](ssprocess_mixins/progress_mixin.py#L60-L70)

`closeProgress()` - 关闭进度条。Sources: [progress_mixin.py](ssprocess_mixins/progress_mixin.py#L72-L78)

### 日志记录

`set_logger(logger)` - 设置日志记录器实例。Sources: [log_mixin.py](ssprocess_mixins/log_mixin.py#L34-L37)

`log_error_msg(error_msg)` - 记录错误日志。如果设置了 logger，调用 logger.error()；否则使用 print 输出。Sources: [log_mixin.py](ssprocess_mixins/log_mixin.py#L39-L42)

## 完整 API 参考表

下表列出了 SSProcessManager 的所有公共方法及其所属模块：

| 方法名 | 所属模块 | 功能描述 | 返回值 |
|--------|---------|---------|--------|
| **选择集操作** |
| `clearSelection()` | SelectionMixin | 清除脚本选择集 | None |
| `clearSelectCondition()` | SelectionMixin | 清除选择条件 | None |
| `setSelectCondition(name, mode, value)` | SelectionMixin | 添加选择条件 | None |
| `selectFilter()` | SelectionMixin | 执行过滤查询 | None |
| `getSelGeoCount()` | SelectionMixin | 获取点线面对象数量 | int |
| `getSelNoteCount()` | SelectionMixin | 获取注记对象数量 | int |
| `getSelGeoValue(index, fieldName)` | SelectionMixin | 获取几何对象属性 | str |
| `getSelNoteValue(index, fieldName)` | SelectionMixin | 获取注记对象属性 | str |
| `setSelGeoValue(index, fieldName, value)` | SelectionMixin | 设置几何对象属性 | None |
| `setSelNoteValue(index, fieldName, value)` | SelectionMixin | 设置注记对象属性 | None |
| `getSelGeoPoint(index, pointIndex)` | SelectionMixin | 获取坐标点 | Point3D |
| `deleteSelGeoPoint(index, pointIndex)` | SelectionMixin | 删除坐标点 | bool |
| `updateSysSelection(mode)` | SelectionMixin | 同步选择集 | None |
| `getSysSelGeoList()` | SelectionMixin | 获取系统几何选择集 | GeoBaseList |
| `getSysSelNoteList()` | SelectionMixin | 获取系统注记选择集 | GeoBaseList |
| `clearSysSelection()` | SelectionMixin | 清除系统选择集 | None |
| `resetSelGeoByCode(index, code)` | SelectionMixin | 按代码重置对象 | bool |
| `resetSelNoteByClass(index, noteClass)` | SelectionMixin | 按分类重置注记 | bool |
| `addSelGeoToSaveGeoList(index)` | SelectionMixin | 添加到保存列表 | None |
| `addSelNoteToSaveNoteList(index)` | SelectionMixin | 添加注记到保存列表 | None |
| `explodeSelectionObj(explodeWay, delSrcObj, callback)` | SelectionMixin | 批量打散对象 | bool |
| **对象编辑** |
| `createDefaultGeoBase(obj_type, dataset)` | GeoEditMixin | 创建基础几何对象 | tuple |
| `createNewObjByCode(code)` | GeoEditMixin | 按代码创建对象 | tuple |
| `createNewObjByClass(noteClass)` | GeoEditMixin | 按分类创建注记 | tuple |
| `setNewObjValue(fieldName, value)` | GeoEditMixin | 设置新建对象属性 | bool |
| `addNewObjPoint(x, y, z, type, name)` | GeoEditMixin | 添加坐标点 | bool |
| `deleteNewObj()` | GeoEditMixin | 删除新建对象 | None |
| `addNewObjToSelObjList()` | GeoEditMixin | 添加到选择集 | None |
| `addNewObjToSaveObjList()` | GeoEditMixin | 添加到保存列表 | None |
| `saveBufferObjToDatabase()` | GeoEditMixin | 保存缓存到数据库 | None |
| `transMemoDataToExtendAttr(geoList)` | GeoEditMixin | 转换扩展属性 | None |
| `explodeGeoObject(geo, explodeWay, callback)` | GeoEditMixin | 打散几何对象 | tuple |
| `explodeNoteObject(note, forExchange, callback)` | GeoEditMixin | 打散注记对象 | tuple |
| `getPolar(pt0, pt1)` | GeoEditMixin | 计算距离和角度 | tuple |
| `getPoint(pt0, dist, angle)` | GeoEditMixin | 计算终点坐标 | Point3D |
| `getObjectAttr(objId, attrField)` | GeoEditMixin | 获取对象属性 | str |
| **项目工作空间** |
| `getWorkspace()` | ProjectMixin | 获取工作空间实例 | WorkSpace |
| `getCurrentMap()` | ProjectMixin | 获取地图实例 | ScaleMap |
| `pushUndoMark(action)` | ProjectMixin | 创建撤销标记 | None |
| `getSysPathName(mode)` | ProjectMixin | 获取系统路径 | str |
| `getLayerCount()` | ProjectMixin | 获取图层数量 | int |
| `getLayerName(index)` | ProjectMixin | 获取图层名称 | str |
| `setLayerStatus(name, status, type)` | ProjectMixin | 设置图层状态 | bool |
| `createMapFrame()` | ProjectMixin | 创建地图帧 | bool |
| `getMapFrameCount()` | ProjectMixin | 获取地图帧数量 | int |
| `getMapFrameCenterPoint(index)` | ProjectMixin | 获取地图帧中心点 | tuple |
| `setCurMapFrame(x, y)` | ProjectMixin | 设置当前地图帧 | GeoBase |
| `getCurMapFrame()` | ProjectMixin | 获取当前地图帧ID | int |
| `getMapFrameNumber(x, y)` | ProjectMixin | 获取地图帧编号 | int |
| `freeMapFrame()` | ProjectMixin | 释放地图帧缓存 | None |
| `getFeatureCodeTB()` | ProjectMixin | 获取要素代码表名 | str |
| `getSymbolScriptTB()` | ProjectMixin | 获取符号表名 | str |
| `getNoteTemplateTB()` | ProjectMixin | 获取注记模板表名 | str |
| `setFeatureCodeTB(featTB, symTB)` | ProjectMixin | 设置要素代码表 | bool |
| `setNoteTemplateTB(noteTB)` | ProjectMixin | 设置注记模板表 | bool |
| **进度与日志** |
| `disable_progress()` | ProgressMixin | 禁用进度条 | None |
| `startProgress(title, total)` | ProgressMixin | 启动进度条 | None |
| `stepProgress(message)` | ProgressMixin | 更新进度条 | None |
| `closeProgress()` | ProgressMixin | 关闭进度条 | None |
| `set_logger(logger)` | LogMixin | 设置日志记录器 | None |
| `log_error_msg(error_msg)` | LogMixin | 记录错误日志 | None |

Sources: [PySSProcess.py](PySSProcess.py#L1-L140)

## 实例化与使用

SSProcessManager 提供了一个全局单例 `SSProcess`，供开发者直接使用：

```python
from sunvpy.PySSProcess import SSProcess

# 清除选择条件和选择集
SSProcess.clearSelectCondition()
SSProcess.clearSelection()

# 设置选择条件并执行过滤
SSProcess.setSelectCondition("SSObj_Code", "==", "3103013")
SSProcess.selectFilter()

# 遍历选择集
count = SSProcess.getSelGeoCount()
for i in range(count):
    code = SSProcess.getSelGeoValue(i, "SSObj_Code")
    name = SSProcess.getSelGeoValue(i, "SSObj_Name")
    print(f"对象 {i}: 编码={code}, 名称={name}")
    
    # 修改属性
    SSProcess.setSelGeoValue(i, "SSObj_Name", f"新名称_{i}")
    
    # 添加到保存列表
    SSProcess.addSelGeoToSaveGeoList(i)

# 批量保存到数据库
SSProcess.pushUndoMark("批量修改属性")
SSProcess.saveBufferObjToDatabase()
```

Sources: [PySSProcess.py](PySSProcess.py#L110-L140)

## 相关文档

要深入了解特定功能模块，请参考以下文档：

- [使用 SSProcess 管理选择集](4-shi-yong-ssprocess-guan-li-xuan-ze-ji) - 选择集操作的最佳实践和示例
- [创建默认地物对象](19-chuang-jian-mo-ren-di-wu-dui-xiang) - 对象创建的详细教程
- [批量保存到数据库](24-pi-liang-bao-cun-dao-shu-ju-ku) - 缓存机制和批量保存策略
- [撤销标记管理](25-che-xiao-biao-ji-guan-li) - 撤销功能的实现原理
- [配置日志记录器](37-pei-zhi-ri-zhi-ji-lu-qi) - 日志系统的配置方法
- [进度条使用指南](38-jin-du-tiao-shi-yong-zhi-nan) - 进度反馈的最佳实践