VisualLISP语言在供水工程CAD制图中的应用

2018-10-21 13:40苏亚楠
科技信息·中旬刊 2018年7期
关键词:二次开发

苏亚楠

摘要:VisualLISP作为AutoCAD内嵌的计算机语言,是进行AutoCAD二次开发的重要工具,利用VisualLISP编写具有针对性的实用软件,可替代设计人员完成大量重复性工作,达到提高制图效率的目的。在简述AutoCAD各种二次开发接口的基础上,着重介绍了如何利用VisualLISP扩展AutoCAD的功能。

关键词:VisualLISP;AutoCAD;二次开发

VisualLISP language applications in water supply engineering CAD drawing

Su Ya-nan

(Tianjin Municipal Water-conservancy Survey and Design Institute,Tianjin 300204,China)

Abstract:VisualLISP as an embedded AutoCAD computer language,is an important tool for AutoCAD second development,VisualLISP prepared by the utility software,can replace designers to complete a large number of repetitive work,to improve drawing efficiency. Based on introduction of AutoCAD secondary development interface,mainly introduces how to use VisualLISP to extend the function of AutoCAD

Keywords:VisualLISP AutoCAD Secondary development

AutoCAD是供水工程制图中普遍采用的计算机辅助设计软件,该软件使得工程绘图的速度和质量都的得到了很大的提升。但是供水工程制图中存在大量的重复性工作,例如管线坐标、高程、转点、管材及桩号等信息的标注。AutoCAD对于上述重复性工作来说,自动化程度较低,使得工程勘查设计人员将大量的时间都花费在繁琐的绘图中。针对以上问题,虽然很多软件厂商也开发了相应的专业软件,但由于这些软件要考虑各设计单位的通用性,很难满足工程制图中的一些具体要求,使用具有局限性。因此设计人员如能掌握AutoCAD二次开发软件,编写具有针对性的实用软件,可极大的提高其绘图效率。

目前AutoCAD系统为用户提供了VisualLISP、AutoCAD Development System(C)、ObjectARX(C++)及 VBA等多種二次开发接口,其中VisualLISP作为默认的代码编辑工具在AutoCAD2000中已经被完整地集成到系统中,开发者可以直接使用AutoCAD中的对象和反应器,进行底层的开发。通过有色代码编辑器和完善的调试工具,使开发人员很容易创建和分析LISP程序的运行情况。本文主要介绍利用VisualLISP对AutoCAD进行二次开发的过程。

AutoCAD二次开发主要是根据供水工程制图的流程,利用VisualLISP编写AutoCAD绘图命令,自动完成图纸数据的提取、计算及输出,最大程度的实现自动化制图。具体内容如下:

1、子模块功能规划

根据供水工程一般设计过程,需首先完成平面布置及初步管材划分,而后根据平面布置成果进行纵断面布置,并进一步细化管材划分,待平面及纵断面布置全部完成后,分别进行相应标注工作。

其中,平面图中需进行转点坐标、转点桩号、转角角度、整公里桩号及管材标注。纵断图需进行地面高程、管中心线高程、管材分段桩号、管材分段长度、转角编号、转角桩号及闸阀的标注。根据以上制图内容可划分为6个子模块,各模块功能分述如下:

(1)平面图转点标注模块

该模块主要完成对平面图中各转点进行编号,同时从图中读取各转点坐标,根据转点坐标完成桩号及转角角度计算,在完成上述工作后,在平面图中自动完成标注工作。

(2)平面图管材标注模块

该模块主要根据管材变化情况自动完成起点、终点桩号的计算和标注,同时根据选定的线型完成管线及接口的绘制。

(3)平面图整桩号标注模块

该模块主要根据管道布置自动完成整桩号点的坐标计算,并进行桩号标注。

(4)纵断面图管材标注模块

该模块根据平面图的管材信息自动完成纵断面图管材的划分,并进行划分点的地面高程、管中心线高程、桩号及划分段长度的计算与标注。

(5)纵断面图转点标注模块

该模块根据平面图的转点信息,自动完成纵断面图的转点编号及桩号的标注。

(6)纵断面图闸阀标注模块

该模块根据用户确定的闸阀位置,自动在纵断面图中完成闸阀的绘制,并完成闸阀的编号及桩号标注。

2、子模块功能实现

在实现模块功能之前,应首先完成各个模块的程序流程图,现以整桩号标注模块为例说明功能实现的过程。该模块的流程见图1,主程序部分源代码及注释如下:

首先通过setq语句对本模块涉及的输出精度、字号及输出位置等参数进行初始化。

而后通过命令行文本提示用户在平面图中选取多段线,并输入起始桩号及终止桩号。通过entget语句得到相应多段线图元;通过length语句得到该图元所包含的折点数。

