Files
sunvpy-docs/docs/content/41-objbaseattr-shu-xing-suo-yin.md
2026-04-10 13:47:53 +08:00

16 KiB
Raw Blame History

ObjBaseAttr 类是 SunvStation 系统中地物对象属性管理的核心组件,提供统一的属性名称注册、索引映射和属性值读写接口。该类通过集中管理所有地物属性的名称与索引映射关系,实现了属性访问的标准化和高效化,支持点、线、面、注记等多种地物类型的属性操作。

Sources: ObjBaseAttr.py

属性分类体系

ObjBaseAttr 将地物属性划分为五大类别,每类属性对应不同的功能维度和数据类型。这种分类设计既体现了属性的业务语义,也便于开发者快速定位所需属性。

属性分类概览

graph TB
    A[ObjBaseAttr 属性体系] --> B[点属性]
    A --> C[地物通用属性]
    A --> D[几何参量属性]
    A --> E[注记属性]
    A --> F[操作属性]
    
    B --> B1[SSObj_PointName<br/>坐标点名称]
    B --> B2[SSObj_PointCount<br/>坐标点数量]
    B --> B3[SSObj_PointType<br/>坐标点类型]
    B --> B4[SSObj_X/Y/Z<br/>坐标值]
    
    C --> C1[标识属性<br/>ID, Code, Name]
    C --> C2[图形属性<br/>Color, LineType, LineWidth]
    C --> C3[变换属性<br/>Angle, ScaleX, ScaleY]
    C --> C4[时间属性<br/>CreateTime, ModifyTime]
    
    D --> D1[面积属性<br/>Area, EllipsoidArea]
    D --> D2[长度属性<br/>Length, 3DLength]
    D --> D3[边界属性<br/>minX, minY, maxX, maxY]
    
    E --> E1[字体属性<br/>FontWidth, FontHeight, FontName]
    E --> E2[文本属性<br/>FontString, FontStringCount]
    E --> E3[样式属性<br/>Alignment, FontWeight, ItalicAngle]
    
    F --> F1[SSObj_Reverse<br/>方向反转]
    F --> F2[SSObj_Reference<br/>引用关系]

点属性索引

点属性用于描述地物对象的坐标点信息,是构成线、面等复杂几何形状的基础元素。此类属性支持通过参数索引访问特定位置的坐标点。

Sources: ObjBaseAttr.py

属性常量 属性名 数据类型 说明 参数支持
pointName SSObj_PointName string 坐标点名称 (n) - 第n个点
pointCount SSObj_PointCount int 坐标点数量
pointType SSObj_PointType int 坐标点类型 (n) - 第n个点
x SSObj_X double X坐标值 (n) - 第n个点
y SSObj_Y double Y坐标值 (n) - 第n个点
z SSObj_Z double Z坐标值 (n) - 第n个点

参数说明括号内的数字表示坐标点索引从0开始。例如 SSObj_X(0) 获取第一个点的X坐标。

地物通用属性索引

通用属性适用于所有地物类型,涵盖了对象标识、图形表现、变换参数和元数据等核心信息。

Sources: ObjBaseAttr.py

属性常量 属性名 数据类型 说明 可读写
标识属性
id SSObj_ID int 对象唯一标识 只读
groupID SSObj_GroupID int 分组标识 可写
code SSObj_Code int 地物编码 只读
byname SSObj_Byname string 地物别名 可写
name SSObj_Name string 地物名称 可写
type SSObj_Type string 对象类型POINT/LINE/AREA/NOTE 只读
图形属性
color SSObj_Color int 颜色值支持RGB/COLORNO格式 可写
lineType SSObj_LineType int 线型 可写
lineWidth SSObj_LineWidth int 线宽 可写
layerName SSObj_LayerName string 图层名称 只读
变换属性
angle SSObj_Angle double 旋转角度(度) 可写
scaleX SSObj_ScaleX double X方向缩放比例 可写
scaleY SSObj_ScaleY double Y方向缩放比例 可写
scaleXY SSObj_ScaleXY double 统一缩放比例 可写
元数据属性
status SSObj_Status int 对象状态 可写
dataMark SSObj_DataMark string 数据标记 可写
relationID SSObj_RelationID string 关联标识 可写
createTime SSObj_CreateTime string 创建时间YYYY-MM-DD HH:MM:SS 可写
modifyTime SSObj_ModifyTime string 修改时间YYYY-MM-DD HH:MM:SS 可写
扩展属性
hatchStyle SSObj_HatchStyle int 填充样式 可写
hatchDensityScale SSObj_HatchDensityScale double 填充密度比例 可写
lShapeOffset SSObj_LShapeOffset int L型偏移 可写
memoData SSObj_MemoData string 备注数据 可写

几何参量属性索引

几何参量属性提供对地物对象空间特征的定量描述,包括面积、长度、边界范围等计算结果。

Sources: ObjBaseAttr.py

