AutoCAD中扩展图元数据的应用
autocad有非常强大的图形编辑功能,但是与gis系统软件arc/info、mapinfo相比,其属性库功能相对较弱。在autocad数据库中,只是记录着表示图形元素的几何位置、形状、大小的几何坐标和表示图形元素性质(如颜色、层号等)的辅助数据。如果能将图形元素的其它属性数据添加到数据库中,将大大提高autocad的内部属性库功能,从而更有效的对autocad图形数据进行管理。而应用扩展图元数据就可以圆满完成这一功能。
2 扩展图元数据
利用扩展图元数据,或称xdata,用户能将用户定义数据添加到任何autocad图元中。用户可以用xdata向存在图元增添数据位或有效地创建唯一类型的图元。
作为一个应用程序,autocad处理许多类型的信息,包括字符串、点、实数和整数。数据类型作为一个小囊(capsule),保存相关信息,这样构造图元或管理其在图形中的用途。autocad支持在基本图元信息里保存每类原始数据,可是通用图元数据的数据组里的数值和类型是有限的,而xdata能够消除这些限制并使用户能够定义自己的数据类型。这样就可以与图元一起保存用户自己的信息,从而为定制autolisp提供了强有力的手段。
2.1 扩展图元数据码
autocad提供对所有普通数据类型的存储支持,以及对autocad有特殊意义的类型(如dxf)的支持,xdata的dxf组与基本图元数据的dfx组相比,其基本部分相同,但xdata的dfx组用高于1000的组码(见附表)。
附表 扩展图元数据dfx组码
说 明 | 例 子 | 说 明 | 例 子 | ||
1000 | 字符串(最多255个字节) | “space-cube” | 1012 | x向空间位移 | 10.0 |
1001 | 应用名(最多31个字节) | “il-acad-dev” | 1022 | y向空间位移 | 10.0 |
1002 | 控制串(组标记) | “{“或”}” | 1032 | z向空间位移 | 10.0 |
1003 | 层名 | “walls” | 1013 | x向空间坐标 | 10.0 |
1004 | 二进制数据块(最多127字节) | n/a | 1023 | y向空间坐标 | 10.0 |
1005 | 数据块句柄(大小写不敏感) | “a3e7d” | 1033 | z向空间坐标 | 10.0 |
1010 | 实数(点或向量的x坐标) | 10.0 | 1040 | 实数 | 10.0 |
1020 | 实数(点或向量的y坐标) | 10.0 | 1041 | 距离(与父图元比例一样) | 10.0 |
1030 | 实数(点或向量的z坐标) | 10.0 | 1042 | 比例因子(与父图元比例一样) | 10.0 |
1011 | x向空间位置 | 10.0 | 1070 | 整数(16位) | 12345 |
1021 | y向空间位置 | 10.0 | 1071 | 长整数(32位) | 1234567890 |
1031 | z向空间位置 | 10.0 |
xdata灵活性和使用性能的两个关键在于:以括号({)将其分组,一个图元可以有重复的相同数据类型的组码。但这必须要求应用程序跟踪其顺序和其他数据的格式。对于一般的图元数据,可以用assoc和subst函数以随意顺序处理其数据。 2.2 添加扩展图元数据 在为一个图元添加xdata之前,autocad需要注册应用名。因为一个图形可以为许多不同的应用程序引用。一个应用程序必须将其数据与别的应用程序分开,唯一应用程序识别名(appid)用于完成这种功能。注册应用程序名之后,可用append函数把扩展图元数据添加到原图数据表后。例如: comand:(regapp″solar5″) 注册应用程序名″solar5″ command:(command″circle″ ′(4000 4000)3963.5) 画一个圆 command:(setq ed(entget entlast)) 设置变量ed为圆图元的数据表。 command:(setq ex′(-3(″solor5″ 创建xdata表,连接到变量ex. (1000.″earth″) 变量ex. (1002.″{″) (1041.3963.5) (1002.″}″) ) ) ) command:(setq edx(append ed(list ex))) |
将新xdata数据表接在原图元数据表后,并连接到edx.
command:(entmod edx) 以联合后的表数据更新图元,并返回该表。
2.3 访问扩展图元数据
访问扩展图元数据时,必须为entget函数提供应用程序名appid。如不提供,则只返回常用图元数据。应用程序名包含在一个表里,所以可以给entget函数提供几个应用程序名。当提供给entget函数一个或多个应用程序名时,常用图元数据和所有应用程序名的扩展图元数据都将返回。还可用通配符,如solar,获取所有以solar开始的应用程序的xdata数据,或用来获取所有应用程序的xdata。
例如:
command:(entget(entlast))
返回上一个实体的图元数据表,但无xdata.
command:(entget(entlast)′(″solar5″))
返回上一个实体的应用程序名为solar5的图元数据表和xdata.
command:(entget′(″*″)
返回所有应用程序的图元数据表和xdata.
3 扩展图元数据的应用
扩展图元数据几乎能做到autocad图形中的任何事情。一旦扩展数据附加在图元数据上,许多程序可以查询、更新或分析信息。
a 利用扩展图元数据,可以实现图形数据与属性数据的连接,从而可以实现信息的管理、查询、分析、决策,大大弥补cad系统图形编辑功能强大,而属性库功能相对较弱的不足。例如:在地形图或地籍图中,可以给控制点符号添加扩展数据,如点号、等级、通视点号、x坐标、y坐标、h高程、点位精度等。之后,就可以以各种方式对控制点进行条件查询、修改等操作。
b 利用扩展图元数据,可以自动生成各类图元,从而达到绘图自动化,大大减少人工干预,提高工作效率。例如:可以将待填充区域的边界附加上扩展数据,如bj1—1、bj1—2等,用以标定区域边界及边界序号属性,然后用程序搜寻出属性为bj1—?的边界线,就可以将该区域以选定图案进行自动填充。
c 利用扩展图元数据,可以自动判别地物(图元)的属性,从而达到制图自动综合。例如:将1∶500地形图或地籍图进行1∶5000或更小比例尺缩绘时,一些扩展数据类型注为“普通地物”,且长度、面积在一定范围之内的,可以自动舍弃;而另一些扩展数据类型注为“独立地物”的,无论其大小,都要保留。又如,在1∶500,1∶1000,1∶2000等比例尺的地形图、地籍图之间进行缩绘时,陡坎(以未加固陡坎为例)是不能按比例缩绘的。陡坎的上沿实线可以按比例绘制,而与上沿实线垂直的陡坎投影线却有固定尺寸,高1mm,间距1.5mm。如果给陡坎附加上扩展数据,用dk1—1表示陡坎1的上沿实线, 以dk1—2表示陡坎1的投影线,那么在缩绘时,就可以用程序判定出哪些是陡坎1的上沿实线,并且按比例绘制:判定出哪些是陡坎1的投影线,并且删除,然后依据陡坎1的上沿实线按高度、间距尺寸自动生成投影线,并且附以扩展数据dk1—2。如上所说,利用扩展图元数据就可以实现陡坎等地物的制图自动综合了。
4 结束语
本文探讨了autocad中扩展图元数据dxf组码的形式,扩展图元数据的添加、访问和使用,展望其应用前景,认为扩展图元数据为autocad应用程序的开发提供了前所未有的威力。用adata数据可以让用户的应用程序从数据类型束缚中解放出来,使应用程序能够完成更多、更加先进的新功能。作者在实际中工作中利用xdata开发了一些应用程序,获得了令人满意的效果。在实践过程中如果善用xdata,可以开发出许多新功能,在地图制图和信息工程等领域将具有广阔的应用前景。
作者单位:崔先国 (山东矿业学院)
张明波 (淄博学院)
2 joseph smith & rusty gesner.autocad 12.0定制大全.北京:学苑出版社,1994
3 rusty gesner等.autocad 12 for windows 高级核心技术.北京:清华大学出版社,1995
4 george omura & steven keith.autocad 14 机械工程绘图教程.电子工业出版社.
5 中华人民共和国国家标准局.地形图图式.国家技术监督局,1995