sunvpy提供了一个内置的示例脚本，帮助初学者快速理解如何使用SSProcess进行地物查询、属性读取和修改操作。这个示例脚本位于PySSProcess模块的`__main__`代码块中，展示了完整的数据处理工作流程，从筛选对象到修改属性再到验证结果的全部过程。

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

## 示例脚本架构概览

内置示例脚本通过一个连贯的演示，将之前学习的选择集管理和属性操作知识整合在一起。该脚本展示了如何在SunvStation环境中执行典型的批量数据处理任务：筛选特定编码的地物对象、查看其属性信息、批量修改多个属性字段，并最终验证修改结果。

```mermaid
graph TB
    A[脚本执行入口] --> B[初始化阶段<br>清理选择集与条件]
    B --> C[筛选阶段<br>按编码过滤地物]
    C --> D[读取阶段<br>遍历并显示原始属性]
    D --> E[修改阶段<br>批量更新属性值]
    E --> F[验证阶段<br>显示修改后属性]

    B --> B1[clearSelection<br>清空选择集]
    B --> B2[clearSelectCondition<br>清空筛选条件]

    C --> C1[setSelectCondition<br>设置编码条件]
    C --> C2[selectFilter<br>执行查询]

    D --> D1[getSelGeoCount<br>获取对象数量]
    D --> D2[getSelGeoValue<br>读取属性值]

    E --> E1[基本属性修改<br>ID/线型/颜色等]
    E --> E2[扩展属性修改<br>#91;JG#93;,#91;CS#93;等]

    F --> F1[二次遍历对象]
    F --> F2[对比显示结果]
```

这个流程图清晰地展示了脚本的四个主要阶段：初始化、筛选、修改和验证。每个阶段都对应一组核心API调用，形成了一个完整的数据处理闭环。

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

## 脚本运行方式

### 方法一：直接执行模块

在Windows命令行中，通过Python解释器直接执行PySSProcess模块文件：

```cmd
python D:\1SunvStationDev\sunvstation-release\build\bin\Release\script\python313\Lib\site-packages\sunvpy\PySSProcess.py
```

这种方式的优点是简单直接，无需额外代码即可运行示例。

### 方法二：从Python脚本导入

创建一个Python脚本文件（如`run_example.py`），通过导入执行：

```python
import sunvpy.PySSProcess
```

这种方法更加灵活，可以在执行前后添加自己的代码逻辑。

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

## 示例脚本详解

### 阶段一：初始化与筛选

脚本首先清理环境并建立筛选条件，确保操作的准确性和可重复性。

```python
SSProcess.clearSelection()      # 清除之前的选择集
SSProcess.clearSelectCondition() # 清除之前的筛选条件
SSProcess.setSelectCondition("SSObj_Code", "==", "3103013") # 按编码筛选
SSProcess.selectFilter()       # 执行查询
print(f"选择集中的点线面对象数量: {SSProcess.getSelGeoCount()}")
```

这几行代码完成了所有准备工作。`3103013`是示例使用的地物编码，在实际运行前应替换为当前地图中实际存在的编码值。

