基于AutoLISP语言的CAD二次开发浅析及功能实现

来源 :城市建设理论研究 | 被引量 : 0次 | 上传用户:wanglt111
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
   摘要:Autocad 是工程建设普遍使用的一种功能强大的绘图软件,而且可以进行用户的二次开发。本文介绍了基于AutoLISP语言的CAD二次开发过程,并例举了部分功能实现的代码和调用过程,以期节约时间,提高CAD绘图效率。
  
   关键词:AutoLISP语言,Autocad二次开发,坐标点提取
  
  
  1.AutoLISP语言
   AutoLISP 语言嵌套于Autocad内部,它是LISP语言与Autocad有机结合的产物,是为二次开发Autocad而专门设计的编程语言。
   AutoLISP采用了和CommonLISP 最相近的语法和习惯约定,它具有CommonLISP 的特性,又针对autoLISP 增加了许多功能。它可以把autoLISP程序和autocad的绘图命令结合起来,使设计和绘图完全融为一体,方便了对屏幕图形的实时修改,参数化设计和交互设计,为在绘图领域应用人工智能提供了方便。AutoLISP语言嵌入autocad之后,Autocad就不再只是交互式的图形绘制软件,而成为了真正能够进行计算机辅助设计绘图的cad软件。
  
  2. AutoLISP语言结构
   AutoLISP 数据类型丰富,包括:整型、实型、字符串、表、文件描述符、Autocad 的图元名、Autocad 的选择集等。AutoLISP 处理的对象是符号表达式,简称表达式。表达式相当于其他编程语言中程序的语句,是由原子或表构成的。原子可以细分为数原子,串原子和符号原子。多数情况下,AutoLISP 表达式以表的形式存在,其格式如下所示:
   (函数名 [参数]……)
   每个表达式以左括号开始,并由函数名及参数组成,左括号后的第一个元素必须是函数名。参数的数量可以是任意多个,也可以是0个,这取决于具体函数,每个参数也可能是表达式。表达式以右括号结束,每一个表达式的返回值都能被外层表达式使用,最后计算的值被返回到调用的表达式。
   AutoLISP变量名称可以由任何可写字符以任意顺序组成,如字母、数字、符号等;但是不可以全部由数字组成,而且不能包含下列字符:小数点“.” 括号 “()” 分号“;”单引号“’”双引号“””。变量的数据类型是变量的重要特征,因为它关系到存放变量的存储空间的大小。大多数计算机语言在为变量赋值前都会对变量进行说明,而AutoLISP 无需对变量做事先的类型说明,变量的数据类型就是变量被赋予的值的数据类型。
   AutoLISP函数包含基本函数和用户输入函数,基本函数主要有:数值函数、字符串处理函数、表处理函数、符号操作函数、函数处理函数、错误处理函数、条件和循环函数和应用程序管理函数等。
  
  3. 图形坐标点的自动提取程序实例
   在实际工程的工作中,经常根据需要在CAD中提取点坐标,这项工作不但工作量变大,而且还容易出现错。本例通过AutoLISP程序来实现坐标点的自动提取,以减轻工作量,减少提点错误。
   程序名称:xzbd(写坐标点)
   功能:将选取的直线各顶点坐标写到外部文件,并在提取点坐标的地方画一个圆,以便查找遗漏。
   程序内容:
  
  
  (defun c:xzbd()‘定义一个命令xzbd(写坐标点)
  (setvar "cmdecho" 0) ‘setvar 函数设定系统变量cmdecho 的值为0以关闭回显
  (setq ffn (getfiled "选取文件" "" "doc" 1)) ‘调用存储提取出坐标點的文档,并将返回值赋给变量ffn。
   (setq ff (open ffn "w"))‘以写的方式打开文件ffn,将坐标点写入文档中,并将返回值赋
   ‘给变量ff。
  (close ff) ‘关闭文件ff
  (princ " 选取直线...") ‘用princ函数提示用户选取直线。
  (setq ss (ssget))‘构造一个空的选择集,并将选择集函数赋值给变量ss。
  (setq i 0) ‘把0赋值给变量i。
  (setvar "pdmode" 33) ‘以所选定的方式显示点对象。
  (repeat (sslength ss)‘确定选择集ss中实体的个数,并重复实体个数次数的计算。
  (setq ssn (ssname ss i))‘返回选择集ss中第i个元素所表示的实体,并赋值给变量ssn。
  (setq endata (entget ssn))‘返回包含实体所定义的一个表,并赋值给变量endata。
  (setq n 0) ‘ 利用setq函数将0赋值给变量n。
  (repeat (length endata)‘并重复endata长度次数的计算。
  (setq pp (nth n endata))‘ 利用nth函数返回表endata中第n个元素,并赋值给变量pp。
  (setq key (car pp))‘利用car函数返回列表pp中第一个元素,并将此值赋值给变量key。
  (if (= key 10)‘判断key的值是否等于10,如果是,则继续执行。
  (progn
  (setq x (cadr pp))‘利用cadr函数,返回表中第二个元素,并赋值给变量x。
  (setq y (caddr pp))‘ 利用caddr函数,返回表中第三个元素,并赋值给变量y。
   (command "point" (list x y))‘ 利用list函数,把x,y,构造成一个表,利用command命令调
   ‘系统命令”point”然后画点。
  (setq ff (open ffn "a")) ‘打开文件ffn,并将它赋值给变量ff。
  (princ x ff)‘ 将x写入文件ff。
  (princ " " ff) ‘将空格写入文件ff。
  (princ y ff)‘将y写入文件ff。
  (princ " " ff)‘ 在文件ff中换行。
  (close ff)‘关闭文件ff。
  )
  )
  (setq n (1+ n))‘利用1+函数,把n+1的值赋值给n。
  )
  (setq ff (open ffn "a")) ‘打开文件ffn,并将此值赋值给ff。
  (princ "End " ff) ‘ 把end写在ff中,并在ff中换行。
  (close ff)‘关闭文件ff。
  (setq i (1+ i)) ‘ 利用1+函数,把1+i的值赋值给变量i。
  )
  (princ (strcat " 文件写至=> " ffn))‘在命令行显示字符串文件写至ffn。
  (prin1)‘ 最后用prinl函数禁止在命令行出现最后表达式返回的数值。
  )
  
  
  
  例,需提取图1所示坐标点,执行结果如图2与图3
  
  
  
  4.程序调用
   在CAD软件中运行编写的代码步骤如下:
  (1) 首先,程序代码保存为文本文件,并把扩展名由.txt改为.lsp。
  (2) 打开autocad软件,在命令行中输入“vLISP”,并回车,在弹出visual LISP 对话框中选择“文件”—“打开文件”,选择xzbd.lsp文件,并打开。
  (3) 选择“工具”—“加载编辑器中的文字”按钮。执行结果如图4所示:
  
  圖4 执行结果
  
  (4) 回到Autocad界面,然后在命令行输入“xzbd”命令,即可调用相关的程序代码
  
  5.总结
   LISP语言跟其它的计算机编程语言一样,也有自己独特的语法与规定。LISP 语言的程序和数据都是以符号表达式的形式来表示的,因此,一个LISP程序可以把另一个LISP程序作为它的数据来处理,这就使得利用LISP语言进行cad 二次开发时,可以嵌套使用LISP程序,这样做不但可以使得编程思路显得很有条理,而且也会给编程的可执行性提供方便,使得编程简单快捷
   LISP 语言语法简单,数据类型丰富,编写程序比较方便,灵活性较高。语法简单使得语言更容易理解,数据类型丰富使得编程面广泛,可以解决很多实际应用问题。LISP 语言的内部数据结构非常适合用表来表示,并且表中还可以嵌套其他的表,这样就使得利用LISP 编写程序得到广泛的应用。利用LISP语言很容易定义和调用用户编写的函数,这使得LISP语言的编程十分灵活。
  注:文章内所有公式及图表请用PDF形式查看。
