LISP编程在管线探测工程制图中的应用

2023-09-06 06:32吴思蕴温立委张汉春
现代信息科技 2023年14期
关键词:测绘工程编程

吴思蕴 温立委 张汉春

摘  要:AutoCAD是全球领先的软件,在测绘工程应用十分普遍。文章介绍了AutoLISP语言的特点,列举了广州市地下管线探测工程中的物探点号展点、测绘地形行树绘制、广州白云国际机场、广州亚运城等工程的设计报建图的管线长度估算、绘制高压走廊线路图的部分lisp程序,弥补现有测绘专业软件的不足,完善管线探测工程制图的功能,保证了管线信息动态更新的要求。

关键词:AutoLISP;AutoCAD;测绘工程;管线探测;编程

中图分类号:TP39     文献标识码:A   文章编号:2096-4706(2023)14-0134-04

Application of LISP Programming for Map Drawing in Pipeline Exploration Engineering

WU Siyun, WEN Liwei, ZHANG Hanchun

(Guangzhou Urban Planning & Design Survey Research Institute, Guangzhou  510060, China)

Abstract: AutoCAD is the global leading software and it is widely used in surveying and mapping engineering. This paper introduces the characteristics of AutoLISP language, and lists some lisp programs, such as drawing points of position for physical exploration name of underground pipeline in Guangzhou underground pipeline detection project, drawing row of trees for terrain, pipeline length estimation for designing and construction planes in Guangzhou Baiyun International Airport and Guangzhou Asian Games City projects, and drawing high-pressure corridor route diagrams, etc. It makes up the shortage of the existing surveying and mapping professional software, improves the function of pipeline detection engineering drawing, and guarantees the requirements of dynamic update of pipeline information.

Keywords: AutoLISP; AutoCAD; surveying and mapping engineering; pipeline detection; programming

0  引  言

AutoCAD是Autodesk公司開发的工程图形处理软件,在勘察设计行业中普遍地在得到推广和应用。目前测绘领域内基于机助CAD的二次开发取得了飞速发展[1],并应用于各种比例尺的地形图、地藉图、宗地图、地下管线成果图、断面图。该软件不仅具有丰富的绘图命令,还具有强大的图形编辑功能,而且软件运行相当稳定。要用好AutoCAD进行测绘制图,利用CAD本身提供二次开发的工具是必不可少的,其中包括内嵌编程语言AutoLISP。

1  AutoLisp语言的特点与功能

AutoLISP是AutoCAD内嵌的解释性语言。它起源于LISP语言,嵌入在AutoCAD的内部,全部都是函数,没有语句的概念和语法结构,函数的调用是通过表来完成的。表通过圆括号()来定义,程序通过表结构完成,它程序设计和绘图完全融为一体,还可以实现对AutoCAD图形数据库的直接访问和修改。AutoLISP语言语法简单,易学易用,表达能力强,功能函数强大,编写的环境简单,通过定义函数实现各种功能。除可以完成各种科学计算外,还能调用AutoCAD各项命令,创造更有用的AutoCAD新指令,直接访问和修改图形数据,从而大大地扩充了图形处理功能[2-5]。

2  用Lisp语言开发制图新功能

尽管AutoCAD本身图形功能很强的,但是由于它本身不是为勘察行业制定的,用户必须根据自己的需要对AutoCAD进行各种功能的开发,利用AutoLISP语言,编写不同程序,读取有关数据文件,组合操作AutoCAD命令,实现用户要求的图件,下面介绍几个典型示例。

2.1  实现在管线数据的展点、写点号

地形图或地下管线测量,既有导线点,也有大量的图根点、管线点,有时多达几千个上万个。因此先将各外业测绘的测量点号、物探点号、X、Y、Z坐标的格式,写入文本txt文件,通过常规检查,就可展点程序生成DWG点位文件,用作后一步处理。

如下为用txt数据展点程序[6-7]:

(setqfname (getfiled "管线点数据文件txt" "" "txt;*" 2));获取文件名

(setq f (open fname "r"));打开txt文件

(setqsj (read-line f));读取第一行数据