(setq pt_lst(mapcar 'cdr(vl-remove-if-not '(lambda(x)(=(car x)10))(entget en))));

(setq number(length pt_lst));

判断终止桩号是否在线路范围内,如超出则通过fix语句将线路末端的整数桩号做为终止桩号。

(while(> pd_number 1)

(setq now_cd(sqrt(+(expt x_cd 2)(expt y_cd 2))))

(setq q_zh(+ q_zh now_cd))

(setq pd_number(1- pd_number))

(setq pd_lst(cdr pd_lst)))

(if(> end_zh q_zh)(setq end_zh(*(fix(/ q_zh 500))500)));

计算各折点距离,找到首个整数桩号位置,并进行相应标注。

;如果当前折点的累积长度小于整数桩号则继续寻找下一个折点

(if(< q_zh begin_zh)

(progn(setq now_cd(sqrt(+(expt x_cd 2)(expt y_cd 2))))

(setq q_zh(+ q_zh now_cd)))

;如果当前折点的累积长度大于整数桩号则计算整数桩号点坐标,并对输出结果进行格式化后,通过command语句调用AutoCAD命令进行标注。在进行标注前需使用setvar命令设置AutoCAD系统变量值来关闭绘图捕捉。

;计算坐标

(progn(setq xl(atan(- point_y point_old_y)(- point_x point_old_x)))

(setq biaodian_x(+ point_x(*(cos xl)(- begin_zh q_zh))))

(setq biaodian_y(+ point_y(*(sin xl)(- begin_zh q_zh))))

(if(= weizhi 1)(setq line_xl(- xl 1.5708))(setq line_xl(+ xl 1.5708))) (下转第页)

(上接第页)

;格式化输出结果

(setq zh_int(fix(/ begin_zh 1000)))

(setq zh_float(- begin_zh(* zh_int 1000)))

(if(>= zh_float 100)(setq fh "+"))

(if(and(< zh_float 100)(>= zh_float 10))(setq fh "+0"))

(if(and(< zh_float 10)(>= zh_float 0))(setq fh "+00"))

;關闭绘图捕捉后调用CAD命令进行标注

(setvar "osmode"(logior(getvar "osmode")16384));

(command "line" line1 line2 "")

(command "text" text_zb heg jd out_zh)

将源代码保存为LSP文件后,在AutoCAD环境中调入上述文件即可根据设计人员确定的管线布置,完成特定区间的整桩号标注。由于篇幅所限,对其他模块流程不再介绍。

3工程实例

在南水北调中线天津市内配套宁汉供水工程中设计人员使用本套VisualLISP工程制图插件进行辅助制图。该工程管线长度约50km,采用双排管道输水。共需绘制管道平面布置图及管道纵断面图约100张,图纸中涉及大量数据标注工作。在使用过程中根据设计人员的反馈意见,对部分功能进行了补充及调整。主要包括以下几点:

(1)为便于对图纸内容进行管理,通过调用AutoCAD中layer命令,将各插件的输出成果分别绘制在不同的图层内。

(2)由于平面图中的线路及纵断面图中的地面线与管中心线均为多段线,设计人员在工程布置过程中需经常对上述多段线进行分断及合并,由此造成多段线方向与线路方向不一致的问题,为此另外编写了可对多段线方向进行调整的程序。

(3)在设计过程中,经常需要测量线路中特定点的桩号及特定桩号的位置,为此分别编写了平面图及纵断面图单点标注程序,以满足需要。

通过使用本套制图插件,极大提高了设计人员的制图效率。由于本套插件可实现数据自动采集、计算及输出,因此基本避免了图纸中出现计算及量测错误的可能性。由于本套插件编写时间较仓促,故未进行图形化交互设计,且与AutoCAD结合程度较低,在今后可进一步优化人机交互界面,使程序应用更加便捷。

4、结语

利用VisualLISP语言,设计人员可根据自身需要开发出有针对性的插件,如本次编写过程中除上述主功能模块外,还根据实际情况编写了多段线方向调整、平面图单点标注及纵断面单点标注等辅助性模块,进一步提高了制图效率。同时,VisualLISP语言还可形成图形化界面,使用户得到更友好的人机交互。

由于VisualLISP是一种嵌于AutoCAD内部的计算机语言,具备与其他高级语言基本相同的结构与功能。同时,通过利用与AutoCAD之间良好的通讯能力,使其具有其他高级语言所没有的制图能力。应用VisualLISP对AutoCAD进行二次开发,可大大提高绘图的效率,是值得设计人员深入学习和掌握的一种计算机语言。

猜你喜欢
二次开发
初中生物教材插图的分类及二次开发
例谈对高中数学教材中习题的二次开发
浅谈CAD软件二次开发的方法及工具
例谈课本习题的“二次开发”
高中物理教材导入的“二次开发”