属性常量 属性名 数据类型 说明 精度
面积属性
area SSObj_Area double 对象面积 6位小数
ellipsoidArea1 SSObj_EllipsoidArea1 double 椭球面积1 -
ellipsoidArea2 SSObj_EllipsoidArea2 double 椭球面积2 -
长度属性
length SSObj_Length double 对象周长/长度 6位小数
length3D SSObj_3DLength double 三维长度 6位小数
边界属性
minX SSObj_minX double 最小X坐标 6位小数
minY SSObj_minY double 最小Y坐标 6位小数
maxX SSObj_maxX double 最大X坐标 6位小数
maxY SSObj_maxY double 最大Y坐标 6位小数
标签属性
drawAreaLabelStatus SSObj_DrawAreaLabelStatus string 区域标签状态 -
areaLabelX SSObj_AreaLabelX double 标签X坐标 -
areaLabelY SSObj_AreaLabelY double 标签Y坐标 -

注记属性索引

注记属性专用于注记对象e_Note_Obj控制字体、文本内容、对齐方式、角度等显示效果。

Sources: ObjBaseAttr.py

属性常量 属性名 数据类型 说明 可读写
字体属性
fontName SSObj_FontName string 字体名称 可写
fontWidth SSObj_FontWidth double 字体宽度 可写
fontHeight SSObj_FontHeight double 字体高度 可写
fontClass SSObj_FontClass string 注记分类 可写
文本属性
fontString SSObj_FontString string 注记文本内容 可写
fontStringCount SSObj_FontStringCount int 字符串长度 只读
fontRealHeight SSObj_FontRealHeight double 实际显示高度 只读
fontRealLength SSObj_FontRealLength double 实际显示长度 只读
对齐与定位
fontAlignment SSObj_FontAlignment int 对齐方式 可写
fontPosType SSObj_FontPosType int 定位类型 可写
fontDirection SSObj_FontDirection int 文字方向 可写
角度属性
fontWordAngle SSObj_FontWordAngle double 单词旋转角度 可写
fontStringAngle SSObj_FontStringAngle double 字符串旋转角度 可写
fontItalicAngle SSObj_FontItalicAngle double 斜体角度 可写
fontDownAngle SSObj_FontDownAngle double 下划线角度 可写
样式属性
fontWeight SSObj_FontWeight int 字体粗细 可写
fontUnderLine SSObj_FontUnderLine int 下划线标志 可写
fontInterval SSObj_FontInterval double 字符间距 可写

操作属性索引

操作属性用于触发特定的地物处理操作,而非存储常规属性值。

Sources: ObjBaseAttr.py

属性常量 属性名 操作类型 说明
reverse SSObj_Reverse 方向反转 值为1时执行反转操作
reference SSObj_Reference 引用关系 当前未实现

核心方法参考

属性索引管理

ObjBaseAttr 提供三个核心方法用于属性名称与索引的双向映射:

Sources: ObjBaseAttr.py

方法名 功能 参数 返回值
registerObjBaseAttrName(name) 注册新属性名到索引表 name: 属性名自动去除SSObj_前缀 属性索引
get_value_index(field) 获取属性名的索引 field: 属性名支持SSObj_前缀 索引值,未找到返回-1
get_value_index_param(field) 解析带参数的属性名 field: 格式为'属性名(参数)' (索引, 参数字符串)

命名规范:属性名在内部存储时自动转换为小写并去除 SSObj_ 前缀,外部访问时两种形式均可识别。

属性值读写

getGeoValue 方法

获取单个地物对象的属性值,支持动态参数解析和多类型对象处理。

Sources: ObjBaseAttr.py

def getGeoValue(map: ScaleMap, geo: GeoBase, field: str) -> str

处理流程

flowchart TD
    A[调用 getGeoValue] --> B[解析属性名和参数]
    B --> C{属性索引是否存在?}
    C -->|否| D[返回空字符串]
    C -->|是| E{对象类型?}
    E -->|注记对象| F[处理注记专用属性]
    E -->|通用对象| G[处理公共基本属性]
    F --> H{有值返回?}
    G --> H
    H -->|是| I[返回属性值]
    H -->|否| J[处理坐标点属性]
    J --> K{有值返回?}
    K -->|是| I
    K -->|否| L[处理几何量属性]
    L --> I

参数支持示例

  • SSObj_X(0) → 获取第一个点的X坐标
  • SSObj_PointName(2) → 获取第三个点的名称
  • SSObj_Area → 获取对象面积

setGeoValue 方法

批量设置多个地物对象的属性值,支持扩展属性和基本属性的统一处理接口。

Sources: ObjBaseAttr.py

def setGeoValue(map: ScaleMap, geoList: GeoBaseList, field: str, value: str)

