属性管理

作为计算机辅助设计软件,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),在处理大量属性时可做参考;

  • 字段名只能以字母或汉字开头,且只能由汉字、字母、数字和下划线构成。

字段管理

字段管理器可对图层的字段进行添加、删除、修改等操作,并可加载和保存字段模板。

内容列表 > 选中图层 > 右键 > 字段,可打开所选图层的字段管理器。

image-20240710214146963

  • 命令:SFM ,可打开当前图层的字段管理器。
  • 只有勾选的字段才会显示在属性表中。
  • 双击可修改字段,字段名,类型,长度等皆可自由修改。
    • 修改字段会影响该图层的所有要素,对字段类型的修改可能造成部分数据丢失,对字段长度的修改可能造成字段值被截断,请谨慎操作。
  • 字段可多选删除,可多选拖拽排序。
    • 删除字段后若不勾选应用到所有要素选项,则要素中数据实际并未被修改,只是限制了对该字段值的编辑。
    • 上述情况删除的字段在属性面板状态为灰色不可编辑,定义同名字段后即可恢复编辑。

添加字段

在字段管理器界面点击添加字段,设置字段名,类型,长度等参数,点击确定即可添加字段。

image

加载&保存模板

可将当前的字段配置保存到本地,在需要新建字段的场合,直接通过加载模板来批量配置这些字段

image

字段模板格式为 CSV 逗号分隔文件,可通过 Excel 或文本编辑器直接编辑(名称,类型,长度为必填项)。

属性表

通过属性表可进行属性浏览、编辑、查找、定位、字段计算、属性选择等操作。

image

您可通过以下方式打开属性表:

  • 图层列表 > 双击图层名 ,打开对应属性表。

    image

  • 图层列表 > 图层右键 > 打开属性表,打开所选图层的属性表。

    image

  • 命令 STABLE ,打开当前图层对应的属性表。

处于性能考虑,属性表并非完全和图元同步更新,在图元增删后可能需要刷新以保持二者一致性

按属性选择

按属性选择用于快速筛选记录,单击属性表上方的按属性选择激活该功能:

image

使用提示

  • 双击字段或唯一值,可在表达式中插入对应内容;
  • 单击操作符按钮可插入对应操作符;
  • 选择字段后单击获取唯一值,列出该字段的所有唯一值;
  • 操作符不限于界面中列出的项,具体使用可参考 关于属性选择open in new window;

字段连接

将属性表和其他表的数据通过指定字段进行连接,多用于浏览和更新字段值,若想不打开属性表实现数据更新,可参考 挂接外部数据;

image

操作步骤:

  1. 选择用于连接的字段和用于连接的表;

    image

  2. 验证连接,按提示检查设置;

  3. 点击右侧的字段,勾选需要连接到当前数据的字段,确定即可完成连接操作;

image

注意

  • 连接加入的字段将以灰色背景显示,不可编辑;
  • 连接只对当前打开的属性表有效,属性表刷新或关闭后连接销毁;
  • 可通过 字段计算 的方式,将连接的数据保存到属性中;
  • 可通过 置入字段 的方式,直接将连接的字段内容保存到属性中;

属性表其他功能

记录联动
  • 单击行头可选中记录,若打开了属性面板 (EXX),则属性面板会同步显示所选记录的值;

  • 双击行头可缩放至行对应实体,具体行为可在属性表选项中调整:

    image

搜索
  • 可在搜索框中输入指定值进行搜索定位,Enter可跳转下一条满足条件的记录;
  • 未选中列的情况下进行的是全表搜索,选中列的情况下只搜索所选列。
菜单
  • 行头右键功能菜单,可定位实体,并执行复制等操作;

    image

  • 列头右键功能菜单,可查看字段属性,并进行关闭、删除,冻结字段等操作;

    image

  • 选中单元格右键功能菜单,可复制单元格内容等;

    image

外观
  • 功能菜单-选项,弹出口窗口中可调整属性表行高,字体样式等。

    image

字段计算器

字段计算器主要用于批量修改字段内容,打开属性表后,字段标题右键 > 字段计算器 即可激活字段计算器。

image