Sources: [PySSProcess.py](PySSProcess.py#L94-L98)

### 阶段二：属性字段列表

脚本定义了一个包含35个属性字段的列表，涵盖了基本属性、几何特性和扩展属性：

```python
fields = [
    "SSObj_ID", "SSObj_Code", "SSObj_LayerName", "SSObj_Type", "SSObj_Color",
    "SSObj_LineType", "SSObj_LineWidth", "SSObj_Name", "SSObj_Byname", "SSObj_Angle",
    "SSObj_DataMark", "SSObj_CreateTime", "SSObj_ModifyTime", "SSObj_ExplodeStatus",
    "SSObj_FontWidth", "SSObj_FontHeight", "SSObj_FontName", "SSObj_FontClass",
    "SSObj_FontAlignment", "SSObj_FontWordAngle", "SSObj_FontStringAngle", "SSObj_FontWeight",
    "SSObj_FontIlaticAngle", "SSObj_FontDownAngle", "SSObj_FontUnderLine", "SSObj_FontInterval",
    "SSObj_FontString", "SSObj_Area", "SSObj_Length", "SSObj_PointCount", "SSObj_X",
    "SSObj_Y", "SSObj_Z", "SSObj_PointName", "SSObj_PointType", "SSObj_SymType", "[JG]", "[CS]"
]
```

| 属性类别 | 字段示例 | 说明 |
|---------|---------|------|
| 基本标识 | SSObj_ID, SSObj_Code, SSObj_Name | 对象的唯一标识、编码和名称 |
| 显示属性 | SSObj_Color, SSObj_LineType, SSObj_LineWidth | 颜色、线型、线宽等显示特征 |
| 几何特性 | SSObj_Area, SSObj_Length, SSObj_PointCount | 面积、长度、点数等几何参数 |
| 坐标信息 | SSObj_X, SSObj_Y, SSObj_Z | 对象的空间坐标位置 |
| 扩展属性 | [JG], [CS] | 结构、层数等自定义扩展属性 |

Sources: [PySSProcess.py](PySSProcess.py#L99-L108)

### 阶段三：读取并显示原始属性

脚本遍历选择集的前10个对象，读取并显示所有定义的属性值：

```python
for i in range(0, 10):
    print(f"第 {i} 个对象属性：")
    for field in fields:
        value = SSProcess.getSelGeoValue(i, field)
        print(f"  {field}: {value}")
    print("-" * 40)
```

这段代码会为每个对象输出格式化的属性信息，方便查看原始数据状态。

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

### 阶段四：批量修改属性

脚本演示了如何修改不同类型的属性值：

```python
for i in range(0, 10):
    SSProcess.setSelGeoValue(i, "< SSObj_ID >", f"{i+1000}")     # 几何属性修改
    SSProcess.setSelGeoValue(i, "<SSObj_LineType>", "3")         # 线型修改
    SSProcess.setSelGeoValue(i, "SSObj_LineWidth", "2")          # 基本属性修改
    SSProcess.setSelGeoValue(i, "SSObj_Color", "16777215")       # 颜色修改为白色
    SSProcess.setSelGeoValue(i, "SSObj_Name", f"对象{i+1}")      # 名称修改
    SSProcess.setSelGeoValue(i, "SSObj_Byname", f"别名{i+1}")    # 别名修改
    SSProcess.setSelGeoValue(i, "SSObj_Angle", "180")            # 角度修改
    SSProcess.setSelGeoValue(i, "SSObj_DataMark", "1")           # 数据标记
    SSProcess.setSelGeoValue(i, "SSObj_CreateTime", "2025-5-01 12:00:00") # 创建时间
    SSProcess.setSelGeoValue(i, "SSObj_ModifyTime", "2023-7-01 12:00:00") # 修改时间
    SSProcess.setSelGeoValue(i, "[JG],[CS]", "砖混, 6")          # 扩展属性修改（结构、层数）
```

| 属性类型 | 修改方式 | 示例 |
|---------|---------|------|
| 几何属性 | 使用尖括号`< >`包围 | `< SSObj_ID >` |
| 基本属性 | 直接使用属性名 | `SSObj_Color` |
| 扩展属性 | 使用方括号`[ ]`包围 | `[JG],[CS]` |
| 多值属性 | 逗号分隔多个字段 | `[JG],[CS]` |

 Sources: [PySSProcess.py](PySSProcess.py#L117-L130)

### 阶段五：验证修改结果

最后，脚本再次遍历对象，显示修改后的属性值，用于对比验证：

```python
print("修改后的选择集对象属性：")
for i in range(0, 10):
    print(f"第 {i} 个对象属性：")
    for field in fields:
        value = SSProcess.getSelGeoValue(i, field)
        print(f"  {field}: {value}")
    print("-" * 40)
```

通过对比修改前后的输出，可以清楚地看到属性变化，验证脚本执行的正确性。

Sources: [PySSProcess.py](PySSProcess.py#L132-L138)

## 注意事项与最佳实践

### 运行前准备

在运行示例脚本前，请确保满足以下条件：

| 检查项 | 说明 | 检查方法 |
|-------|------|---------|
| SunvStation环境 | 必须在SunvStation系统中运行 | 确认系统已启动 |
| 工作空间 | 需要有打开的工作空间 | 检查是否有激活项目 |
| 地物编码 | 编码3103013必须存在于当前地图 | 使用系统查询工具确认 |
| Python路径 | Python环境需正确配置 | 运行`python --version`验证 |

### 修改建议

实际运行时，建议根据当前地图情况调整脚本参数：

```python
# 1. 替换为实际存在的编码
SSProcess.setSelectCondition("SSObj_Code", "==", "你的实际编码")

# 2. 调整遍历对象数量以匹配实际选择集大小
obj_count = SSProcess.getSelGeoCount()
display_count = min(10, obj_count)  # 显示对象数量不超过实际数量
for i in range(display_count):
    # 处理逻辑
    pass

# 3. 修改属性值时考虑数据类型的一致性
# 例如：颜色值应为整数，时间格式应符合系统要求
```

Sources: [PySSProcess.py](PySSProcess.py#L96-L98)

## 学习价值

这个内置示例脚本集成了sunvpy的多个核心概念，具有很高的学习价值：

- **选择集管理**：演示了完整的选择集生命周期（清理、查询、遍历）
- **属性读取**：展示了如何读取基本属性和扩展属性
- **属性修改**：涵盖了不同类型属性的修改技巧
- **工作流程**：提供了标准的数据处理流程模板

建议初学者仔细阅读并运行这个示例，然后尝试修改其中的参数和逻辑，逐步加深对sunvpy API的理解。

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

## 下一步学习

掌握内置示例脚本后，建议按照以下路径继续深入学习：

1. **深入学习选择集管理**：阅读[使用 SSProcess 管理选择集](4-shi-yong-ssprocess-guan-li-xuan-ze-ji)，了解更复杂的选择条件组合和批量操作技巧

2. **掌握地理对象编辑**：学习[创建默认地物对象](19-chuang-jian-mo-ren-di-wu-dui-xiang)和[对象缓存机制](23-dui-xiang-huan-cun-ji-zhi)，理解对象创建和缓存管理

3. **探索数据交换功能**：查看[导入外部数据](27-dao-ru-wai-bu-shu-ju)和[导出数据到文件](28-dao-chu-shu-ju-dao-wen-jian)，学习如何与其他系统交换数据

4. **理解系统架构**：阅读[SunvStation 系统架构](6-sunvstation-xi-tong-jia-gou)和[Mixin 设计模式](9-mixin-she-ji-mo-shi)，深入理解底层设计原理

通过这个示例脚本的实际运行和代码研究，您将建立起对sunvpy开发框架的整体认知，为后续的高级开发奠定坚实基础。