其他文献
现如今,经济发展迅速,城市作为人类当代生活的主体,其发展与变化日新月异。鉴于卫星遥感技术具有速度快、精度高、范围广的优点,科学家们越来越迫切地希望可以利用遥感技术对我们
研究群体的构成、研究方向与发展目标rn本研究群体是医学分子生物学国家重点实验室的一部分,学术带头人刘德培院士与研究骨干张俊武教授、黄粤博士、董文吉博士是著名分子生
在宽带无线通信技术中,Turbo码的出现是过去20年在信道编码方面最令人激动的事情之一,被看作是信道编码理论发展史上的一个里程碑。它巧妙地将交织器与递归系统卷积码结合起来,
近程非线性目标探测器利用目标的非线性特性,通过接收经目标的非线性作用产生的二次散射波来对目标进行探测和识别。一般人工非线性金属结谐波转换效率较低,只适用于近程探测。
学位
IEEE802.16e提供了QoS保证机制,但是协议对QoS的实现没有作具体的规定,因此对该系统QoS机制中资源调度算法的研究具有一定的理论和实际意义。论文对IEEE802.16e系统下行链路资
摘要:工程建设采用招投标方式是国际通行的做法,我国实行建设工程项目招投标制度已有多年,并取得较大的发展与进步,由于建筑市场机制不健全,受社会环境、经济环境、传统文化等多种因素制约,招投标在实践中还存在一些待解决的问题。本文根据笔者从事招投标工作多年经验针对目前招投标市场存在的问题进行探讨。  关键词:工程建设;招投标;问题;探讨  工程建设采用招投标方式是国际通行的做法,起源于英国,它是商品经济发
期刊
摘要:常规RTK和GPS网络RTK技术进行坐标采集和中桩放样时,单杆倾斜误差对平面位置影响较大,从现代概率统计的角度,对这种随机偶然误差的影响进行较深入的分析总结,得到观测量的最可靠结果。  关键词:RTK流动站单杆倾斜误差概率统计分析总结  Abstract:It is obvious that errors of antenna rod slant affect the plane posit
期刊
摘要:本文针对对传统轧机工艺润滑站磁性链条频繁断裂问题进行客观分析,找出造成链条断裂的各种原因,通过对磁性链条及刮铁装置的改进,成功解决了磁性链条频繁断裂的问题,减少了更换链条的次数,节约了轧钢过程中的成本,并提高了生产效率。  关键词:工艺润滑站;磁性链条;断裂;改進  我公司为浙江协和薄板有限公司制作的1150六辊可逆冷轧机组在使用过程中,发现其中工艺润滑站乳化液磁性过滤器上的磁性链条断裂频繁
期刊
网络的广泛使用以及用户对地理信息系统(Geography Information System,GIS)需求的日益增长促使GIS朝着网络化、智能化的方向发展,于是网络GIS应用而生。网络GIS是以网络为平