AutoLISP语言在房产测绘中的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AutoLISP语言在房产测绘中的应用
作者:周蓝捷,刘玲燕
来源:《电脑知识与技术》2010年第06期
摘要:该文主要讨论在房产测绘中对于autocad软件中的lisp语言编程的应用。
通过使用符合工作环境与要求的编程提高繁琐而细致的房产测绘内业作业中的工作效率。
关键词:AutoLISP;房产测绘
AutoLISP Language in the Real Estate Mapping
ZHOU Lan-jie, LIU Ling-yan
(Seismic Survey Research Center, Xiamen 361021, China)
Abstract: This paper mainly discusses about the application of LISP in daily work of real-estate mapping. By programming, we can meet the need of complicated and meticulous work in real-estate mapping and improve work performance.
Key words: AutoLISP; real-estate mapping
房地产测绘是关系到百姓民生的重要测绘项目。
在繁琐复杂的工作中要做到细致认真,保证数据质量的可靠性。
而面对庞大的数据量,如何通过有效的编制一定的程序让计算机为我们的作业人员服务,从而提高工作效率,成为我们需要思考的问题。
在这里,我们通过编制LISP程序来实现一定的提高。
1 AutoLISP语言简介及其应用
AutoLISP全名是LIST Processing Language,出现于1985年推出的AutoCAD R2.18中,是一种嵌入在AutoCAD内部的编程语言,是LISP原版的一个子集,她一直是低版本AutoCAD的首选编程语言。
她是一种表处理语言,是被解释执行的,任何一个语句键入后就能马上执行,她对于交互式的程序开发非常方便,其缺点是继承了LISP语言的编程规则而导致繁多的括号。
随着AutoCAD在数字化测绘的流行,AutoLISP也随之成为二次开发的利器。
随着AutoCAD版本的演进,目前VisualLISP已经被完整的集成到AutoCAD 2000以上的版本中,她为开发者提供了崭新的、增强的集成开发环境,一改过去在AutoCAD中内嵌AutoLISP 运行引擎的机制,这样开发者可以直接使用AutoCAD中的对象和反应器,进行更底层的开发。
其特点是自身是AutoCAD 2000中默认的代码编辑工具;用她开发AutoLISP程序的时间被大大的缩短,原始代码能被保密,以防盗版和被更改;能帮助大家使用ActiveX对象及其事件;使用了流行
的有色代码编辑器和完善的调试工具,使大家很容易创建和分析LISP程序的运行情况。
在VisualLISP中新增了一些函数:如基于AutoLISP的ActiveX/COM自动化操作接口;用于执行基于AutoCAD内部时间的LISP程序的对象反应器;新增了能够对操作系统文件进行操作的函数。
在数字化测绘的世界里,AutoCAD是被广泛使用的成图软件,针对AutoCAD进行的二次开发也广泛流行,例如被广泛采用的CASS系统及各种建筑软件等。
而针对不同要求的工程项目,一套普遍适用的软件总是会在细小的环节表现出不适应性,或者说,我们可以通过简单的编程从细节上满足作业人员的需要,改善工作表现,提高工作效率。
2 房产测绘工作流程简介
在房产测绘中,我们需要将外业中形成的房屋草图绘制成CAD图件并加以注记。
一般情况下要区分几个图层,线划层,注记层,权属线层等。
在纷繁复杂的图形中,通过人眼分辨并从多个图层中分辨并操作正确,在长期的工作中容易导致疲劳并带来误操作。
我们需要计算机能够对特定的图层中的目标进行选定和操作。
3 程序实现
通过vlide命令我们进入到lisp语言的编辑界面中,新建一个lsp文件以供编辑,并保存下来,在今后的工作中通过调用这个文件来访问并使用这些命令。
在此我们简要的对自己工作中产生的几个典型的命令进行介绍。
本文讨论的程序在AutoCAD 2004版本AutoLISP环境中运行通过。
3.1 查询指定图层闭合多段线面积并注记
(defun c:mj(/ s bh mj str p)
(command "layer" "m" "5说明注记" "")
(princ "\nplz choose target in layer 3!")
(command "osnap" "")
(setq s(entsel))
(if s(progn
(setq s(car s))
(setq bh (cdr (assoc 70 (entget s))))
(redraw s 3)
(if (/= (boole 1 bh 1) 1)(princ "\ntarget not closed, plz check!")) (command "_area" "o" s)
(setq mj (getvar "area"))
(if (= mj 0)(exit))
(setq mj (rtos mj 2 3))
(princ (strcat "\nend in:" mj "㎡"))
(setq str (getstring "\nnote:"))
(setq mj (strcat str "=" mj))
(setq p (getpoint "\npoint out the point"))
(if p (progn
(command "style" "standard" "宋体" 0.35 1 "" "" "")
(command "text" p 0 mj)
)
)
(redraw s 4)
)
(princ "\n ** hands up, it's a hold up! **")
)
(princ)
)
3.2 对注记层面积注记进行累加计算
(defun c:zmj()
(princ "\nplz choose numbers in layer 5 to sum")
(setq s (ssget '((0 . "text")(8 . "5说明注记"))) total 0)
(if s
(progn
(setq l (sslength s)i 0)
(repeat l
(setq e (ssname s i) i (1+ i)
mj (cdr (assoc 1 (entget e)))
)
(if (vl-string-search "=" mj)
(setq mj (atof (substr mj (+ 2 (vl-string-search "=" mj)))))
(setq mj (atof mj))
)
(setq total (+ total mj))
)
(princ (rtos total 2 3))
(princ "\npoint out the point")
(setq s3 (ssget '((0 . "text")(8 . "5说明注记"))))
(if s3 (progn
(setq s(ssname s3 0 ) e (entget s) total (rtos total 2 3) t1 (assoc 1 e)) (if (vl-string-search "=" (cdr t1))(setq total (strcat "S=" total)))
(setq t2 (cons (car t1) total) e (subst t2 t1 e))
(entmod e)
)
)
)
(princ "\nplz choose text including number!")
)
(princ)
)
3.3 对测量草图中的墙厚进行注记
(defun c:qh()
(command "osnap" "")
(setq str (getstring "\nwidth:"))
(command "layer" "m" "4数据注记" "")
(command "style" "standard" "宋体" 0.35 1 "" "" "")
(setq p (getpoint "point out the point"))
(command "text" "m" p "0" str)
(command "circle" p 0.3)
(princ)
)
4 结束语
通过思考与实践,我们能够使用AutoLISP语言来进行相应的编程,以适应工程项目要求的程序来满足作业人员简化操作,提高工作精度,缩短作业时间的要求,从而提高生产效率。
在工作中,这样的例子还有很多,我们需要通过不断的学习,思考与实践来提升效率。
参考文献:
[1] 唐亮,张帆,卫朝富.AutoCAD2002开发教程[M].北京:北京希望电子出版社,2002.
[2] 郭秀娟,于全通,范小鸥.AutoLISP语言程序设计[M].北京:化学工业出版社,2008.。