LISP程序二次开发在管道标注中的应用
2019-09-10许婧刘飞鹏李继国
许婧 刘飞鹏 李继国
摘 要:CAD技术的普及,使绘图技术得到了飞速发展。不同专业的工程对绘图有不同的要求,设计人员普遍运用未经二次开发的AutoCAD。绘图中遇到有规律的重复操作,完全可以尝试通过CAD的二次开发得到简化。本文基于AutoLISP语言编程,简化对水工设计图中的管道标注,从而提高绘图工作效率。
关键词:LISP;CAD二次开发;管道标注
中图分类号:TP391.7 文献标识码:A 文章编号:1003-5168(2019)14-0028-03
Application of Secondary Development of LISP Program in Pipeline Marking
XU Jing1 LIU Feipeng2 LI Jiguo3
(1.College of Water Conservancy Yunnan Agricultural University,Kunming Yunnan 650201;2.Kunming Institute of Survey and Design, State Forestry and Grassland Administration,Kunming Yunnan 650216;3.Yunnan Water Resourece and Hydropower Vocational College,Kunming Yunnan 650202)
Abstract: The popularization of CAD technology has made the drawing technology develop rapidly. Different majors in engineering have different requirements for drawing, and designers generally use AutoCAD which has not been redeveloped. It is possible to simplify the drawing process by redeveloping the CAD system. Based on AutoLISP language programming, this paper simplified pipeline labeling in hydraulic design drawings, so as to improve the efficiency of drawing.
Keywords: LISP;secondary development of CAD;pipeline labeling
1 程序概述
AutoLISP(List Processor)程序語言是由Autodesk公司开发的一种程序语言。AutoCAD软件包中包含大多数用于产生图形、处理图形的命令,但仍有某些命令末被提供。通过AutoLISP,可以使用AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变程序。LISP语言的运行环境比较广,几乎可以适用于各版本的AutoCAD;针对AutoCAD-RIO环境编写的AutoLISP程序可以移植到AutoCAD-R14和AutoCAD-R2000环境下[1-3]。
高效节水项目中常常需要绘制繁多的管道,管道标注常常需要标注长度和管径,以便于统计管材。假如按常规方法标注,标注绘制这些管道时,总要单个输入文本命令,量取管线长度,并进行比例换算,并不停重复以上2个步骤,费时费力,稍有疏忽就会导致统计长度和计算结果不准确,进而使设计效率偏低。使用本程序,通过简单易懂的操作命令,将自动完成变量参数的标注工作,使设计人员从烦琐的手工标注操作中解脱出来,达到既高质高效、又省时轻松的目的。
编程需具备两个条件:一是要会CAD操作,只有在精通CAD绘图方法的情况下,才能找到规律所在,从而发现哪些复杂操作可以通过编程得到简化;二是需要懂LISP语言,具备程序设计方法,理解程序结构,掌握程序命令,进而实现目标,提高设计绘图效率[4]。
本程序通过二次编程在CAD中尝试,自动标注管道的长度和管径,并使管道标注的结果减少后期管道工程量的统计工作。
2 程序录制
用任何一种文本编辑方式(如DOS下的“EDIT”“WPS”,Windows下的“计事本”等均可)将下面的原程序输入并以“BZ.LSP”为文件名存入AutoCAD软件的“SUPPORT”子目录内即可。在录入时,注意程序中的空格和括号(“(”“)”)都是必需的,不能丢落。
3 程序使用
具体命令是在ACAD的命令提示符后键入BZ,之后依提示回答绘图比例、标注文章高度和是否标注管长,并选择要处理的管线即可。
4 源程序编制
lISP程序编制过程中用到的主要计算程序语言具体如下:
(terpri)
(prompt "程序初始化......")
(terpri)
(setq bl (if(setq bl (getreal "输入出图比例<1:100>1:")) bl 100));出图比例为1/bl
(setq gao (* bl 2.5));根据比例计算字高。
(setq tg (strcat "标注文字高度<" (rtos gao) ">"))
(setq gao (if(setq xxx (getreal tg)) xxx gao));改变字高。
(initget 1 "Y y n N")
(setq xxx (getkword "是否标出管长?<y/n>:"))
;*************初始化完毕********************
(defun c:bz (/ jl pt1 pt2 ts ag wz du dnwz lwz dnin dnout jlout)
(setq pt1 (getpoint "选择管段起点:"))
(terpri);换行
(setq pt2 (getpoint "选择管段末端:"))
(terpri);换行
(setq dn (if(> dn 0) dn 100))
(setq ts (strcat "输入管径<" (itoa dn) ">:"));将"输入管径<默认管径>:"负值给ts
(setq dn (if(setq dnin (getint ts)) dnin dn));输入新的管径,回车取默认值(即上次运行的值)
(setq ag (angle pt1 pt2));计算管线的斜率
(setq jl (distance pt1 pt2));计算管线的长度
(setq wz (- (/ jl 2) (* 2 gao)))
(setq wz (polar pt1 ag wz));wz为管线的中点
(setq ag (if(and (> ag (/ pi 2)) (< ag (* pi 1.5))) (- ag pi) ag));将ag调整到0~pi
(setq dnwz (polar wz (+ ag (/ pi 2)) (* 1.5 bl)));dnwz为管径标注的位置
(setq lwz (polar wz (- ag (/ pi 2)) (* 4.0 bl)));lwz为管长标注的位置
(setq dnout (strcat "DN" (itoa dn)));dnout为输出管径的字符串
(setq jlout (strcat "L" (rtos (/ jl 1000.0))));jlout为输出管长的字符串
(setq du (/ (* ag 180) pi));将管线斜率ag转换为度,负给du
(setq wdpt1 (polar wz 2.356 100))
(setq wdpt2 (polar wz -0.785 100));wdpt1,wdpt2为放大标注位置矩形对角两点
(command "zoom" wdpt1 wdpt2)
(command "text" dnwz gao du dnout);输出管径
(cond
((= xxx "y")(command "text" lwz gao du jlout));输出管长
((= xxx "Y")(command "text" lwz gao du jlout));输出管长
)
(command "zoom" "previous")
(princ);静默退出
)
;启动时在命令行要显示的内容
(terpri)
(prompt )
(terpri)
(prompt "管長管线标注程序加载完毕,启动命令bz")
5 程序效果
本程序标注的管线如图1所示,线上为管径,线下为长度,标注的字高和长度由命令中参数化设计,标注便捷。
6 结论
LISP语言是人工智能学科领域广泛采用的一种程序设计符号语言,这种语言在参数化设计和绘图中具有很大的灵活性,并能实现人工智能。只有熟练掌握各种编程命令的功能,才能结合各专业特点写出实用性很强的程序。LISP开发出的程序可以实现人机互动,像运行CAD普通命令一样在命令行中直接键入自己定义的命令运行,并按命令提示键入所需参数,实现自动化绘图,简化了大量的重复操作,提高了绘图效率和质量[5]。
参考文献:
[1]许婧,刘飞鹏.AutoCAD基于LISP语言的CAD二次开发在U型渡槽截面设计中的应用[J].山西建筑,2019(11):153-156.
[2]马文福,姜文峰.采用自编LISP程序提高水工绘图的效率[J].河北水利水电技术,2004(2):25-26.
[3]陈利晖.利用AutoLISP语言提高CAD的绘图效率及质量[J].工程设计与研究,1997(95):28-61.
[4]王丙辉.一种利用Auto CAD计算构件截面惯性矩/模量的简便方法[J].广船科技,2011(12):48-50.
[5]高建亮.AutoCAD计算截面几何性质的应用[J].建设科技,2011(11):79-80.