AutoLisp编写工程地质剖面图小工具
朱红雷李健民 (浙江省水利水电勘测设计院杭州 310002)
在我院应用的CAD工程地质制图系统中,通常采用的各种高级语言编制的程序,一般是通过编制数据文件,生成CAD图形数据交换文件(一般为*.SCR或*.DXF)达到绘制CAD图纸的目的。这种方法往往显得不符合我们的绘图习惯,也很不直观。为此,我们利用AutoLisp语言开发绘制工程地质剖面图组件,在实际应用中取得了较好的效果。
其实,绘图过程就是各种工程地质剖面图组件的拼接过程。一幅工程地质剖面图,一般而言不外乎以下几个组件:图幅图签、剖面图框架(如标尺、桩号等)、勘探信息(如钻孔、平硐等)、地质构造、图例花纹、各种地质线条等。如果我们分别对不同组件编写不同的绘制工具,并把他们有机地、相互关联地放置在一起,就绘制出了一幅工程地质图纸。因此,开发出一套绘制各种工程地质组件的程序,具有一定的实用价值。
AutoLisp语言内嵌于AutoCAD,编写的小程序可以方便地在 AutoCAD界面下进行人机对话。例如下列程序代码段通过输入几个数据即可实现绘制一个简单的钻孔。
(defun c:zk()
(setq pt0 (getpoint "/n请输入钻孔位置:"))
(setq blc (getreal "/n请输入比例尺:"))
(steq ks (getreal "/n请输入孔深(m):"))
(setq ksx (* (/ ks blc) 1000))
(setq pt1 (list (- (car pt0) 0.5) (cadr pt0)))
(setq pt2 (list (- (car pt0) 0.5) (- (cadr pt0) ksx)))
(setq pt3 (list (+ (car pt0) 0.5) (- (cadr pt0) ksx)))
(setq pt4 (list (+ (car pt0) 0.5) (cadr pt0)))
(command "PLINE" pt1 pt2 pt3 pt4 "")
我们在用AutoLisp编制上述小工具时,遇到了一些问题,也有些心得体会,愿与大家交流,权作抛砖引玉。
1 常用数据应建立磁盘文件进行保存,如工程名称、比例尺、剖面方向等,需要在不同的Autolisp甚至于不同的图纸间通用,因此需建立磁盘文件进行保存。相关的函数有read-line、wrtie-line等进行磁盘读写操作;rtos、atof 等进行数值与字符串的转换。
2 尽量应用表格进行编写,可以使程序简洁并增加可读性。事实上,一个AutoLisp程序本身就是一个表或若干表的集合。而各种数据组成的表又是AutoLisp的数组,在某种程度上,这种表比其它高级语言的数组更容易操作,因为AutoLisp提供了丰富的表操作语言,如(subst newitem olditem list);