扩展属性处理:当属性名以 [ 开头时,系统将其识别为扩展属性,存储在 MemoData 中。

Sources: ObjBaseAttr.py

颜色值格式支持

  • 颜色号格式:COLORNO(1)
  • RGB格式RGB(255,123,224)
  • 数值格式:1677721524位颜色值

Sources: ObjBaseAttr.py

属性索引值映射表

为便于直接使用,下表列出了所有属性的实际索引值(基于初始化顺序):

Sources: ObjBaseAttr.py

索引 属性名(无前缀) 属性常量
0 angle self.angle
1 area self.area
2 arealabelx self.areaLabelX
3 arealabely self.areaLabelY
4 byname self.byname
5 code self.code
6 color self.color
7 createdata self.createTime
8 datamark self.dataMark
9 drawarealabelstatus self.drawAreaLabelStatus
10 ellipsoidarea1 self.ellipsoidArea1
11 ellipsoidarea2 self.ellipsoidArea2
12 fontalignment self.fontAlignment
13 fontclass self.fontClass
14 fontdownangle self.fontDownAngle
15 fontheight self.fontHeight
16 fontitalicangle self.fontItalicAngle
17 fontinterval self.fontInterval
18 fontname self.fontName
19 fontpos self.fontPosType
20 fontrealheight self.fontRealHeight
21 fontreallength self.fontRealLength
22 fontstring self.fontString
23 fontstringangle self.fontStringAngle
24 fontstringcount self.fontStringCount
25 fontunderline self.fontUnderLine
26 fontwidth self.fontWidth
27 fontwordangle self.fontWordAngle
28 groupid self.groupID
29 hatchdensityscale self.hatchDensityScale
30 hatchstyle self.hatchStyle
31 id self.id
32 lshapeoffset self.lShapeOffset
33 length self.length
34 length3d self.length3D
35 layername self.layerName
36 linetype self.lineType
37 linewidth self.lineWidth
38 max self.maxX
39 maxy self.maxY
40 memodata self.memoData
41 minx self.minX
42 miny self.minY
43 modifydata self.modifyTime
44 name self.name
45 pointcount self.pointCount
46 pointname self.pointName
47 pointtype self.pointType
48 reference self.reference
49 relationid self.relationID
50 reverse self.reverse
51 scale self.scaleX
52 scalex self.scaleX
53 scaley self.scaleY
54 scalexy self.scaleXY
55 status self.status
56 type self.type
57 x self.x
58 y self.y
59 z self.z

注意:索引值按属性名字母顺序排序,通过 valueNames.sort() 维护。使用属性常量(如 attr.area)比直接使用索引值更具可读性和维护性。

使用场景与最佳实践

基础属性访问

# 获取对象面积
area_value = attr.getGeoValue(map, geo, "SSObj_Area")

# 修改对象颜色(支持多种格式)
attr.setGeoValue(map, geoList, "SSObj_Color", "RGB(255,0,0)")
attr.setGeoValue(map, geoList, "SSObj_Color", "16711680")  # 红色

Sources: ObjBaseAttr.py

坐标点操作

# 获取第一个点的X坐标
x0 = attr.getGeoValue(map, geo, "SSObj_X(0)")

# 设置第三个点的Z值为100.0
attr.setGeoValue(map, geoList, "SSObj_Z(2)", "100.0")

Sources: ObjBaseAttr.py

扩展属性管理

# 设置单个扩展属性
attr.setGeoValue(map, geoList, "[自定义属性]", "属性值")

# 批量设置多个扩展属性
attr.setGeoValue(map, geoList, "[属性1,属性2,属性3]", "值1,值2,值3")

Sources: ObjBaseAttr.py

注记对象样式控制

# 设置注记字体和大小
attr.setGeoValue(map, geoList, "SSObj_FontName", "宋体")
attr.setGeoValue(map, geoList, "SSObj_FontHeight", "12.5")

# 设置注记旋转角度
attr.setGeoValue(map, geoList, "SSObj_FontStringAngle", "30.0")

Sources: ObjBaseAttr.py

与其他模块的交互

ObjBaseAttr 作为属性管理中枢,与多个核心模块协同工作:

graph LR
    A[ObjBaseAttr] --> B[PySSCore<br/>GeoBase/GeoBaseList]
    A --> C[PySSMath<br/>几何计算函数]
    A --> D[PySSMap<br/>ScaleMap]
    
    B --> E[提供地物对象]
    C --> F[3D长度计算]
    D --> G[地图比例尺]
    
    A --> H[SSProcessManager]
    H --> I[选择集管理]
    I --> A[属性读写]

Sources: ObjBaseAttr.py

关键依赖

  • GeoBase:地物对象基类,提供属性访问方法
  • GeoBaseList:地物对象列表,支持批量操作
  • ScaleMap:地图对象,提供比例尺等上下文信息
  • get3DLength:来自 PySSMath 的三维长度计算函数
  • getColorValue:颜色值解析函数

Sources: ObjBaseAttr.py

参考文档延伸

要深入了解属性的具体使用场景,可参考以下文档: