刘刚,张小波
(成都市勘察测绘研究院,四川 成都 610081)
Visual LISP程序设计在市政管线竣工测量的应用
刘刚*,张小波
(成都市勘察测绘研究院,四川 成都 610081)
传统方式下的AutoCAD图形编辑,存在大量机械重复人工操作,已不能满足现代化工程测量作业要求。基于优化作业流程、保证数据质量、提高作业效率,便于各级质检等目的,在市政管线竣工测量内业处理中,以管线竣工图上标注竣工间距为例,利用Visual LISP程序设计实现AutoCAD平台的二次开发。
Visual LISP;AutoCAD;二次开发;市政工程;管线竣工测量
随着城市化的发展,城市市政工程建设规模不断扩大,使用功能日趋复杂。城市地下管线由单一、简单的管线发展到多类别、多权属和布局复杂的管线网。任何一种管线发生故障,都会对城市建设、居民生活带来重大影响。因此须按照城市规划管理的要求,精确获取管线数据,在数字化地形图中,综合叠加地下及地面的各类管线竣工数据、规划区域和规划道路等基础测绘信息,形成一个基于测绘数据的城市管线信息系统。本文主要叙述基于AutoCAD制图软件,在市政管线竣工测量内业处理中应用Visual LISP程序设计进行二次开发,打破传统作业方式,从而实现内业的自动化处理,适应新时代工程测量作业要求。
2.1 管线竣工测量阶段
测绘单位对竣工管线进行外业实测,测量内容包括:平面坐标位置、井底及地面高程、管顶高程、沟底高程,电力杆、地上架空管道可不测架空管线高程,调查内容包括:种类、走向、管径(圆径及方径)、管数及孔数、附属物、特征、管偏、埋设方式、压力、电压、流向、埋管时间、材质、权属单位、探测单位等。
我院管线竣工测量具体流程如图1所示:
2.2 管线竣工验收阶
城市规划部门负责对竣工管线进行竣工验收工作,其中,比对经规划审定的设计数据与测绘单位提供的竣工数据是其中一项验收项目,对比设计图“规划间距”与竣工点位到道路规划中线(以下简称“竣工间距”),判断管线位置是否按“规划间距”修建,将“竣工间距”作为管线竣工的验收依据之一。
图1 管线竣工测量作业流程
在内业数据处理时,管线竣工测量作业流程中第3、4步均可由程序完成,自动化程度较高,但目前第5、6步均为人工操作。对于动辄几十个、多则数百个、甚至上千个管线点来说,机械重复的人工操作,一方面工作效率低,另一方面出错概率大,错误源主要来自以下几个方面:
(1)CAD图面标注时,没有捕捉到相应管线点;
(2)CAD图面标注时,没有捕捉到相应中线,或者中线相应位置;
(3)填写间距至竣工报告时,未将间距和点号一一对应,错把A点间距输入B点表格;
(4)填写间距至竣工报告时,数字输入错误。
此外,对于后期的资料质检人员来说,无法快速、准确的核对竣工间距的正确性。
4.1 工具选择
Visual LISP既可以直接加载源代码解释执行,也可以通过编译器先将源代码编译为可执行程序,然后再加载执行。前者的优点是可随时测试或修改源代码,可以利用所有的调试程序的工具;后者的优点是提高了执行速度,并对源代码保密。利用Visual LISP程序设计实现在AutoCAD平台的二次开发是较便捷、有效的办法。
4.2 初步设计
用户只需在AutoCAD中选择参考线(道路中线、设计中线等),程序自动标注图面所有管线点与线的间距,并生成报表,保存至与图形同路径处。
4.3 详细设计
(1)定义函数
①设置间距标注样式:标注图层、箭头类型、箭头大小、文字大小、文字方向、文字偏移等;
代码如下:
(vl-load-com)
(setq AcadObject (vlax-get-acad-object)
AcadDocument (vla-get-ActiveDocument AcadObject)
mSpace (vla-get-ModelSpace AcadDocument))
(setq F_DimStyle(vla-get-ActiveDimStyle AcadDocument)
F_DimStyles(vla-get-DimStyles AcadDocument))
(setq New_DimStyle(vla-add F_DimStyles "管线间距"));新建图层
(vla-put-ActiveDimStyle F_Active New_DimStyle)
(setvar "dimblk" "_ArchTick");设置箭头名称
(setvar "dimasz" 0.6);设置箭头大小
(setvar "dimdec" 2);设置精度,小数后2位
(setvar "dimpost" "m");设置后缀
(setvar "dimtoh" 0);设置文字方向
(setvar "dimtih" 0);设置文字方向
(setvar "dimtad" 1);设置文字垂直
(setvar "dimtxt" 0.5);设置文字大小
(setvar "dimgap" 0.5);设置文字偏移量
(command "_DIMSTYLE" "S"(getvar "DIMSTYLE") "Y");调用AutoCAD命令,保存间距标注样式
②获取图形文件信息:文件名称、文件路径;
③获取图面信息:图层名称列表;
④调用Excel程序:生成报表模版。
(2)主函数
在AutoCAD命令行输入“JGJJ”(竣工间距)后回车,程序开始执行,具体流程如图2所示:
图2 主函数流程图
其中,逐个提取点号、坐标,并计算间距的主要代码如下:
(while(<= n P_len)
(setq P_ent(ssname P_ss(1- n))
P_xyz(cdr(assoc 10(entget P_ent(list "*"))))
P_xy(reverse(cdr(reverse P_xyz)))
D_list(list)
nn 1)
(while(<= nn L_len)
(setq L_ent(ssname L_ss(1- nn))
xdstyle(cdr(assoc 0(entget L_ent)))
vlaobj(vlax-ename->vla-object L_ent)
L_xyz(vlax-curve-getClosestPointTo vlaobj P_xy)
L_xy(reverse(cdr(reverse L_xyz)))
P_dist(distance L_xy P_xy)
D_list(cons P_dist D_list) D_listC D_list
nn(+ nn 1))
(if(=(length D_listC) 1)
(setq min_dist(car D_listC))
(while(>(length D_listC) 0)
(setq min_dist1(car D_listC)
min_dist2(cadr D_listC))
(if(=(length D_listC)(- nn 1))
(if(> min_dist1 min_dist2)
(setq min_dist min_dist2
min_dist min_dist1))
(if(> min_dist1 min_dist)
(setq min_dist min_dist
min_dist min_dist1))
)
(setq D_listC(cdr D_listC))
)
)
(setq N_dist(length(member min_dist D_list))
xd(ssname L_ss(- N_dist 1))
xdstyle(cdr(assoc 0(entget xd)))
vlaobj(vlax-ename->vla-object xd)
L_xyz(vlax-curve-getClosestPointTo vlaobj P_xy)
L_xy(reverse(cdr(reverse L_xyz)))
P_DH(substr(cdr(caddr(car(cdr(assoc -3(entget P_ent(list "*"))))))) 6)
n(+ n 1)))
采用Visual LISP程序生成的竣工成果表如图3所示:
图3 竣工成果表
采用Visual LISP程序在AutoCAD图面标注的间距如图4所示:
图4 竣工成果图
笔者采用实际生产中的数据,模拟完成人工操作与程序执行的对比测试,具体如下:
5.1 正确率对比
通过作业人员的认真操作,仔细核对,方可保证人工操作数据的正确性。
经过笔者反复测试,消除Visual LISP程序代码Bug,可确保图面标注以及报告填注的准确性。
5.2 效率对比
在保证数据正确的前提下,笔者通过自己和其他作业人员的实际操作,记录完成不同数量标注花费的平均时间。同时,采用Visual LISP程序执行方式完成相同数量标注的时间作为分析数据,具体如表1所示:
效率对比数据 表1
备注:不同的系统配置和CAD版本,结果会略有不同;笔者使用的系统配置为:64位Win7旗舰版,8G内存,CAD2007。
时间对比如图5所示:
图5 时间对比
效率对比如图6所示:
图6 效率对比
5.3 对比分析
通过以上数据可得到以下结论:
(1)为保证数据的正确性,人工操作需每次花费大量时间,而编写Visual LISP程序只需要一次性投入。
(2)随着竣工点位数量的增加,人工操作花费的时间远远超过Visual LISP程序执行;
(3)随着竣工点位数量的增加,人工操作时间的增长速度明显,Visual LISP程序执行的增长速度可忽略不计;
(4)随着时间的推移,人工操作的效率逐渐下降,竣工点位数量从1~1000,效率下降约40%;
(5)Visual LISP程序的效率在竣工点位数量从1~200的区间内迅速上升,当达到200以后,趋于稳定。
综上所述,利用Visual LISP执行程序可有效地避免人为操作出现错误,降低作业人员劳动强度,提高作业人员作业速度,便于各级质检人员检查,达到了预定的目标。
目前的专业图形编辑软件,有基于AutoCAD平台的,例如:南方CASS、中望CAD等;有自主研发平台的,例如:南方iData数据工厂、清华山维EPS等,他们在数字成图,数据入库方面都已经相当成熟,但在特殊专业、复杂用途的图形编辑中,依据现有软件的功能往往难以实现,我们可以通过对AutoCAD的二次开发,解决工作中的实际问题,达到提高企业的生产效率和技术水平的目的。
本文通过Visual LISP程序设计在市政管线竣工测量内业处理应用中的一个示例,解决了长期以来在间距标注中由于人工操作带来的劳动强度大、工作效率低、数据质量差三大难题。除此之外,我们还可以根据工作中的实际需求,利用Visual LISP强大的功能性、与AutoCAD良好的交互性,将Visual LISP程序设计扩展到市政管线竣工测量的其他方面以及其他测量工程。
[1] 李学志,方戈亮,孙力红. Visual LISP程序设计AutoCAD 2006(第2版)[M]. 北京:清华大学出版社,2010.
[2] 陈伯雄,冯伟. Visual LISP程序设计技巧与范例[M]. 北京:人民邮电出版社,2002.
[3] 李晓辉,薛欣. 计算机辅助设计与绘图(AutoCAD 2006 中文版)[M]. 北京:清华大学出版社,2006.
[4] CJJ/T8-2011.城市测量规范[S].
[5] CH/T 1037-2015.管线信息系统建设技术规范[S].
[6] 李灶强,汤丽珍. 基于VLISP开发生成平面辅助图的实现[J]. 城市勘测,2012(6):113~116.
Visual LISP Programming In Municipal Pipeline Surveying Applications
Liu Gang,Zhang Xiaobo
(Chengdu Institute of Survey and Investigation,Chengdu 610081,China)
AutoCAD Graphics traditional mode,there are a large number of mechanical repetition of manual operations Can’t meet the operational requirements of modern engineering measurement. Based optimize processes,ensure data quality,improve operational efficiency,ease of quality control and other purposes at all levels in the municipal pipeline completed surveying process to the pipeline built drawings marked the completion of the pitch,for example,the use of Visual LISP program designed to achieve AutoCAD platform secondary development.
visual LISP;AutoCAD;secondary development;municipal works;pipeline surveying
1672-8262(2017)03-141-04
P209
B
2016—07—26
刘刚(1980—),男,工程师,主要从事市政工程测量产品审核等技术工作。