利用AutoLISP语言批量修改CASS下高程点的高程.doc_第1页
利用AutoLISP语言批量修改CASS下高程点的高程.doc_第2页
利用AutoLISP语言批量修改CASS下高程点的高程.doc_第3页
利用AutoLISP语言批量修改CASS下高程点的高程.doc_第4页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业论文(设计) 题目: 利用AutoLISP语言批量修改 CASS下高程点高程学院: 班级: 姓名: 指导教师: 职称: 完成日期: 年 月 日山西大同大学本科生毕业设计中文题目:利用AutoLISP语言批量修改CASS下高程点高程 英文题目:Using AutoLISP language to modify the elevation of elevation point in batch CASS学 院: 煤炭工程学院 姓 名: 学 号: 专 业: 班 级: 指导教师: 职 称: 完成日期: 年 月 日大同大学本科毕业论文(设计)原创性声明作者声明:我所呈交的毕业论文(设计)是在指导教师指导下独立进行研究工作所取得的成果。除文中已经标明引用的内容外,本论文不包含其他个人或集体已经公开发表的研究成果。本声明的法律结果由本人承担。毕业论文(设计)作者签名: 签字日期: 年 月 日指导教师声明:该生所呈交的毕业论文(设计)是在本人指导下独立完成的,相关的检测报告已审阅。除文中已经标明引用的内容外,本论文不包含其他个人或集体已经公开发表的研究成果。指导教师签名:签字日期: 年 月 日山西大同大学 2016 届本科毕业论文(设计)开题报告书学院: 系别: 专业(专业方向): 论文题目利用Auto LISP语言批量修改CASS下高程点高程论文类型A理论研究;B应用研究;C应用理论研究;D产品设计;E工程技术开发;F软件开发与应用;G其它。完成方式A理论研究;B实验;C实习或实践;D工程实践;E社会调查;F毕业展演;G其它。指导教师职称学生姓名学号一、研究目的(选题的意义和预期应用价值) 南方CASS是基于CAD平台,进行二次开发专门为测绘成图而设置的专业成图系统。利用CASS软件进行软件成图时,有时会出现高程点出错的情况,在多次编辑不便重新成图的情况下,修正高程值则是一个必须的过程,南方CASS对于高程修改有一个专门的命令“changed”,但一次只能修改一个点高程,当修改的高程点较多时,则比较不方便。这时,通常做法是将点位坐标高程导出到Excel,在Excel上进行修改再导入CASS,进行展绘。但这种办法也不方便,在数据量大的情况下,工作量也很大。而运用Auto LISP语言即AutoCAD的二次开发功能则能很好的解决这一问题。 AutoCAD的二次开发功能特别强大。AutoCAD 软件二次开发是在现有软件基础上, 为提高和完善软件功能, 使之更符合用户需求而对软件所做的开发工作 ,目的是提高设计质量和效率及充分发挥通用 AutoCAD 软件价值。二次开发将应用对象的设计规范、构造描述 、设计方法等以约束关系形式集成到通用 AutoCAD 平台中去, 使应用对象设计智能化、集成化,也是将 AutoCAD 环境客户化的基本手段 。Auto LISP( List Processing Language) 是一种内嵌于 AutoCAD 中表处理高级程序设计语言, 能够直接在AutoCAD 内部运行 ,是迄今人工智能领域中应用最广泛的程序设计语言之一 . Auto LISP 既具备一般高级语言的基本结构和功能 ,又具有一般高级语言所没有的强大图形处理功能; Auto LISP 可直接调用几乎全部的AutoCAD 命令,它语法简洁 ,表达能力强, 函数种类多 ,程序控制结构灵活 ;是进行 AutoCAD 二次开发的理想工具。 运用Auto LISP语言进行CASS高程的批量修改简单,快捷,不仅使得工作效率提高,而且可以更好的了解该语言,对AutoCAD的二次开发功能能够更好的利用。二、利用现状 1、 AutoCAD及Auto LISP语言在规划建筑红线放线测量中的应用(李玉洁 2012) 在CAD软件上对建筑进行方向,距离的几何定位后,需要为外业的放线工作提供几何(坐标)资料,以及为施工建设单位提供桩位图。利用CAD可以对放线点逐一查询坐标值,进行标记,抄录。但这种方法需要耗费大量的精力与时间去做重复的工作,且容易出错。而利用Auto LISP语言编程则可以解决这些问题,可以利用程序绘制坐标点,进行放样点位标注,方便,简洁。很大程度上提高作业效率。设计思路: (1)放样点标记,标记相应的点号,放在点号层,用模板指定的颜色标记; (2)将放样点坐标用线条引出,标记在选取点附近,将线条与坐标文字放在坐标层,使用指定颜色; (3)为配合坐标放样,将所有选取的点位以点号的格式形成一个坐标文件,设置文件名,与图形文件放在同一目录下,方便查询管理。 2、如何在AutoCAD环境下利用Auto LISP语言建立符号库 (孔令壮 邓玉柳 2013) 目前,南方CASS软件都附带了标准的地籍图符号库,符号库的应用不仅可以减轻工作量,而且在很大程度上提高了工作效率,成为业内制图必不可少的工具。但符号库只罗列了常用符号,一些地域性,专业性强的符号只能手工绘制。本文介绍如何在AutoCAD环境下利用Auto LISP语言建立符号库。设计原则:依据国家测绘总局和总参谋部测绘局颁布的地形图图式保证附后一体,属性关联,应用方便,切实提高工作效率。设计思路:(1)设计符号库(点,线,面状符号); (2)建立图式符号库,赋予代码,便于调用。不仅于此,Auto LISP在绘图中的应用在很多领域都发挥了极大作用,例如建筑,公路,铁路,煤矿开采等等。三、可行性研究及成果预计 在CAD中利用Auto LISP语言进行二次开发已经有很多成功的例子,在批量操作上也有很多实例值得借鉴,例如: 批量修改多义线宽如在需大量修改多义线宽的图形中 ,用 petit 命令 ,一根一根地改线宽非常慢, 笔者用 Auto LISP 语言编一个函数程序, 完成一次性选定修改. 程序如下:( defun C : wpline( ); 统一修改线宽( setq s( ssget) w( getreal “w idth : ”) )( setq n( sslength s) n(- n 1) )( while(= n 0); 循环( setq n1( ssname s) ); 取当前目标名称( if( k ( cdr( assoc 0( entget n1) ) )“polyline”)( command “pedit”( cdr( assoc -1( entget n1) ) )“w”“w”“ x”) )( setq n(- n 1) ); 目标个数减“1”) )所以对于利用Auto LISP语言批量修改CASS高程完全是可行的。利用Auto LISP语言编程修改高程,首先得了解该语言,Auto LISP 之所以能功能如此强大,都有赖功能函数,其成员共约200个: 1、一般性函数170个 2、ADS 定义特殊函数9个 3、配合 DCL 交谈框设计函数 22个 那么掌握这些函数,了解语法则是必不可少的。因为是内置语言,所以在CAD上加载该语言是很方便的,对于本课题,要达到修改高程注记,合理分配位置的效果。 对于本次设计,要达到的成果不仅仅是对高程点的批量修改操作,还应达到根据注记值来修改高程点的效果,这样,这次设计才能算完成。四、课题研究的主要方法、策略和步骤设计主要思路:(1) 确定需要达到的效果,功能;(2) 确定编程的进行思路;(3) 选择编程需要的代码语句;(4) 将程序功能分解,分步完成各个功能,最后进行整合;(5) 对程序进行改进,完善。主要方法:(1) 查找相关资料,整理资料;(2) 依据设计要求和指导老师的提示选择合适的代码语句进行构建;(3) 将整个程序分解后一个一个进行制作修改,在编译器上做调试;(4) 最主要的是了解Auto LISP语言的语法结构及代码五、参考文献1 唐争气, 胡润希. 基于Auto Lisp的局部高程点批量检查与修改技术J. 电脑编程技巧与维护, 2013(2):76-77.2 龚子桢, 花向红, 尹相宝,等. 基于Auto LISP的高程点批量修改算法设计与实现J. 测绘通报, 2011(4):41-43.3 郭秀娟, 范晓鸥. 基于Auto LISP的AutoCAD二次开发研究J. 吉林建筑工程学院学报, 2008, 25(4):82-84.4 张广伟. Excel、Word与CASS(AutoCAD)在测量绘图中的应用J. 北京测绘, 2006(2):8-12.5 祁宇明, 曹巨江, 高文华. 基于Autolisp的二次开发参数化设计J. 陕西科技大学学报:自然科学版, 2006, 24(1):76-79.6 高红岩. 南方CASS7.0软件中关于批量修改高程注记的几种方法J. 环球人文地理, 2015(4)7 Autolisp基础教程EB/OL六、指导教师意见指导教师签字:年 月 日大同大学本科毕业论文(设计)中期检查记录表(指导教师、学生用表)学院: 专业(专业方向): 毕业年度:论文(设计)题目:利用Auto LISP语言批量修改CASS下高程点高程学生姓名学号指导教师职称学位综述学生在论文(设计)完成过程中的研究态度、与指导教师分时段的联系情况及对存在问题的解决情况。学生签字: 指导教师签字:年 月 日 年 月 日山西大同大学2016届本科毕业论文(设计)指导教师评分表(指导教师用表)学院: 专业(专业方向): 毕业年度:论文(设计)题目:利用Auto LISP语言批量修改CASS下高程点高程学生姓名学号指导教师职称学位指导教师评语:指导教师签字: 年 月 日评 价 项 目ABCDE写作过程01写作过程中的认真程度02写作过程中,进度掌握情况选题质量03选题与专业培养目标相符情况04选题体现专业特点情况05选题体现三基的要求情况论文质量06知识综合运用能力07结构、方案设计、应用价值08写作规范情况指导教师评定成绩 优秀 良好 中等 及格 不及格毕业论文(设计)分工情况:(多人合作时填写,包括本人研究的内容及其在课题中所占比例)评定成绩参考:优秀为7项A,另一项为B;良好为6项B或A,其它至少为B;中等为5项B或A,其它至少为C;及格为4项B或A,其它至少为D;不及格为4项为E。山西大同大学2016届本科毕业论文(设计)评阅人评分表(评阅人用表)学院: 煤炭工程学院 专业(专业方向):测绘工程 毕业年度:2016论文(设计)题目:利用Auto LISP语言批量修改CASS下高程点高程学生姓名学 号指导教师职 称评 阅 人职 称评阅人评鉴评审项目指 标ABCDE选题质量01选题与专业培养目标相符情况02选题体现专业特点情况能力水平03综合运用知识能力04运用资料文献能力05研究方案设计能力论文水平06论点论据、语言表达07整体结构、应用价值08写作规范情况评阅人评定成绩优秀 良好 中等 及格 不及格评定成绩参考:优秀为7项A,另一项为B;良好为6项B或A,其它至少为B;中等为5项B或A,其它至少为C;及格为4项B或A,其它至少为D;不及格为4项为E。山西大同大学2016届本科毕业生论文(设计)答辩记录表(答辩组用表)学院: 专业(专业方向): 姓名: 学号:论文题目利用Auto LISP语言批量修改CASS下高程点高程答辩委员会主任(或组长)职称答辩委员会秘 书答辩委员会成 员答辩记录(包含答辩委员提出的问题,学生回答情况等)记录人签字: 答辩委员会主任(答辩小组组长)(签字):年 月 日 年 月 日山西大同大学2016届本科毕业论文(设计)答辩评分表(答辩组用表)学院: 专业(专业方向): 毕业年度: 论文(设计)题目:利用Auto LISP语言批量修改CASS下高程点高程学生姓名 学 号 指导教师评分指导教师 职 称 评阅人评分答辩委员会/答辩小组名单姓 名性 别职 称学 位答辩小组职务 男 男 女 答辩委员会(答辩小组)评鉴评审项目指标ABCDE论文评价01选题与专业培养目标相符情况02选题体现专业特点情况03综合运用知识能力04运用资料文献能力05研究方案设计能力06论点论据、语言表达07整体结构、应用价值08写作规范情况答辩表现09自述情况10答辩过程答辩委员会(答辩小组) 评定成绩优秀 良好 中等 及格 不及格毕业论文(设计)最终得分答辩委员会主任(答辩小组组长)签字: 年 月 日评定成绩参考:优秀为9项A,另一项为B;良好为8项B或A,其它至少为B;中等为7项B或A,其它至少为C;及格为6项B或A,其它至少为D;不及格为5项为E。摘 要CASS软件是基于CAD平台开发的一套集地形、地籍、空间数据建库、工程应用、土石方算量等功能为一体的软件系统。本次设计所用到的Auto LISP语言工具是在CAD平台上加载运行的,所以批量修改CASS下高程数据就要涉及到AutoCAD的二次开发。针对AutoCAD的二次开发,Auto LISP语言一直是一个强有力的工具。利用Auto LISP语言编写的一些小程序可以与Auto CAD很好的结合起来,从而有效的提高Auto CAD的图形处理功能。本文针对 CASS下地形图高程数据存在的一些高程缺陷、注记与高程点Z值不符、显示或范围内批量修改问题,设计了多边形内匹配高程点和注记以及角度匹配高程点与注记且批量修改 CASS 地图形中高程值局部错误的算法, 利用Auto LISP语言编写该算法,并在AutoCAD中实现该算法以解决CASS下导入高程点错误的情况。关键词: CASS;Auto LISP;批量修改;AutoCAD二次开发;匹配ABSTRACTCASS software is based on CAD platform for the development of a set of terrain, cadastral spatial database building, engineering applications, count the amount of earthwork and other functions into one software system. The Auto LISP language design tool used is loaded on CAD platforms, so the bulk edits under CASS elevation data would relate to AutoCAD secondary development.For the secondary development of AutoCAD, Auto LISP language has always been a powerful tool. Use Auto LISP language written small programs with Auto CAD can be a good combination, so as to effectively improve Auto CAD graphics capabilities. In this paper topographic map elevation data exists under CASS some elevation flaws, note discrepancies credited with elevation point Z value, display or bulk modifications within the scope of the problem, design a polygon matching elevation points, and annotation and angle to match the elevation point annotation and bulk editing CASS value of the local ground elevation drawing the wrong algorithm, using Auto LISP language of the algorithm, and implementation of the algorithm in AutoCAD to solve the case of CASS import elevation points wrong.Keywords: CASS; autolisp; bulk edits;autocad secondary development; match目 录1 绪论12 CASS软件及AutoCAD的二次开发介绍22.1 CASS软件简介22.2 AutoCAD二次开发22.2.1 二次开发的目的22.2.2 二次开发的工具32.2.3 二次开发的主要内容33 Auto LISP语言概述53.1 Auto LISP语言简介53.2 Auto LISP语言的特点53.3 本次设计的主要Auto LISP函数介绍63.3.1 表处理函数73.3.2 判断函数83.3.3 选择集创建103.3.4 AutoCAD函数113.4 Auto LISP语言的使用案例123.4.1 直线画圆123.4.2 修改圆半径134 程序算法及程序的编写154.1 文字注记的批量操作154.1.1 修改注记的算法154.1.2 修改注记的程序实现164.2 高程点Z值的修改184.2.1 高程点Z值的修改算法184.2.2 修改高程点Z值的程序实现194.3 范围内高程点与注记匹配214.3.1 角度匹配214.3.2 距离自动匹配与人工干预进行匹配224.4 颜色转变244.5 程序演示及讲解274.5.1 对高程点与注记进行角度匹配的批量修改274.5.2 对高程点与注记进行距离匹配的批量修改295 结论与展望34参考文献35致谢36山西大同大学煤炭工程学院2016届本科生毕业设计1 绪论高程是地形图的地形要素之一,是图形的立体表述,由高程点及高程注记组成。在基于CASS导入的数字化地形图中,高程点一般是由具有三维坐标的图块表示,X、Y值表示高程点的平面位置,Z值表示高程点高程数值。高程注记是高程Z值的图面表述,不仅应标注在高程点附近,而且还应该与高程点Z值相等。地形图用于制图时,一般使用注记表达相应点高程即可,而当利用数字地形图进行三维立体展示、土石方计算、建立高程模型等工作时,就需要利用高程点的高程值来实现。但在实际工作中,经常会发生高程点高程值和高程注记不一致的情况。在CASS中可以通过高程点修改命令对高程点Z值进行修改,但局限性太高,只能做到单个点修改或者对整个图面高程加减一个定值,无法做到局部或者指定一些点来进行修改,也不能完成对图面高程点Z值的正确性进行检验。这时,基于这些问题的出现及实际工作中的要求,寻找合适简便的解决方法便势在必行。AutoCAD开放的结构为不同的使用者留出了非常广的发挥空间,提供了多种二次开发工具,Auto LISP是其中应用最多功能也最强的一个。本次设计也是利用Auto LISP语言来对此进行程序编辑,更好的理解和使用该语言能帮助我们更加方便快捷的进行绘图。 2 CASS软件及AutoCAD的二次开发介绍2.1 CASS软件简介CASS软件是广州南方测绘仪器有限公司开发的一款在CAD平台上运行的集地形、地籍、绘图处理、建立空间数据库、工程应用及计算土石方等功能于一体的软件系统。CASS软件是广大测绘人熟悉的软件,无论是做平面还是三维图形,CASS内部的许多绘图功能使得成图方式变得更为容易。具体的功能由于太多,不能一一叙述,在此,就讲述一下CASS软件与本次设计的关系。对高程点进行修改,首先要做的是导入高程点数据,将全站仪或RTK获得的坐标数据导出到文件,按CASS展点要求修改数据的排列方式后即可将数据在CASS中呈现出来,呈现的点便是我的设计对象,可以说CASS软件是一个数据导入平台,虽然操作平台是在AutoCAD上,但最终的结果还是要回归到CASS上进行应用。同时,CASS软件与AutoCAD软件之间可以进行自由转换更是方便我们进行图形处理。2.2 AutoCAD二次开发2.2.1 二次开发的目的 AutoCAD是目前在Windows和MAC系统中应用最为广泛、使用人数最多的CAD软件。但它只给我们提供了基础的CAD功能,如果我们想完成具体项目设计,就必须根据数据一笔笔绘制出图形,这样一旦在设计完成之后,要更改局部图形则需要重复原来的全部内容。造成了大量工作量的浪费。 如果使用AutoCAD的开发系统,我们就可以将以上的过程用程序编制出来,在工程设计需要时,利用命令语句调入程序就可以运行这个程序,自动完成绘图过程。显然,这不仅大大提高了设计效率,而且,还可以通过定制来完成某些专业化的模块,甚至大型设计软件。本次设计就是用到了CAD的二次开发功能,将图形修改功能从复杂变为只需一个命令,大大提高了绘图效率。 因此,要提高绘图效率,让图形处理变得简便容易,不做过多的重复性操作,就必不可少要用到AutoCAD的二次开发功能。2.2.2 二次开发的工具 从AutoCAD 2.18开始推出Auto LISP开始到现在,我们所能使用的开发工具主要有:Auto LISP、VisualLISP、VBA、COM外部接口、ObjectARX、ObjectARX.NET等开发方式。下面主要对VisualLISP进行简要介绍,Auto LISP将会在下一章进行介绍: 在AutoCAD R14.01中,Autodesk公司首次提供了一种新的LISP编程工具:Visual LISP,它是一种面向对象的开发环境,是Auto LISP的扩展和延伸。在AutoCAD中,Visual LISP被集成到了AutoCAD环境之中。作为开发工具,Visual LISP提供了一个完整的集成开发环境(IDE),包括编译器、调试器和其他工具,可以实时调试Auto LISP命令。Visual LISP是一种半编译的API。由于它的可编译性所以大大提高了它的运行效率和安全性。同时它又与Auto LISP完全兼容,提供了Auto LISP的所有功能,同时它又能够访问AutoCAD的多文档环境,以及对COM/ActiveX技术的支持和反应器等。2.2.3 二次开发的主要内容(1)编写用户自定义的各种函数,形成若干LISP、ARX、VLX或ADS文件,以及一些DCL文件。(2)建立一个符合用户要求的菜单文件,一般可在AutoCAD原菜单文件内添加用户定义的内容。 (3)在系统的.LSP以及类似文件中加入某些自定义内容以便进行各种初始化操作,如在启动时就装入一些文件等。 (4)通过系统对话框设置某些操作路径。这些操作在程序开发成功后向其它AutoCAD系统上安装应用,特别是需要大批安装时,需要进行很多文件输入、内容增删、子目录创建、文件拷贝、系统设置等繁琐工作,如能令上述工作全部自动进行,使整个二次开发程序在无人干预的情况下嵌入系统,将大大提高工作效率 (5)面向用户对象,让用户能够根据自己的需要来编写相关的程序,进行二次开发。在本章节中,从利用CASS软件导入高程数据进行展点到利用AutoCAD的二次开发功能进行绘图工具编辑,可以发现在本次设计,二者的结合必不可少,缺一不可。3 Auto LISP语言概述3.1 Auto LISP语言简介LISP(List Processing Language)是一种基于计算机的表处理语言,是在人工智能领域广泛应用的程序设计语言。Auto LISP语言是嵌套在AutoCAD内部的一种计算机语言,是AutoCAD开放式体系结构的具体体现,同时也是LISP语言和AutoCAD有机结合的产物。使用Auto LISP语言可直接调用几乎全部的AutoCAD命令。Auto LISP语言既具备一般高级语言的基本结构和功能,又具有一般高级语言所没有的强大图形处理功能,是当今世界CAD软件中被广泛应用的语言之一。美国AutoDesk公司在AutoCAD内部嵌入Auto LISP语言的目的是让用户充分利用AutoCAD进行二次开发,来实现直接增加和修改CAD命令,以扩大图形编辑功能,建立图形库和数据库,并能对当前图形进行直接的访问和修改,开发CAD软件包等。在AutoCAD为用户提供的Auto LISP、VBA等开发工具中,Auto LISP语言是一种简便易学的解释性语言,具有很强的数据表处理功能,是一种开发AutoCAD的重要手段。Auto LISP语言能够利用PDB函数驱动DCL(Dialog Control Language)文件来创建自己的对话框。Auto LISP语言的嵌入,使得仅作为交互式图形编辑软件的AutoCAD软件变成能进行计算机辅助设计、绘图的CAD软件。鉴于LISP语言的灵活多样且便于学习和使用,使得AutoCAD成为功能很强的绘图工具软件。3.2 Auto LISP语言的特点Auto LISP具有以下特点:(1)Auto LISP表达式的形式为前缀式表达式;(2)Auto LISP中的一切成分都是以函数的形式给出的,Auto LISP语言没有语句概念或者其他的语法结构。执行Auto LISP程序就是来执行一些函数,再去调用其他函数;(3)Auto LISP把数据和程序统一起来表达为表结构,即S-表达式,因此可把程序当作数据处理,也可把数据当作程序执行;Auto LISP是在普通LISP语言基础之上,在扩充了许多适用于AutoCAD应用的特殊功能之后而形成的一种计算机语言,是一种只能以解释方式在AutoCAD内部运行的程序设计语言;(4)Auto LISP中的程序运行过程就是对函数求值的过程,是在对函数求值的过程中实现函数的功能;(5)Auto LISP比较典型的程序结构就是递归方式,递归方式的使用,使得程序设计简便易懂。3.3 本次设计的主要Auto LISP函数介绍Auto LISP语言主要用到如下数据类型:表3-1 数据类型与代码数据类型代码整型数(INT)实型数(REAL)符号(SYM)字符串(STR)表(及用户定义的函数)(LIST)文件描述符(FILE)Auto LISP的内部函数(SUBR)AutoCAD的选择集(PICKSET)AutoCAD的实体名(ENAME)函数分页表(PAGETB)在本次设计中,用到很多语句函数,将其中比较重要和比较难掌握的在这里讲解一下。3.3.1 表处理函数(1)(LIST )该函数将任意数目的表达式的值按顺序串联在一起,并返回由他们组成的表。(list a b c) 返回(A B C)(lista(b c)d) 返回(A (B C) D)(list 3.6 9.7) 返回(3.6 9.7)重要应用:给点赋值(setq x 4.5 y 9.0);给x,y赋值(setq pt (list x y)等效于(setq pt (4.5 9.0)返回(4.5 9.0);赋值给pt命令:!pt 显示(4.5 9.0)(2) (ASSOC )关联表又称A一表,它是以点对或子表为元素组成的表,子表中的第一个元素为“关键字”。ASSOC函数搜索,以找到此表中,提取包含的一个元素,并返回该子表,若未找到,则返回NIL。例如:(SETQ L (0 . “CIRCLE”) (8 . “MYLAYER”) (10 5.0 7.0 0.0) (40 . 1.0);给L赋值,一个集合则(ASSOC 0 L) 返回(0 . “CIRCLE”)(ASSOC 40 L) 返回(40 . 1.0)(ASSOC 10 L) 返回(10 5.0 7.0 0.0)例如:(SETQ m (name box)(width 3)(size 4.2)(depth 5.1);命令一个图框则(ASSOC size m) 返回(size 4.2)(ASSOC width m) 返回(width 3)例如:(SETQ A (d . 30)(L . 60)(R . 4);赋值A则(ASSOCR A) 返回(R . 4)(ASSOCH A) 返回NIL(SETQ F (Q W E T 5 6 7)则 (ASSOC E F) ;错误:关联列表错误:(Q W E T 5 6 7)(3) (SUBST )该函数从中搜索,将中的每一个用替换,并返回替换后的表;如果中没找到,则该函数返回没有更改的表。例如:(SETQ sample (a b (c d) b)则(SUBST qq b sample) 返回(A QQ(C D)QQ) (SUBST qq (c d) sample) 返回(A B QQ B) (SUBST (qq rr) z sample) 返回(A B(C D)B) 注意:SUBST函数常常与ASSOC函数一起使用,方便地替换与关联表中的关键字相对应的值。3.3.2 判断函数 (1)“条件判断函数”的格式为:(if 条件判断 表达式1 表达式2)函数用于程序的分支结构。函数中的“条件判断”由关系运算函数和逻辑运算函数组成,根据数学关系进行判断。函数的功能为根据判断结果,在程序流程中形成分支,即如果条件表达式返回判断结果为T(真),则执行“表达式1”;如果判断结果为nil(假),则执行“表达式2”;如果缺少表达式2,则表示不执行表达式1,函数不返回任何值。相当于BASIC语言中的“ifthenelse”或“ifthen”语句。例如:(if ( x 0) (setq a (+ a b) (setq a (- a b)如果关系函数x0满足,返回T,则执行表达式1:a=a+b;如果条件不满足则返回nil,执行表达式2:a=a-b.(if ( dx 0) (setq Azm (+ Azm Pi) (if ( dy 0) (setq Azm (+ Azm Pi Pi)条件判断函数的“分层嵌套结构”。外层的条件表达式的条件dx0如果满足,则执行Azm=Azm+;否则执行内层的条件判断函数,内层的条件表达式的条件dy0如果满足,则执行Azm=Azm+2。(if (and ( x 0) ( y 0) (setq a (+ a c)通过逻辑和函数将两个关系函数组成复合条件:x0且y0,如果条件满足返回T,则执行表达式1:a=a+c;否则返回nil,不执行任何运算。(if (or ( x 0) ( y 0) (setq a (+ a c) (setq a (-a c)通过逻辑或函数将两个关系函数组成复合条件:x0或y0,即只要满足其中一个条件,则返回T,执行表达式1:a=a+c;如果两个条件都不满足,则返回nil,执行表达式2:a=a-c。 (2)“持续函数”的格式为:(prong 表达式 表达式 表达式 )函数的功能为将任意多个表达式组合起来成为一个表达式,在程序的流程控制中需要持续执行,其作用相当于C语言中的一个大括号,在Auto LISP语言中一般配合条件判断函数使用。例如:(if (= x y) (prong (setq a (+ a b) (print a)如果关系函数x=y的条件满足,返回T,则执行由progn函数所组合的两个需持续执行的表达式:赋值a=a+b,并且由屏幕输出a。 (3)“条件循环函数”的格式为:(while 条件表达式 表达式 表达式 )函数用于程序中的循环运算,循环的次数取决于函数中的“条件表达式”,该式返回T,则执行循环体的运算,包含在函数括号内的“表达式”的个数不限。例如:(setq i 0 n 10);给I,n赋值(while (= i 5) (setq i (+ 1 i) (setq n (* n i);在i5时,进入循环(print n);输出n运算结束时,输出函数使屏幕显示n的值为7200。3.3.3 选择集创建“选择集创建函数”的格式为:(ssget 选择方法 点1 点2 点表 过滤表)函数的功能为用各种方法创建选择集,所有参数均为可选参数。其中“选择方法”的代码和内涵如下:C(Crossing)与“点1”、“点2”确定的窗口相交的图形对象被选中;CP(CPolygon) 与“点表”确定的多边形相交的图形对象被选中;F(Fence) 与“点表”确定的折线相交的图形对象被选中;I(Implied) 处于夹取状态的图形对象被选中;L(Last) 最后绘制的图形对象被选中;P(Previous) 上一次创建的选择集被选中;W(Window) 在“点1”、“点2”确定的窗口内的图形对象被选中;WP(WPolygon) 在“点表”确定的多边形内的图形对象被选中。可选参数“过滤表”的作用为根据其描述条件对所选图形对象进行筛选,只保留满足条件的对象。过滤表描述的条件为entget函数返回的图元表的子表。例如:(0 . “circle”) 图元种类为“圆”;(8 . “0”) 图层为“0”层。当在选择集函数中不提供参数时(ssget),表示以交互方式建立选择集。执行此函数后系统自动切换到AutoCAD图形窗口,提示区出现“Select object:”。用户可用各种方法在屏幕选择图元,直至用空回车(不输入任何参数的回车)结束选择。选择集函数最常用的为“窗口”(“W”)选择方法,例如:(setq ssl (ssget “w” (20 50) (30 60) 选中以平面坐标(20,50)和(30,60)为角点的窗口中所包含的图形对象,并将它赋值给变量ssl。3.3.4 AutoCAD函数(1)AutoCAD的所有绘图命令都可以作为Auto LISP的函数,使Auto LISP程序的运算和AutoCAD的绘图功能完全结合起来,使设计、计算和绘图融为一体。“AutoCAD命令函数”的格式为:(command “AutoCAD命令” 命令所需要的参数 “”)在学习Auto LISP之前,一般对于AutoCAD命令屏幕操作的各种菜单、图标快捷键和参数提供的中文提示已应有所掌握。但是对于Auto LISP编程,CAD绘图命令函数中的“AutoCAD命令”均用英文表示,也没有“命令所需要的参数”的提示(按何种次序提供何种参数)。因此,在Auto LISP编程中应用CAD命令函数时,可以先在AutoCAD绘图屏幕用相应的绘图菜单(包括子菜单)或图标快捷键演示一次,可以在屏幕提示区获得英文的AutoCAD命令以及命令所需参数的提供方法和次序。参数中代表各种意义的规定字符串应包括在引号内,代表变量的标识符则不用引号,函数中最后的空引号代表“回车”。由于AutoCAD的各种版本(例如AutoCAD2004,2006,2008)的若干绘图命令中参数的提供存在微小的差别,因此在写Auto LISP程序的绘图函数时应顾及所用AutoCAD的版本。AutoCAD命令函数十分丰富,下面只介绍本次设计中所用到的一些:“建立图层函数”的格式为:(command “layer” “m” “图层名” “” “” “”)函数的功能为建立并设定为当前层。函数中的字符“m”表示建立图层,并设定为当前图层,“图层名”为字符串。例如:(command “layer” “m” “road” “” “” “”);建立命名为road的图层。“全局视图函数”的格式为:(command “zoom” “e”)函数的功能为将模型空间所画的图形对象在屏幕上以最大的视图全部显示。 (2)“输出函数”的功能为向屏幕或指定的的文件输出字符和数值,函数有下列三种格式:(prinl 表达式 文件描述符)(princ 表达式 文件描述符)(print 表达式 文件描述符)函数中的表达式为输出的内容(字符、数值或表达式返回的值),“文件描述符”为可选参数,如果输出至指定的文件则需要文件描述符,在屏幕提示区输出则不需要。以上三种输出格式有较小的差别,对于在屏幕提示区的输出,例如:(setq a 123 b “ABC” c “Happy n New Year”)(prinl a)不换行输出数字123,后面不留空格;(print a)换行后输出数字123,后面加空格;(princ a)不换行输出数字123,后面不留空格。3.4 Auto LISP语言的使用案例3.4.1 直线画圆 直线画圆案例:(defun c:hy()(setvar cmdecho 0) ;指令执行过程不响应(setq en (entsel 选择一条直线:) ;要求碰选一条线(setq en_data (entget (car en) ;取得元体资料串行(setq pts (assoc 10 en_data) ;取得群码10的子串行(setq pt1 (cdr pts) ;取得起点pt1坐标(setq px1 (car pt1) ;取得pt1坐标的x值(setq py1 (cadr pt1) ;取得pt1坐标的y值(setq pta (

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论