第34卷第5期 2011年l0月 测绘与空间地理信息 GE0MATICs&SPATIAL lNFORMATION TECHNOLOGY Vo1.34,No.5 0ct..2011 批量修改CASS图形中的高程 赵卫常 ,赵军波 (1.河北省煤田地质局物测地质队,河北邢台054000;2.河北省金牛能源葛泉矿,河北邢台054000) 摘 要:阐述了如何利用OpenDCL和AutoLISP对CASS进行完善,实现批量修改测绘图形中高程点高程的方法。 关键词:CASS;AutoLISP;高程点修改 中图分类号:TP391.72 文献标识码:B 文章编号:1672—5867(2011)05—0225—02 Batch Modification of the Elevation Value in CASS Graphics ZHA0 Wei—chang’ZHAO Jun—bo 。(1.Geophysical Prospecting and Surveying Team,Hebei Bureau of Coal Geological Exploration,Xingtai 054000,China; 2.Gequan Coal Mine at Hebei Gold Bull Energy Co.,Ltd,Xingtai 054000,China) Abstract:This paper expounds how to use OpenDCL and AutoLISP to perfect CASS,and realize the batch modiifcation of the value of elevation point in surveying and mapping graphics. Key words:CASS;AutoLISP;modiifcation of elevation point 0 引 言 南方CASS是基于CAD平台,进行二次开发专门为 测绘成图而设置的专业成图系统。经过十多年的技术积 累,系统针对性强,操作简单、易学,极大地提高了测量人 员的工作效率,深受广大测量工作者的推崇。目前,在全 国范围内,95%以上的测量单位和个人正在使用南方 CASS系列软件。 言和AutoCAD有机结合的产物。AutoLISP可直接调用几 乎全部AutoCAD命令,且具备一般高级语言的基本结构 (顺序、选择、循环)和功能(计算),可直接增加和修改 AutoCAD命令,可对当前图形进行直接访问和修改,且 AutoLISP语言好学、易用,所以这次我们就用AutoLISP语 言进行开发。为了给程序一个友好的交互界面,我们用 OpenDCL来进行界面开发。 我们在用CASS软件成图的时候,有时会出现已知点 高程用错的情况,并且经过多次编辑后,已经不便再重新 成图,此时需要对错误的高程进行修改,而且这个改正值 是一个定值。CASS软件对于高程的修改有一个专门的 命令:“Changegcd”。但是这个命令,一次只能修改一个点 的高程,当错误的高程点很多时,修改起来比较麻烦。 AutoCAD的二次开发功能特别强大,我们可以通过编制 个小程序,对CASS的功能进一步完善,用它来对错误 一2具体实现 我们对CASS图形中可能出现的高程值进行分析, CASS中可能具有高程信息的实体有高程点、高程点打散 后的高程文本和表示点位的点实体。其中高程点是一种 名字为GC 200的属性块,高程文本为TEXT实体,点为 point实体。一般我们进行高程改正,需要修改的就是这3 种实体。 高程改正要确定的是,需要进行高程修改的实体类 的高程值进行批量修改,那样就方便快捷多了。 型,需要进行修改的实体范围,以及需要修改的数值。为 此我们利用OpenDCL(一种与lisp语言配合建立交互对 话框的语言)建立一个与工作人员交互的界面,如图1高 程修改界面所示。 在交互界面中“改正实体类型”的选项,用以确定需 1解决思路 首先我们对要修改的高程进行分析,找到需要修改 的高程数据实体,将这些实体放在一个选择集内,然后利 用程序对选择集内的每一个实体取出高程值,对高程值 进行修改。 要修改的类型,用leixing变量值进行表示,并通过如下语 句来得到leixing的值。 (Setq leixing(Odcl—OptionList—GetCurSel gcgz—zhu— OptionList2)) AutoCAD二次开发的语言很多,AutoLISP语言是嵌 套在AutoCAD内部,将LISP(List Processing Language)语 收稿日期:2010—08—11 作者简介:赵卫常(1972一),男,河北藁城人,高级工程师,硕士,2010年毕业于中国矿业大学测量工程专业,主要从事城市测量 工作。 226 测绘与空间地理信息 2011年 图1高程修改界面 Fig.1 Elevation modiifcation interface 确定了要修改的实体,再确定需要修改的范围。对 于一个图形来说,错误的数据有可能是一站数据,也可能 是整个图形。为此我们建立改正范围选项,让工作人员 确定需要修改的范围。如果是选择范围改正,则要求工 作人员在图形中进行实体选择。我们用fanwei变量表示 需要选择的范围。通过以下语句得到fanwei的值。 (Setq fanwei(Odcl—OptionList—GetCurSel gcgz—zhu— OptionList1)) 当确定好需要修改的实体类型和修改范围后,我们 将需要修改的实体放到一个选择集“sel”中,然后逐个进 行处理。其中修改point实体和text实体的代码比较简 单,不再列出,仅列出选择实体和修改高程点的源代码: (if(=fanwei 1) (progn (cond((=leixing 0)(setq sel(ssget”x” ((0.” point”)))));iS择图形中所有point实体 ((=leixing 1)(setq sel(ssget”X”,((0.” text”)))));Si择图形中所有文本实体 ((=leixing 2)(setq sel(ssget”x”,((2.” gc200”)))));Si择图形中所有高程点实体 ) ) (progn (setq sel(ssget”i”));手工选择实体 (if(not se1) (progn (setq sel(ssget)) ) ) ) );范围选择 ((:leixing 2);如果类型是高程点 (REPEAT STGS (SETQ STNAME(SSNAME SEL I)) (SETQ ST(ENTGET STNAME)) (SETQ POINT1(ASSOC 10 ST)) (SETQ zl(NTH 3 POINT1)) (setq pointl(subst(+zl gzz)zl point1)) (SETQ ST(SUBST pointl(ASSOC 10 ST)ST)) (ENTMOD ST) (SETQ ST(ENTGET(entnext stname))) (SETQ pointl(ASSOC 1 ST)) (SETQ zl(cdr point1)z2(atof z1)) (if(<z2 0.10);确保修改的文本为数值 () (progn (setq z2(+z2 gzz)z3(rtos z2 2 2)) (setq st(subst(cons 1 z3)pointl st)) (EN FMOD ST)(entupd stname) ) ) (SETQ I(+I 1)) );改正高程结束 3程序运行 AutoLISP语言中的一切成分都是以函数的形式给 出,在调用AutoLISP函数之前须在AutoCAD中用“app— Load”对程序进行加载,加载后的AutoLISP函数就象Au— toCAD的命令一样方便使用。对于这个程序因其开发时 使用了OpenDCL,所以需要将对OpenDCL界面进行驱动 的OPENDCL16.ARX文件复制到自己安装的AutoCAD的 支持目录下,然后将自己的两个程序gcgz.dcl和gcgz.1sp 同样复制到AutoCAD的支持目录下,然后在AutoCAD中 用命令”appload”来装载gegz.1sp程序,再用命令”gegz”, 调用函数,进行高程修改。效果图如图2所示。 图2运行效果图 Fig.2 Runni一 ng effect 4结束语 用计算机制图,要充分发挥计算机的优势作用,通过 用计算机开发语言,编制计算机程序。把枯燥无味的重 复性体力劳动交给计算机去做,可以大大提高工作效率。 参考文献: [1]梁雪春.AutoLISP实用教程[M].北京:人民邮电出版 社,1998. [2] 南方测绘仪器公司.CASS 7.0使用说明书[G].广州:南 方测绘仪器公司,2006. [3]芬克尔斯坦(美).AutoCAD2008宝典[M].北京:人民邮 电出版社,2008. [4] 兰度.AutoCAD可视化对话框开发工具OpenDCL使用 简介[J].城市勘测,2009(6):87—89,92. [责任编辑:王丽欣]