(while (/= sj nil)

(setqclh (substrsj 1 6));提取测量点号

(setqwth (substrsj 7 5)) ;提取物探点号

(setq x (atof(substrsj 12 10)));提取并转换X坐标为浮点数

(setq y (atof(substrsj 22 10))) ;提取并转换Y坐标为浮点数

(setq h (atof(substr sj32 5))) ;提取并转换Z坐标为浮点数

(setq pt (list yy xx hh));组成三维坐标点

(command "point" pt) ;; 展座标点位

(command "text" (list (+ y (* 0.2 msl)) (- x (* 0.4 msl))) (* 1.0 msl) "0.0" clh) ;注测量点号

(command "text" (list (+ y (* 0.25 msl)) (- x (* 0.45 msl))) (* 1.0 msl) "0.0"  wth)) ;;注物探点号

(setqsj (read-line f));继续下一行

);;while

(close f);关闭文件,结束

实际操作中,输入txt文件,便可在CAD中生成展点图形,效果如图1所示。

2.2  地形行树绘制

在地形测量中,需要绘制阶梯、陡坎、铁路、围墙、界址线、行树等地貌符号和图式符号,而AutoCAD却这些绘图命令,但是,我们采用LISP编程,可以准确、快速、自动处理完成各种命令。如下为绘制行树(效果如图2所示)程序:

(defunc:hs (/  pt1 pt2 ptcdist ang msl)

(setvar "cmdecho" 0)

(setq msl 0.5)

(setq pt1 (getpoint "\n 1请给出行树的起点:"))

(setq pt2 (getpoint "\n 2请给出转折点:" pt1))

(while (/= pt2 nil)

(if  (/= pt2 nil)

(progn

(setqdist (distance pt1 pt2));计算两点距离

(setq ang (angle pt1 pt2)) ;计算两点角度

(command "circle" pt1 (* msl 0.5) "") ;起点绘树

(setqptc pt1);中间树

(while (>= dist (* msl 10.0));中间树与转折点是否小于5米

(setqptc (polar ptc ang (* msl 10.0))) ;计算方向ang、距离5m绘树点坐标

(command "circle" ptc (* msl 0.5) "") ;该点绘树

(setqdist (distance ptc pt2));重新计算绘树ptc与转折点pt2的距离

) ;while 2

);progn

);if

(setq pt1 pt2)    ;转折点赋值给起点

(setq pt2 (getpoint "\n 请给出转折点:" pt1))

);while

(princ "OK")

);enddefun

2.3  设计报建图的管线长度估算

在政府委托的管线竣工测量工程时,并不是每宗工程都有管线长度,往往只提供综合管线设计图,里面有给水、排水、电力、电信、燃气,也有新型管线如中水、冷冻水、垃圾真空等,也有其他如道路边线、道路中线等其他层。我们需要计算全部图层的各管线长度预估,偏于便于工作安排。部分程序如下:

