属性管理
作为计算机辅助设计软件,AutoCAD
具备一定的属性功能,但并未提供严格意义上的 GIS
属性和字段支持,这让属性数据交换极为不便,本软件通过定制扩展数据 (XDATA
) ,不通过任何第三方数据库,实现完整的字段和属性管理。
字段
字段是属性数据的基础,支持的数据类型如下:
字段类型 | 存储类型 | 说明 |
---|---|---|
OFTString | 文本 | 常用的字符串字段 |
OFTInteger | 整数 | 整数型字段 |
OFTReal | 小数 | 小数型字段,如果字段值是 54.234,则小数位数 = 3,精度 = 5。 |
OFTStringList | 多种 | 多值字段,可在一个字段中保存多个内容。 该类型仅为兼容一些旧数据色设计,如SOUTH,如无必要不建议使用 |
DateTime | 文本 | 日期字段,实际存储字符串,仅在数据转换时用于规范字段 |
您可以通过 字段管理器
来添加,删除,修改字段;
受限于CAD数据结构,扩展数据在使用时有一些限制:
单个要素所有扩展数据的字符总数不能超过8188,超过会提示 eXdataSizeExceeded 错误 (按AutoCAD2012测试,不同版本可能略有出入);
为保持和低版本数据的兼容性,要素单个字段长度最好不要超过255,否则
AUDIT
命令可能造成数据丢失,若要使用内容长度超过255的字符串,则不要轻易使用AUDIT
命令:AUDIT
命令,选择N
,若提示类似: XData String Length 265 > 255 Truncate to 255,表示该属性内容长度为265,超过255若每个字符串字段长度为255,则单个要素最多可保存32个字段 (8188/255),在处理大量属性时可做参考;
字段名只能以字母或汉字开头,且只能由汉字、字母、数字和下划线构成。
字段管理
字段管理器可对图层的字段进行添加、删除、修改等操作,并可加载和保存字段模板。
内容列表 > 选中图层 > 右键 > 字段
,可打开所选图层的字段管理器。
命令:
SFM
,可打开当前图层的字段管理器。
添加字段
在字段管理器界面点击添加字段,设置字段名,类型,长度等参数,点击确定即可添加字段。
删除字段
在字段列表中选中要删除的字段 ,可选择多个,点击删除字段,提示选择是即可删除所选字段。
注意
删除字段后若不勾选应用到所有要素选项,则要素中数据实际并未被修改,只是限制了对该字段值的编辑,此类数据在属性面板状态为灰色不可编辑,定义同名字段后即可恢复编辑。
修改字段
双击字段,弹出编辑窗口,按需求修改后,点击确定即可修改。
注意
修改字段会影响该图层的所有要素,对字段类型的修改可能造成部分数据丢失,对字段长度的修改可能造成字段值被截断,请谨慎操作。
加载&保存模板
可将当前的字段配置保存到本地,在需要新建字段的场合,直接通过加载模板来批量配置这些字段
提示
字段模板格式为 CSV
逗号分隔文件,可通过 Excel
或文本编辑器直接编辑(名称,类型,长度为必填项)。
属性表
通过属性表可进行属性浏览、编辑、查找、定位、字段计算、属性选择等操作。
您可通过以下方式打开属性表:
图层列表 > 双击图层名
,打开对应属性表。图层列表 > 图层右键 > 打开属性表
,打开所选图层的属性表。命令
STABLE
,打开当前图层对应的属性表。
按属性选择
按属性选择用于快速筛选记录,单击属性表上方的按属性选择激活该功能:
使用提示
- 双击字段或唯一值,可在表达式中插入对应内容;
- 单击操作符按钮可插入对应操作符;
- 选择字段后单击获取唯一值,列出该字段的所有唯一值;
- 操作符不限于界面中列出的项,具体使用可参考 关于属性选择;
字段连接
将属性表和其他表的数据通过指定字段进行连接,多用于浏览和更新字段值,若想不打开属性表实现数据更新,可参考 挂接外部数据
;
操作步骤:
选择用于连接的字段和用于连接的表;
验证连接,按提示检查设置;
点击右侧的字段,勾选需要连接到当前数据的字段,确定即可完成连接操作;
注意
- 连接加入的字段将以灰色背景显示,不可编辑;
- 连接只对当前打开的属性表有效,属性表刷新或关闭后连接销毁;
- 可通过
字段计算
的方式,将连接的数据保存到属性中; - 可通过
置入字段
的方式,直接将连接的字段内容保存到属性中;
属性表其他功能
记录联动
单击行头可选中记录,若打开了属性面板 (
EXX
),则属性面板会同步显示所选记录的值;双击行头可缩放至行对应实体,具体行为可在属性表选项中调整:
搜索
- 可在搜索框中输入指定值进行搜索定位,Enter可跳转下一条满足条件的记录;
- 未选中列的情况下进行的是全表搜索,选中列的情况下只搜索所选列。
菜单
行头右键功能菜单,可定位实体,并执行复制等操作;
列头右键功能菜单,可查看字段属性,并进行关闭、删除,冻结字段等操作;
选中单元格右键功能菜单,可复制单元格内容等;
外观
功能菜单-选项,弹出口窗口中可调整属性表行高,字体样式等。
字段计算器
字段计算器主要用于批量修改字段内容,打开属性表后,字段标题右键 > 字段计算器
即可激活字段计算器。
函数类型
- 工具:软件定制的一些函数,该列表会按需求持续更新;
- 字符串:常用的字符处理函数,如字符截取、替换、查找、填充等;
- 数字:常用的数字处理函数,如取整、四舍五入、绝对值、最大最小值等;
- 转换:常用的转换函数,提供整数、小数、字符串等的相互转换;
除 工具
类型的函数外,其他可用函数远不止这些,具体可参考 计算字段示例
。
字段和功能
- 双击字段名,可在表达式中插入该字段;
- 双击功能函数,可在表达式中插入该函数;
表达式
- 输入表达式后,下方预览区域会显示计算结果,表达式有误会提示,可按提示修改;
- 预览基于属性表第一行数据,若有选中的行,则基于所选的第一行数据;
- 表达式可通过保存到本地,通过加载调用;
表达式使用 C#
代码,支持大量常用语法,支持 LINQ
,可通过编写代码实现自定义功能。
计算字段示例
可粘贴下面这些表达式到字段计算器窗口,通过预览查看计算结果
字符串
字符串用西文单引号
'
或者双引号"
括起来'我是字符串1' "我是字符串2"
字符串合并用加号:
+
"我是"+"字符串1";//计算结果为 "我是字符串1"
字符串截取:
.Substring()
"周末去图书馆".Substring(0,2);//计算结果为 "周末"; "周末去图书馆".Substring(3,3);//计算结果为 "图书馆"
字符串替换:
.Replace()
"周末去图书馆".Replace("周末","星期天") ;//计算结果为 "星期天去图书馆"
查找字符串,从前往后:
.IndexOf()
,从后往前:.LastIndexOf()
"周末去不去图书馆".IndexOf("去");//计算结果为 2 "周末去不去图书馆".LastIndexOf("去");//计算结果为 4
字符右补齐:
.PadRight()
,左补齐:.PadLeft()
"702".PadLeft(4,'0');//计算结果为:"0702" "702".PadRight(4,'0');//计算结果为:"7020"
数字
四舍五入:
Math.Round()
Math.Round(3.1415,2) ;//计算结果为:3.14
获取整数部分:
Math.Truncate()
,向下取整:Math.Floor()
,向上取整:Math.Ceiling()
Math.Truncate(3.14) ;//计算结果为:3 Math.Floor(3.14);//计算结果为:3 Math.Ceiling(3.14);//计算结果为:4
取绝对值:
Math.Abs()
Math.Abs(-3.14) ;//计算结果为:3.14
取较大值:
Math.Max()
,较小值:Math.Min()
Math.Max(1,2);//计算结果为:2 Math.Min(1,2);//计算结果为:1
格式转换
转为数字:
Convert.ToDouble()
Convert.ToDouble('3.14');//计算结果为:3.14
转为字符串:
Convert.ToString()
或.ToString()
Convert.ToString(3.14);//计算结果为:"3.14"
图元属性
图元使用
DBOBJECT
作为关键字,使用该关键字可对图元属性进行提取和操作,若有一定 C# 编程功底,可编写代码实现更多自定义功能,下面可作参考:DBOBJECT.Position;//点坐标 DBOBJECT.TextString;//文字内容 DBOBJECT.EndParam;//多段线节点数量 Math.Round(DBOBJECT.Area*0.0015,2);//多段线面积(亩) Math.Round( DBOBJECT.Length ,2) ;//多段线长度(米) DBOBJECT.XData;//图元扩展属性
注意
不同的类型的图元有不同的属性,比如圆有圆心
Center
,文字有文字内容TextString
,多段线有节点数量NumberOfVertices
,在进行计算时,要先选中对应的图元,比如计算圆心坐标,应选择圆后执行,否则可能提示错误面积和长度,除了用图元属性直接获取外,还有可以通过
工具
中的函数来直接计算Area(2);//计算图元面积,保留2位小数 Area(3);//计算图元面积,保留3位小数 Length(2);//计算图元长度,保留2位小数 Length(3);//计算图元长度,保留3位小数 //对于需要强制保留两位显示的场景,可新建文本字段,并通过如下方式计算 Area(2).ToString("0.00");//如果面积是3,则计算结果为3.00
多段线所有节点坐标
//计算多段线所有节点坐标 if (DBOBJECT == null) return ""; var pl = DBOBJECT as Autodesk.AutoCAD.DatabaseServices.Polyline; if (pl == null) return ""; string fmt = "F3";//坐标小数位,F3是保留3位 StringBuilder sb = new StringBuilder(); for (int i = 0; i < pl.NumberOfVertices; i++) { var pt = pl.GetPoint3dAt(i); sb.Append(pt.X.ToString(fmt)+ "," + pt.Y.ToString(fmt)+" ");//坐标格式 } return sb.ToString().Trim();
图幅号
//计算图元所在图幅号 if (DBOBJECT == null) return ""; var ent = DBOBJECT as Entity; if (ent == null) return ""; var point = ent.GeometricExtents.MinPoint;//取实体左下角点 var str = ((int)Math.Floor(point.X / 250.0) * 0.25).ToString("0.00"); var str2 = ((int)Math.Floor(point.Y / 250.0) * 0.25).ToString("0.00"); return str2 + " - " + str;//自由组合图幅号格式
工具
工具
是函数中最特殊的一项,用来完成一些特定计算,此处的函数会随着软件更新调整。
GetXdata
//如CASS软件的 SOUTH 字段,可通过该函数来获取字段指定位置的值; GetXData('SOUTH',1);//获取 SOUTH 字段的第 1 个值 GetXData('SOUTH',2);//获取 SOUTH 字段的第 2 个值
SetXdata
//仍然以 SOUTH 为例,该函数可修改或添加字段指定位置的值(计算前请选择 SOUTH 为目标字段) SetXData((张三,1));//将 SOUTH 字段的第 1 个值设置为 张三 SetXData((JC01001,2));//将 SOUTH 字段的第 2 个值设置为 JC01001 SetXData((张三,1)(JC01001,2));//同时设置多个值 //上面三个示例都是使用的字符串值(代码1000) //如果要计算整数或者小数,可参考以下示例 SetXData((1040,3.14,1));//将 SOUTH 字段的第 1 个值设置为 3.14,格式为小数(代码1040) SetXData((1071,-3,1));//将 SOUTH 字段的第 1 个值设置为 -3,格式为整数(代码1071) //注意, SetXdata 函数只会添加或修改列表指定位置的值,未指定的位置将维持原状
Area
//在 图元属性 计算中已有介绍,该函数可用于计算多部件块,填充等的面积 Area(2);//计算图元面积,保留2位小数 Area(3);//计算图元面积,保留3位小数
Length
//在 图元属性 计算中已有介绍,该函数可用于计算多部件块,填充等的长度 Length(2);//计算图元长度,保留2位小数 Length(3);//计算图元长度,保留3位小数
Count
//用于统计指定字段中相同值的数量 Count('DLBM');//统计 DLBM 中不同地类的总数
Sum
//分组求和,求和字段应为整数或小数 Sum('DLBM','TBMJ');//将图斑按 DLBM 字段分组,并按 TBMJ 字段求和
Number
//编号函数,可用于全图流水号或分组编号等 Number('DLBM','0000');//按 DLBM 分组编号,格式为 0001,0002... "JC"+Number('DLBM','01000');//按 DLBM 分组编号,格式为 JC01001,JC01002... //特别的,想要全图编号时,可通过 OBJTYPE 字段实现(前提是图元类型一致) Number('OBJTYPE','0000')//按 OBJTYPE 全图编号
属性计算器
字段计算器为字段赋值,而属性计算器则为属性赋值,什么是属性?
在 AutoCAD 特性面板
中列出的项都是属性,比如实体的 颜色
、图层
;文字的 字高
、宽度
、内容
;多段线的 宽度
、标高
等:
属性计算器可快速批量为这些属性赋值,且赋值基于字段表达式,自由度较高。
字段计算器是为字段赋值,而属性计算器为属性赋值,这是完全不同的两个概念
比如为颜色赋值,可以直接改变图元的颜色,为文字赋值,可以直接修改文字内容
通过属性表 顶部工具栏
或 字段右键
都可以打开属性计算器,打开后界面和字段计算器类似,表达式也相同
对于 目标属性
选项,目前开放的属性如下:
目标属性 | 应用于 | 描述 |
---|---|---|
图层 Layer | 所有实体 | 不存在的图层会提示新建,并维持字段结构 |
颜色 ColorIndex | 所有实体 | 采用索引颜色,有效范围0-255 |
RGB颜色 Color | 所有实体 | 采用RGB颜色,如:"255,0,0" |
线型 Linetype | 所有实体 | 实体线型,不存在的线型会被忽略 |
标高 Elevation | 多段线,二维多段线,填充 | 高程值,小数 |
线宽 ConstantWidth | 多段线,二维多段线 | 取值>=0 |
厚度 Thickness | 多段线,二维多段线,单行文字 | 小数 |
内容 TextString | 单行文字 | 设置文字内容 |
字高 Height | 单行文字,多行文字 | 设置文字高度,取值>0 |
宽度 WidthFactor | 单行文字 | 设置文字宽度比例,取值>0 |
倾斜 Oblique | 单行文字 | 设置文字倾斜角度,取值[0-85,275-360] |
旋转 Rotation | 单行文字,多行文字 | 设置文字旋转角度 |
多行内容 Contents | 多行文字 | 设置多行文字内容 |
- 计算过程中,不符合属性规范的值会被忽略
- 若计算的是图层,计算后图层发生变化,可能需要刷新属性表
属性计算示例
以下代码可将指定区间的值重分类到[0-255]
(byte)(((Contour-1410)*255/(2400-1410)))
属性面板
命令 EXX
,属性面板可在选中实体时即时显示其属性值,便于快速修改。
内容不可编辑
一些软件给图元附加了扩展属性,这些属性通过面板可以浏览但不可编辑,若想要编辑这些值,通过字段管理器中添加同名字段即可,字段较多时,可通过 定义字段
批量添加。
实体图层
选中实体时:
图层
下拉列表用于修改所选实体的图层未选中实体时:
图层
下拉列表用于切换当前图层
实体列表
- 所选实体将按图层分组列出,列表显示当前所选实体的 ID 及 实体类型,单击可定位
- 列表中的实体可通过
Ctrl
或Shift
多选,图层节点可右键全选实体,方便批量修改字段值
快速定义字段
快速定义字段实质上是基于当前属性面板来快速添加字段。这种方式对字段类型和字段长度的识别并不准确,可按需求自行修改。
- SOUTH等字段可能有多个值,快速定义字段默认将其识别为
文本
类型,若要显示并编辑多个值,可将其定义为列表
类型
下拉列表
对于一些内容固定的字段 (可称之为 字典
或 属性域
),通过下拉列表来选择而非手动输入更方便准确,下拉列表可通过下列操作来实现:
- 单击
配置属性域
- 弹出字段属性域界面
- 首次打开该界面,可能在
属性域
中没有可选项目,则需要通过编辑域
来添加
注意
- 字典和下拉列表配置保存在文件 DWG 中,复制到其他文件的实体将不共享该定义;
- 属性域和字典都可以保存到本地,复制给其他人使用。
打开外部数据
某些字段可能保存的是文件路径或文件名,为了方便浏览,可通过设置链接,使用系统默认应用快速打开对应文件:
- 单击
设置链接
打开设置窗口;
- 勾选
启用外部链接
,设置文件所在的目标路径
和子路径字段
,行为可按需求自行设置;
- 确定后,鼠标移动到字段名称上,会出现小箭头,若设置正确,单击小箭头即可快速打开对应文件;
属性连接
命令 SXLJ
, 用于批量更新多个图层的多个字段内容,可以理解为 批量的字段计算器
,除计算字段外,还可以执行一些分类求和等操作。
操作步骤
点击面板上的
添加
,在弹出的窗口中配置规则。在
连接方法
中选择需要的方法,这儿以计算字段
为例,选择计算字段后,选择目标表
和目标字段
。在
参数
中输入计算表达式,确定 即可完成该项规则配置。确定
后,规则列表中会出现这条规则,可以继续添加多个规则。配置好的规则可保存
到本地,下次使用时加载
即可,也可以将配置文件复制给他人使用。规则添加完成后,勾选要执行的规则 ,点击
分析
,结果列表中会显示计算结果 ,注意此时数据尚未保存。简单浏览下结果列表的内容,确认无误的话,点击
保存
即可将结果列表中的内容保存到字段中。
属性连接方法
名称 | 说明 |
---|---|
字段追加 | 输入字段的值将以分隔符连接,填入目标字段中。参数为分隔符号 |
求和 | 对输入字段的值进行求和,填入目标字段中 。输入字段只能为数值类型 |
计数 | 统计与目标记录匹配的记录数量,填入目标字段中 。无需指定输入字段 |
分类求和 | 对输入字段的值进行求和,并按分类字段填入目标字段中 。需指定分类字段,输入字段只能为数值类型 |
分类计数 | 统计与目标记录匹配的记录数量,并按分类字段分类填入目标字段中。需指定分类字段,无需指定输入字段 |
计算字段 | 详见 字段计算器 相关描述 |
挂接外部数据
纵然属性表和字段计算器已经为 CAD 属性编辑提供了极大便利,但其编辑功能仍不能和 Excel 等专业软件相比,而字段连接必须打开属性表才能操作,其目的主要是查看而非更新属性,由此设计了 挂接外部数据
功能,可通过关联字段,将外部数据批量更新到属性表中,命令 GJSJ
操作步骤
设置
挂接表
唯一字段
外部表
外部字段
。- 外部表支持数据交互中所有矢量格式。
- 唯一字段和外部字段类型尽量一致,若不一致,软件会在分析时强制转换,转换失败会有提示。
- 唯一字段和外部字段若没有一一对应,则取外部数据第一条更新到属性表中。
勾选要更新的字段,设置字段映射。
- 设置好图层及字段后,同名字段默认会被勾选。
- 勾选外部字段后,若不指定对应的图层字段,会提示向属性表中追加该字段。
点击
开始挂接
,软件会分析挂接情况,并提示分析结果,点击是
即可更新勾选的字段。设置好后可将配置保存,外部数据更新后,通过加载配置快速实现更新。
注意
- 配置会保存外部数据路径,若外部数据查找失败,软件会提示选择新的数据源
- 请确保新数据源和失效的原有数据源字段一致。
属性块
属性块在图框应用上具有很大便利,但对属性的批量修改却比较困难,可通过属性块相关功能得到解决。
属性块转字段
命令 ATF
可将属性块中的内容提取到字段中,方便批量编辑。
由于不同块中定义的属性字段不同,在提取后用户可按需求定义图层的字段。
字段转属性块
命令 FTA
可将字段内容写入到属性块同名字段中,实现属性批量修改。
属性块结合导出属性表和挂接外部数据功能,可实现通过Excel编辑属性块的效果。
其他属性工具
记录跳转
命令:NN
- 打开属性表的前提下,可通过命令
NN
快速跳转并缩放至下一条记录; - 跳转只针对当前浏览的属性表,属性表关闭后无法快速跳转,面板可以隐藏。
属性刷
命令:MXX
- 将所选要素的属性值批量同步到其他要素