函数类型

  • 工具:软件定制的一些函数,该列表会按需求持续更新;
  • 字符串:常用的字符处理函数,如字符截取、替换、查找、填充等;
  • 数字:常用的数字处理函数,如取整、四舍五入、绝对值、最大最小值等;
  • 转换:常用的转换函数,提供整数、小数、字符串等的相互转换;

除 工具 类型的函数外,其他可用函数远不止这些,具体可参考 计算字段示例。

字段和功能

  • 双击字段名,可在表达式中插入该字段;
  • 双击功能函数,可在表达式中插入该函数;

表达式

  • 输入表达式后,下方预览区域会显示计算结果,表达式有误会提示,可按提示修改;
  • 预览基于属性表第一行数据,若有选中的行,则基于所选的第一行数据;
  • 表达式可通过保存到本地,通过加载调用;

表达式使用 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,在进行计算时,要先选中对应的图元,比如计算圆心坐标,应选择圆后执行,否则可能提示错误

    image-20231231103934647

  • 图形面积

    Area(2);//计算图元面积,保留2位小数
    Area(3);//计算图元面积,保留3位小数
    
    //对于需要强制保留两位显示的场景,可新建文本字段,并通过如下方式计算
    Area(2).ToString("0.00");//如果面积是3,则计算结果为3.00
    
  • 图形长度

    Length(2);//计算图元长度,保留2位小数
    Length(3);//计算图元长度,保留3位小数
    
  • 文字内容

    if (OBJTYPE == "TEXT") 
        return DBOBJECT.TextString;
    else if(OBJTYPE == "MTEXT")
        return DBOBJECT.Text;//这儿的Text也可以改为Contents,但需要自行解析换行符等
    else 
        return "";
    
  • 块名称

    OBJTYPE == "INSERT" ? DBOBJECT.Name: "";
    
  • 多段线所有节点坐标

    //计算多段线所有节点坐标
    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;//自由组合图幅号格式
    
工具

工具 是函数中最特殊的一项,用来完成一些特定计算,此处的函数会随着软件更新调整。

​ image-20240122150245505

  • 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 特性面板 中列出的项都是属性,比如实体的 颜色、图层;文字的 字高、宽度、内容;多段线的 宽度、标高 等:

image-20231102112005568

属性计算器可快速批量为这些属性赋值,且赋值基于字段表达式,自由度较高。

字段计算器是为字段赋值,而属性计算器为属性赋值,这是完全不同的两个概念

比如为颜色赋值,可以直接改变图元的颜色,为文字赋值,可以直接修改文字内容

image-20231102152508667

通过属性表 顶部工具栏 或 字段右键 都可以打开属性计算器,打开后界面和字段计算器类似,表达式也相同

image-20231102154435221

对于 目标属性 选项,目前开放的属性如下:

目标属性应用于描述
图层 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,属性面板可在选中实体时即时显示其属性值,便于快速修改。

image

内容不可编辑

一些软件给图元附加了扩展属性,这些属性通过面板可以浏览但不可编辑,若想要编辑这些值,通过字段管理器中添加同名字段即可,字段较多时,可通过 定义字段 批量添加。

实体图层

  • 选中实体时: 图层 下拉列表用于修改所选实体的图层

  • 未选中实体时: 图层 下拉列表用于切换当前图层

实体列表

  • 所选实体将按图层分组列出,列表显示当前所选实体的 ID 及 实体类型,单击可定位
  • 列表中的实体可通过 Ctrl 或 Shift 多选,图层节点可右键全选实体,方便批量修改字段值

快速定义字段

快速定义字段实质上是基于当前属性面板来快速添加字段。这种方式对字段类型和字段长度的识别并不准确,可按需求自行修改。

image

  • SOUTH等字段可能有多个值,快速定义字段默认将其识别为 文本 类型,若要显示并编辑多个值,可将其定义为 列表 类型

下拉列表

对于一些内容固定的字段 (可称之为 字典 或 属性域 ),通过下拉列表来选择而非手动输入更方便准确,下拉列表可通过下列操作来实现:

  1. 单击 配置属性域

image

  1. 弹出字段属性域界面

image

  1. 首次打开该界面,可能在 属性域 中没有可选项目,则需要通过 编辑域 来添加

image

注意

  • 字典和下拉列表配置保存在文件 DWG 中,复制到其他文件的实体将不共享该定义;
  • 属性域和字典都可以保存到本地,复制给其他人使用。

打开外部数据

