利用AutoLISP程序转换AutoCAD实体

2022-09-14

1 问题的提出和解决思路

2007年10月, 我院总图设计人员需要计算某钢铁新建项目的土方量。甲方提供地形图中的高程点, 是以属性块的形式给出的。而总图设计人员计算土方量的软件, 要求高程值是TEXT实体。这样, 就要求必须将属性块转换成TEXT实体才能完成土方量的计算。若手工转换, 转换工作繁琐不说, 还可能出错。他们请我给予帮助。

应总图人员的要求, 我决定帮他们解决这个问题。经过用LIST命令提取地形图中高程属性块的数据, 发现图中注记的高程, 是名为GC200的属性块的属性值。若将图中所有名为GC200属性块的属性值提取出来, 形成包括属性块的插入点坐标和属性值的数据文件, 再利用Auto LISP语言编程, 就可实现属性块和TEXT实体间的批量转换。为了编程, 我又用数据库操作函数提取高程属性块数据, 发现它不包括属性值。因此, 必须用下面的方法提取属性值。

2 数据文件的形成

为排除冗余数据, 以下详述属性数据的提取步骤。下面以在Auto CAD2005中提取属性块数据为例, 说明属性数据的提取过程。为清楚起见, 以使用下拉菜单“工具”为例进行。

工具→属性提取 (X) →选择图形 (右边选择“当前图形 (C) ) →下一步→设置 (去掉包括外部参照) →下一步→使用样板 (选择“无样板”) →下一步→提取属性 (只保留“X插入点”“Y插入点”“属性标志 (属性值) ”) →下一步→下一步→保存样板→下一步→输出 (选路径, 输入文件名 (本例以20080808.CSV为文件名) , 选用文件格式“CSV (逗号分隔) (*.CSV) →完成。

上述属性数据的提取, 实际上就是利用Auto CAD的EATTEXT命令, 熟悉此命令的用户, 可以直接在任何版本的Auto CAD的命令行键入此命令来提取所需属性数据。

到此为止, 已将所需的数据提取出来了, 下面叙述怎样形成可供Auto LISP程序读取的文本数据文件。

启动Leica的坐标编辑器, 打开刚才形成的20080808.CSV文件。选“自由格式”→下一步→分隔符选“逗号”→下一步→右健在“1”列上选“点号”;右健在“2”列上选“坐标Y”;右健在“3”列上选“坐标X”;右健在“4”列上选“坐标H”→下一步→完成→删除第一行→文件→另存为→以“ASCII文件 (*.TXT) ”格式保存文件, 选好路径并输入文件名→在“总体情况”选项卡选中“列标”, 但“表头”和“表尾”都要空;在“点”选项卡中, 只选“输出坐标”栏的两个选项“Y, X”、“H (Elevation) ”即可, 输出编码和输出属性两栏都不要选。→确定。至此, 就形成了程序所需的数据文件。

最后需要指出的是, 数据文件必须是文本文件, 以便被下面的Auto LISP程序读取。若无Leica坐标编辑器, 也可用记事本、Excel等生成此格式的文件即可。值得注意的是, 每行的数据之间必须用制表符 (Tab键) 分隔, 因为下面提供的Auto LISP程序要求这样的格式。为节省篇幅, 下面只列出数据文件的一部分, 以便大家看清数据文件的格式。

3 Auto LISP程序设计

程序设计思路:总的原则是简单实用。首先要删除图中的所有高程属性块, 为避免误删, 同时也为增强程序的通用性, 需用鼠标任选一高程属性块。之后, 提示“输入数据文件名”, 要提供缺省的文件名。接着要提示“输入高程字高”, 也要提供缺省字高。最后还要提示“输入高程小数位数”, 仍要提供缺省值。程序要自动识别高程属性块所在的层, 并置为当前层, 以便将转换后的高程仍放在此层。还要为高程注记建立文字样式。以上这些完成后, 就自动读取数据文件中的坐标和高程数据, 展绘所有高程点。为方便多个Auto CAD版本用户的使用, 应使用基本的Auto LISP函数编程, 以保证程序能够在Auto CAD2000以上版本上都能够正常运行。

为实现上述程序功能, 决定将程序分为三个功能块。第一块, 利用Auto LISP语言的精华部分——数据库操作函数, 来实现删除图中所有以GC200为名的属性块。为增加本程序的通用性, 高程属性块名从图形数据库中读取。同时, 将高程属性块所在的层置为当前层, 并建立当前文字样式SHZ, 以便注记高程用。第二块, 利用GET类函数, 来确定数据文件、注记高程的字高和小数位数。第三块, 利用一系列Auto LISP函数, 以及Auto CAD命令, 将所有高程点都展绘出来, 从而完成高程属性块向TEXT实体的转换。

为方便大家, 下面将所有的程序代码列于下面, 供使用时参考。

4 程序的使用

大家看到了, 上面的程序很简短, 使用方法也很简单。为了各位使用起来更方便建议数据文件建立在D盘, 并以“20080808TXT”为名。这样, 就可以空回车来回答程序要求输入的文件名了。

众所周知, 要想运行任何Auto LISP程序, 都必须提前加载。加载的方法有几种可以根据个人的习惯而定。程序加载后, 只要在命令行键入STZH即可启动本程序。程序运行后, 首先按程序要求用鼠标任选一高程属性块, 程序将自动删除图中所有的高程属性块。接着程序提示输入数据文件名 (缺省文件为“D:/20080808.TXT”) 。如果不使用缺省文件, 请输入完整的路径和文件全名, 以保证程序的正常运行。接着输入注记高程的字高 (缺省字高为“1”) , 最后输入注记高程的小数位数 (缺省值为“2”) 。输完以上三个数据后, 程序将自动完成所有属性块的转换, 并自动存盘。

5 结语

通过上面的介绍, 我们就可以将高程属性块转换成TEXT实体了。不仅如此, 我们可通过本文提供的思路和方法, 在AutoCAD中来完成各种块符号的批量转换, 还可以实现高程系统间的换算。限于篇幅, 本文不再涉及这些, 有兴趣的同行可以试一试。

摘要:本文是详细介绍了怎样将高程属性块, 转换成TEXT实体的过程, 并提供了相应的通用Auto LISP程序。

关键词:属性值提取,Auto LISP程序,实体转换

参考文献

[1] 章忆文.AutoLISP程序员参考手册[M].北京:海洋出版社, 1991, 5.

[2] 王爱民, 于冬梅, 史国生, 等.中文版AutoCAD2002高级应用技巧[M].北京:清华大学出版社, 2001, 9.

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

上一篇:糖尿病足76例临床分析下一篇:关于建筑工程定额计价的探讨