Auto Lisp在百图水利土石方设计软件中快速标注中桩高程的应用

时间:2022-05-03 02:21:28

Auto Lisp在百图水利土石方设计软件中快速标注中桩高程的应用

【摘 要】本文叙述了利用AutoLISP在百图水利土石方设计软件中快速标注中桩高程的应用,并通过实例证明程序是可行性的。

【关键词】AutoLISP 百图水利土石方设计软件 水利测量 横断面图 中桩高程

1 引言

AutoLISP是由Autodesk公司开发的一种LISP程序语言,LISP是List Processor的缩写。通过AutoLISP编程,可以节省内业很多时间。AutoLISP语言作为嵌入在AutoCAD内部的具有智能特点的编程语言,是开发应用AutoCAD不可缺少的工具。它能帮助经常使用或重复操作步骤的自动化,从而显著地提高工作效率。其基本功能是可以控制用户与程序运行之间的相互关系。AutoLISP具有容易撰写、容易学习、无需编译、安全性好等特点。

2 问题及解决方法

百图水利土石方设计软件是目前在水利工程测量中常用的软件之一,它对土石方工程(如堤防、河道、渠道、土坝、道路等)断面数据的提取及批量绘制横断面图等有着很强的功能。但是,在批量绘制好的横断面图上,每标注一个横断面中桩高程都必需重复进行“高程校准 选取标尺 高程标注 指定高程符号插入点”这四步曲,操作起来就很费时费力并且容易出错。针对这一情况,通过对横断面数据及横断面图进行了分析,结果发现数据中桩高程是唯一的,也就是说每一个横断面数据中都有一个中桩高程(注:如要用下面这个程序,先检查数据后再应用,每一条横断面数据中只能保留一个中桩高程,否则程序就会将中桩高程标注错位。),其数据格式为“ 0.000 90.398”;再分析绘制好的横断面图,发现横断面的“断面排列间距”是一个固定值。根据这两个特点,笔者利用AutoLISP语言编写了一个小程序,就可以解决这一问题。

3 程序代码

;;;批量标注横断面中桩高程

(defun c:gcsb(/ f p jj str b h)

;(regmap)

(setq f (getfiled "\n选择断面数据文件" "d:/" "txt" 2))

(setq ltscale (htblc))

(setq jj (getreal "\n输入断面排列间距: "))

(if (= jj nil) (setq jj 100))

(setvar "osmode" 32)

(setq p1 (getpoint "\n指定点:"))

(setvar "osmode" 0)

;;;

(setq p4 (polar p1 (/ pi 0.66667) 0))

(setq pt (polar p4 (* (/ pi 2.0) 3) (- 0 (* jj 1000))))

;;;上标

(setq p2 (polar p1 (/ pi 0.66667) (- 0 (* 2610.26 ltscale))))

;;;下标

;(setq p2 (polar p1 (/ pi 0.66667) (* 5002.22 ltscale)))

;;;

(setq p3 (polar p2 0 (* 2004.89 ltscale)))

(setq p (polar p3 (* (/ pi 2.0) 3) (- 0 (* jj 1000))))

(setq f (open f "r"))

(setq str (read-line f))

(while (and (/= str nil) (/= str ""))

(setq b (substr str 1 15))

(if (= b " 0.000 ")

;(setq b (substr str 1 5))

;(if (= b "0.0 ")

(progn

(setq h (substr str 16 7))

;(setq h (substr str 6 7))

(setq pt (polar pt (* (/ pi 2.0) 3) (* jj 1000)))

;(setq p (polar p (* (/ pi 2.0) 3) (* jj 1000)))

(command "layer" "m" "zzbz" "c" "white" "zzbz" "")

;;;上标

(command "insert" "ele_sym05.dwg" pt (* 2500 ltscale) (* 2500 ltscale) "" h)

;;;下标

;(command "insert" "ele_sym15.dwg" pt (* 2500 ltscale) (* 2500 ltscale) "" h)

(setq str (read-line f))

(close f)

(command "layer" "s" "0" "")

(princ "\n标注完毕!")

(princ)

;;;绘图比例尺(子函数)

(defun htblc(/)

(setq htbl (getvar "useri1"))

(if (/= htbl 0)

(setq ltscale (/ htbl 1000.0))

(progn

(setq htbl (getint "\n绘图比例尺1: "))

(if (= htbl nil)

(setq htbl 100)

(setq ltscale (/ htbl 1000.0))

(setvar "ltscale" 1.0)

(setvar "useri1" htbl)

(setq ltscale ltscale)

;;;更改绘图比例尺

(defun c:ggbl(/)

;(regmap)

(setvar "cmdecho" 0)

(setq htbl (getvar "useri1"))

(if (= htbl 0)

(setq yhtbl "\n绘图比例尺1: ")

(progn

(setq yhtbl (itoa htbl))

(setq yhtbl (strcat "\n当前绘图比例尺1:" yhtbl

"\n输入绘图比例尺1:"))

(setq htbl (getint yhtbl))

(setq ltscale (/ htbl 1000))

(setvar "useri1" htbl)

;(grtext -1 (itoa htbl))

(princ)

4 应用实例

启动百图水利土石方设计软件包2004(单机版),打开一幅需要标注中桩高程的横断面图。在命令行输入appload加载程序gcsb.lsp(意为高程上标)或点击快捷工具栏图标“ ” 加载及运行程序,按命令行的提示进行操作“选择断面数据文件 绘图比例尺 输入断面排列间距 指定点(即第一条断面的中桩位置)”,程序在短短几秒钟左右就能批量将所有需要标注中桩高程的横断面标注完毕。

5 结语

通过实例证明该程序是可行性的,程序可以使得原本单调乏味的工作变得很轻松,再也不用面对着数百上千条横断面需要标注中桩高程而发愁了。应用AutoLISP语言,在工作中适当的编写一些小程序,不但可以减轻内业的劳力,而且能大幅度的提高工作效率。

参考文献:

[1]《AutoLISP程序员参考手册》李振格主编.海洋出版社.

[2]AutoCAD 2000高级应用与Visual LISP开发宝典.人民邮电出版社.2001

作者简介:

范森合(1971―),男,工程测量专业,工程师,现从事水利电力工程测量技术工作。

上一篇:高速公路软土路基的沉降试验分析 下一篇:PC梁斜拉桥成桥施工监测与控制