申明:本网站内容仅用于学术交流,如有侵犯您的权益,请及时告知我们,本站将立即删除有关内容。
【摘 要】本文叙述了利用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输入断面排列间距<18>: "))
(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:<100> "))
(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:<100> ")
(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―),男,工程测量专业,工程师,现从事水利电力工程测量技术工作。
投稿邮箱:hanhaiqikan@163.com
相关期刊分类
- 经济论文
- 医学论文
- 建筑论文
- 文学论文
- 政治论文
- 教育论文
- 科技论文
- 农业论文
- 金融论文
- 工程论文
- 保险论文
- 财政税收论文
- 轻手工业论文
- 通信传播论文
- 宗教论文
- 文体论文
- 计算机论文
- 体育论文
- SCI论文
- 小学数学论文
- 初中语文论文
- 职业教育论文
- 管理会计论文
- 初中英语论文
- 电子商务论文
- 人力资源论文
- 教育教学论文
- 工商管理论文
- 学前教育论文
- 经济学论文
- 教育学论文
- 毕业发表论文
- 市场营销论文
- 软件工程论文
- 财务管理论文
- 工程造价论文
- 服装设计论文
- 网络安全论文
- 行政管理论文
- 企业管理论文
- 酒店管理论文
- 快速发表论文
- 电气自动化论文
- 计算机网络论文
- 汉语言文学论文
- 行政管理学论文
- 计算机教学论文
- 教育教学管理论文
- 人力资源管理论文
- 职称论文发表
- 职称论文范文
- 实体经济论文
- 信息技术论文
- 室内设计论文
- 公共管理论文
- 临床医学论文
- 土木工程论文
- 物流管理论文
- 商业保险论文
- 国际贸易论文
- 项目管理论文
- 航空论文
- 水利论文
- 图书论文
- 文化论文
- 新闻论文
- 艺术论文
- 档案论文
- 政法论文
- 管理论文
- 地质论文
- 电力论文
- 石油论文
- 生物论文
- 化工论文
- 化学论文
- 环境论文
- 机械论文
- 交通论文
- 科学论文
- 理论论文
- 历史论文
- 煤矿论文
- 社会论文
- 电子论文
- 工业论文
- 核心论文
- 通信论文
- 地理论文
- 论文提纲
- 硕士论文
- 论文选题
- 论文范例
- 理工论文
- 教学论文
- issn论文
- 研究生论文
- 语文论文
- 舞蹈论文
- 毕业论文
- 职称论文
- 论文格式
- 参考文献
- 会计论文
- 专科论文
- 护理论文
- 物流论文
- 美术论文
- 时政论文
- 心理学论文