AutoCAD批量读取并输入点坐标及编号的方法探讨
山东金洲矿业集团有限公司
摘要:本文探讨了应用lisp读取坐标数据文件,并将点编号对应输入cad设计图纸的方法。该方法简单、快速,节省很大人力,且避免了输入大量点标注时容易出现的人为失误。
在应用Autocad设计图纸的过程中,需要往设计图纸中输入大量点坐标和点
的编号。大量点的批量输入已经有方法实现,但是点对应编号的批量输入还没有
相应的简单方法实现。点越多,手工输入点的编号的工作量就越大,并且容易出
错。如何通过现有的编程技术实现快速的标注出点和该点编号是一个值得研究的
问题。
AutoLISP是由Autodesk公司开发的一种LISP程序语言,LISP是List Processor的缩写。
通过autolisp编程,可以节省工程师很多时间。AutoLISP语言作为嵌入在AutoCAD内部的具有智能特点的编程语言,是开发应用AutoCAD不可缺少的工具。AutoLISP 是一种功能全面的解释性编程语言,可以很方便的调用AutoCAD 命令、系统变量和对话框。普通用户均可以用lisp编写出各种定制的绘图命令。
全站仪中所测量的点的坐标和编号数据可以直接导出为一个txt文件,文件
中的每一行数据格式为坐标点编号,x坐标,y坐标。如图一所示。
图一点坐标数据格式
用到的主要命令和函数有:command、text、substr、strcat、line。
根据点的坐标值确定点的坐标标号的位置。
将文字标注输入到cad中的一个重要命令Text,其命令参数的含义为(文字
坐标值”x,y”, 文字高度, 文字旋转角度, 文字内容)。
Substr函数(substr string start [length]) 返回字符串中的一个子字符串。参数"string"为一个字符串,"start"为正整数,指定"string"中的开始位置。
由于LISP内置字符处理函数功能有限,为了便于程序的实现,将所读取的
坐标数据的长度限制,以便于实现正确的读取点的文字标注和坐标。限制编号字
符串的字符个数为5,点的坐标字符串个数为8。
为了避免点的编号标注遮住输入的点,将编号标注的位置根据坐标值的x 和y坐标平移一定距离。
主要实现代码如下:
(setq fp (open "E:/point.txt" "r")) ;以只读方式打开数据文件,文件路径根据实际情况修改
(
while (setq pt (read-line fp)) ;逐行读取数据(标注和坐标的字符串)
(setq x (substr pt 8 8)) ;读取x坐标值
(setq y (substr pt 20 8)) ;读取y坐标值
(setq x (vl-string-right-trim " " x)) ;去掉字符串中的空格
(setq x (+ (atof x) 4)) ;为了不遮住编号的位置,将标注的位置向右平移4毫米
(setq y (- (atof y) 6)) ;为了不遮住编号的位置,将标注的位置向下平移6毫米
(setq x (itoa (fix x)) ) ;将x变量转换为字符类型
(setq y (itoa (fix y)) ) ;将y变量转换为字符类型
(setq str (substr pt 1 5)) ;读取要读入的坐标点的编号
(setq wz (strcat x "," y )) ;设置标注的x和y值
(command "text" wz 5 0 str) ;根据坐标位置输出坐标点的编号
(setq zb (substr pt 8 ))
(setq pt (strcat "(" zb ")" )) ;在字符串前后加括号
(setq pt (read pt)) ;将字符串转换成list列表, 以便于后面调用circle命令实现画点
(command "circle" pt 0.2) ; 调用autocad的circle命令画点
)
(close fp) ;关闭文件
为了验证程序的可行性,建立了一组测试数据,运行Autocad并加载该程序。运行效果如图二所示。由于坐标之间的距离,有的标注出现了交叉。
图二程序运行结果
通过试验,该方法实现简单快速有效,能够快速读入点坐标并对应的标注出点的编号,避免了手工输入时容易出现的失误,节省了大量的人力和输入时间,
提高了工作效率和准确性。