(defunC:cal_all_lay_len ()

(setqwfname (getstring  "\n输出长度计算的文件名: "))

(setqtxtfilename (strcat (getvar "dwgprefix") wfname ".txt"))

(setqfh (open txtfilename "w"))

(setq  out1 (strcat "DWG文件:"  (getvar "dwgname") "的統计如下:\n"))

(print out1)

(princ out1 fh)

(setq  out1 (strcat "\n 层名 圆 直线 圆弧 多段线 本层长度 本层实体数 \n") )

(print out1)

(princ out1 fh)

(setq t1 (tblnext "layer" "0"))

(setqcnt 1)

(while (setq t1 (tblnext "layer"));;图层循环

(setqcnt (+ cnt 1))

(setq cur_layer1 (cdr (assoc 2 t1)))

(cal_Onelay_len  cur_layer1);;某一图层cal_Onelay_len函数计算

(setqall_sn (+ Sn_cirSn_lineSn_arcSn_poly));4种实体相加

(setqall_len (+ len_cirlen_linelen_arclen_poly));

4种长度相加

(princ cur_layer1 fh);写层名

(princ " " fh) ;加空格

(princlen_cirfh);写圆长

(princ " " fh)

(princlen_linefh);写直线

(princ " " fh)

(princlen_arcfh);写圆弧长

(princ " " fh)

(princlen_polyfh);写多段线长

(princ " " fh)

(princll_lenfh);写本层长度

(princ " " fh)

(princlall_snfh);写本层实体数

(princ "\n" fh);;换行

(closefh)

(princ (strcat "\n文件写在->: " txtfilename))

(prin1)

2.4  绘制高压走廊线路图

广州市高压走廊数据采集技术规定中,要求采集的内容有:塔位平面坐标、高程、线路名称、塔号、塔型、塔高、最大横梁宽度、最低呼称高、根开、塔基高程、最低弧垂高程等。先外业测量采集有关数据,室内计算,形成Excel数据文件。

根据高压走廊Excel数据,便可绘制图形文件[8]。部分程序如下:

(DEFUN c:run_xls2cad ();加载主文件

(SETQ FileName "d:/gyzl/xls_cad_0509.dvb")

(VL-VBALOAD FileName);加载VBA文件

(VL-VBARUN "draw_gyx.main");执行VBA读取Excel数据并绘制三维高压走廊图主程序

(COMMAND "_vbaUnload" FileName);御载VBA文件

再在高压线路图上输入:“HZTK2Q”,图内鼠标点一下,自动计算1/2000图名、矩形边界,就可以在图上画出(效果见图3):

(DEFUN C:HZTK2Q (/ tuchjuan juan1 x y);绘1/2千的边界和图幅名

(COMMAND "layer" "s" "tk2000" "");

(SETQ juan (GETPOINT "\n点取位置:"));

(SETQ x_n (CADR juan));计算点取位置的X坐标

(SETQ y_e (CAR juan));计算点取位置的Y坐标

(tfh2001 x_ny_e);;该函数求出1/2千的图幅名qqname,坐下角的X,Y坐标mm1、nn1

(SETQ juan0 (LIST nn1 mm1 0));坐下角的X,Y坐标

(SETQ juan1 (LIST (+ nn1 1000) (+ mm1 800) 0));计算右上角的X,Y坐标

(COMMAND "rectang" juan0 juan1) ;绘制1/2千矩形图框

(COMMAND "text"

(LIST (+ nn1 260) (+ mm1 370))

"100"

"0"

Qqname;函数tfh2001求出1/2千的图幅名

""

);图框中心绘图名

) ;_END DEFUN

3  结  论

目前,南方CASS等专业软件在数字成图、数据入库功能强大和成熟,欠缺一些特殊业务、复杂用途的功能。AutoCAD的版本已经2023版,但是AutoCAD R14到AutoCAD 2022都有不同程度的使用,Visual LISP是AutoLISP的完善和补充,采用两者开发的程序适合全部AutoCAD版本,灵活地完成各种重复性、复杂性较高的实际编辑工作,可以补充市场软件的不足,提高管线探测工程工程的绘图效率。

参考文献:

[1] 青盛,满旺.AutoCAD及测绘应用 [M].西安:西南交通大学出版社,2012.

[2] 李灶强.用LISP语言实现分幅图的自动提取 [J].城市勘测,2015(3):76-78.

[3] 李胜利,李雯.VBA和LISP编程实现地籍调查成果的自动化输出 [J].城市勘测,2010(4):145-147.

[4] 梁华冰.编写LISP程序进行城市地下管线竣工图标注的实例 [J].测绘与空间地理信息,2014,37(7):159-161.

[5] 曾攀立,刘传逢,刘永锋,等.基于AutoCAD的排水管线缺陷类型自动标记成图系统设计与实现 [J].城市勘測,2020(1):135-137.

[6] 廖宇宏,张汉春.LISP编程在管线制图中的开发应用 [J].现代计算机:专业版,2010(9):130-132.

[7] 刘刚,张小波.Visual LISP程序设计在市政管线竣工测量的应用 [J].城市勘测,2017(3):141-144.

[8] 张汉春.基于VBA和VLISP的高压走廊数据处理系统开发 [J].现代计算机,2006(8):53-56.

作者简介:吴思蕴(1983—),女,汉族,广东广州

人,工程师,本科,主要研究方向:计算机信息技术、测绘工程;通讯作者:张汉春(1962—),男,汉族,广东梅县人,高级工程师(教授级),本科,研究方向:计算机技术、测绘工程、工程物探、工程咨询。

猜你喜欢
测绘工程编程
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
纺织机上诞生的编程
测绘工程测量技术的发展