某些字段可能保存的是文件路径或文件名,为了方便浏览,可通过设置链接,使用系统默认应用快速打开对应文件:

  1. 单击 设置链接 打开设置窗口;

image

  1. 勾选 启用外部链接,设置文件所在的 目标路径和 子路径字段,行为可按需求自行设置;

image

  1. 确定后,鼠标移动到字段名称上,会出现小箭头,若设置正确,单击小箭头即可快速打开对应文件;

image

属性连接

命令 SXLJ, 用于批量更新多个图层的多个字段内容,可以理解为 批量的字段计算器,除计算字段外,还可以执行一些分类求和等操作。

image

操作步骤

  1. 点击面板上的 添加 ,在弹出的窗口中配置规则。

  2. 在 连接方法 中选择需要的方法,这儿以 计算字段 为例,选择计算字段后,选择 目标表 和 目标字段。

    image

  3. 在 参数 中输入计算表达式,确定 即可完成该项规则配置。

  4. 确定 后,规则列表中会出现这条规则,可以继续添加多个规则。配置好的规则可 保存 到本地,下次使用时 加载 即可,也可以将配置文件复制给他人使用。

  5. 规则添加完成后,勾选要执行的规则 ,点击 分析 ,结果列表中会显示计算结果 ,注意此时数据尚未保存。

  6. 简单浏览下结果列表的内容,确认无误的话,点击 保存 即可将结果列表中的内容保存到字段中。

    image

属性连接方法

名称说明
字段追加输入字段的值将以分隔符连接,填入目标字段中。参数为分隔符号
求和对输入字段的值进行求和,填入目标字段中 。输入字段只能为数值类型
计数统计与目标记录匹配的记录数量,填入目标字段中 。无需指定输入字段
分类求和对输入字段的值进行求和,并按分类字段填入目标字段中 。需指定分类字段,输入字段只能为数值类型
分类计数统计与目标记录匹配的记录数量,并按分类字段分类填入目标字段中。需指定分类字段,无需指定输入字段
计算字段详见 字段计算器 相关描述

挂接数据

纵然属性表和字段计算器已经为 CAD 属性编辑提供了极大便利,但其编辑功能仍不能和 Excel 等专业软件相比,而字段连接必须打开属性表才能操作,其目的主要是查看而非更新属性,由此设计了 挂接外部数据功能,可通过关联字段,将外部数据批量更新到属性表中,命令 GJSJ

image

操作步骤

  1. 设置 挂接表 唯一字段 外部表 外部字段。

    • 外部表支持数据交互中所有矢量格式。
    • 唯一字段和外部字段类型尽量一致,若不一致,软件会在分析时强制转换,转换失败会有提示。
    • 唯一字段和外部字段若没有一一对应,则取外部数据第一条更新到属性表中。
  2. 勾选要更新的字段,设置字段映射。

    • 设置好图层及字段后,同名字段默认会被勾选。
    • 勾选外部字段后,若不指定对应的图层字段,会提示向属性表中追加该字段。

    image

  3. 点击 开始挂接 ,软件会分析挂接情况,并提示分析结果,点击 是 即可更新勾选的字段。

    image

  4. 设置好后可将配置保存,外部数据更新后,通过加载配置快速实现更新。

注意

  • 配置会保存外部数据路径,若外部数据查找失败,软件会提示选择新的数据源
  • 请确保新数据源和失效的原有数据源字段一致。

属性块

属性块在图框应用上具有很大便利,但对属性的批量修改却比较困难,可通过属性块相关功能得到解决。

属性块转字段

命令 ATF

  • 可将属性块中的内容提取到字段中,方便批量编辑。

  • 由于不同块中定义的属性字段不同,在提取后用户可按需求定义图层的字段。

字段转属性块

命令 FTA

  • 可将字段内容写入到属性块同名字段中,实现属性批量修改。

  • 属性块结合导出属性表和挂接外部数据功能,可实现通过Excel编辑属性块的效果。

其他属性工具

记录跳转

命令:NN

  • 打开属性表的前提下,可通过命令 NN 快速跳转并缩放至下一条记录;
  • 跳转只针对当前浏览的属性表,属性表关闭后无法快速跳转,面板可以隐藏。
属性刷

命令:MXX

  • 将所选要素的属性值批量同步到其他要素