AutoCAD高级培训第五讲之一

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

重要通知每人需准备一份身份证复印件和20元考试费,今晚上机时统一收缴。建议每个班由一人收齐(登记名单),集中上交。请相互转告!AutoCAD高级培训第五讲之一——AutoCAD二次开发(AutoLISP语言编程概述)二次开发:采用编程的方法扩充AutoCAD的功能,如增加新的绘图命令、新的修改命令等。例如,AutoCAD中本来没有绘制正弦曲线(函数形式为Y=Asin(X+))命令,通过编程开发一个AutoCAD的新命令,使用户可以使用该命令实现绘制正弦曲线,在命令的交互过程中,系统提示用户依次输入所需要的参数:坐标原点、振幅、周期数、初相角等。常用二次开发工具:AutoLISP语言(运行于VisualLISP集成开发环境)、ActiveX、VBA、JAVA、C、ObjectARX等需要掌握:AutoLISP语言(高级证书所必需)一、AutoLISP语言简介1.LISP——ListProcessingLanguage2.AutoLISP:嵌套于AutoCAD内部,将LISP与AutoCAD有机结合,是AutoCAD开发的重要工具。3.AutoLISP的功能:可直接调用AutoCAD的几乎全部命令具备一般高级语言的结构和功能:顺序、条件分支、循环等结构;I/O、数值计算、逻辑判断、数据类型转换等功能具备一般高级语言所没有的强大的图形处理功能4.AutoLISP的特点仅能以解释方式运行于AutoCAD内部(解释性程序设计语言)程序的全部内容均以函数形式给出,没有语句的概念,也没有其他语法结构,执行程序就是执行一系列的函数调用,也称“函数语言”把数据和程序统一表达为表结构,程序即数据,数据即程序,故也称为“表语言”运行程序就是对函数求值的过程,在此过程中实现函数的功能例如,下面的内容就是一个完整的AutoLISP程序:(defunmath()(setqx10)(setqy20)(+xy)(*xy))该程序运行的结果是:200二、AutoLISP的数据类型整型数实型数符号(SYM)字符串(STR)表(LIST)文件描述符(FILE)AutoLISP的内部函数(SUBR)AutoCAD的选择集(PICKSET)AutoCAD的实体名(ENAME)函数分页表(PAGETB)基本应用:涉及用蓝色显示的6种,前4种称为“原子”。1.原子(原子就是“表”中的元素,常作函数的参数)(1)整数(2)实型数(3)符号(常用来作变量名)(4)字符串:在一对双引号“”内的一组字符2.表表有如下几项特征:(1)放在一对圆括号内(2)其中的元素可以是:数字、符号、字符串、表(3)元素之间有空格(4)可任意嵌套,如(15(ab)cd)(5)元素在表中按先后顺序取得序号,依次为0,1,2,……(6)表的大小即表的长度,没有元素的称为空表,用()或nil表示(7)有两种类型:标准表、引用表标准表——实现函数调用的表,第一个元素是函数,后面的元素是函数的参数;引用表——被当作数据引用的表,如表示点的坐标(x,y)的表三、AutoLISP的程序结构有一个或一系列按顺序排列的标准表组成,如:(setqx25.0)(setq函数,见辅导材料P34)(setqy12.2)(+(*xy)x)AutoLISP程序书写格式的特点:1.AutoLISP程序全部由函数组成,函数的形式是表,表的括号需左右匹配;2.AutoLISP程序阅读函数时按从左到右的规则;3.函数必须是第一个元素,函数与参数、参数与参数之间均至少要一个空格分开;4.两个表之间和表内的多余空格和回车是不产生作用的,因此一个表可占多行,一行也可以写多个表。如前述程序可写为:(setqx25.0)(setqy12.2)(+(*xy)x)5.用“;”开始的内容作为对程序的注释;6.文件类型为“.LSP”,是ASCⅡ码的文本文件。AutoLISP程序就是对AutoLISP函数的调用,AutoLISP函数分为系统内部函数和用户定义的外部函数,AutoLISP对函数的调用是通过标准表来实现的,程序的执行就是对标准表依次进行求值的过程,在求值的过程中实现相应的功能。四、AutoLISP程序的执行过程1.加载AutoLISP文件一个简单的弹出对话框的例子(设文件名为test.lsp):(defunc:testlisp()(defun函数,见辅导材料P43、p44)(alert“Hello,TheWorld!”))(alert为错误处理函数,其作用是在屏幕上显示一个警告框,警告框中的内容是它后面的字符串)加载AutoLISP文件有以下几种方法:a)命令行加载(键盘命令方式)命令:(load“路径\\文件名”)b)对话框方式工具——AutoLISP——加载应用程序——选择AutoLISP文件——点击加载c)自动加载方式(略)2.运行AutoLISP程序(1)若为函数,则在“命令:”提示符下输入“(函数名)”并回车。(2)若为命令,则在“命令:”提示符下输入“命令名”并回车。五、两个AutoLISP例程1.绘制圆的渐开线X=r(cos+sin)Y=r(sin-cos)r——基圆半径;程序代码(involute.lsp)(defunc:inv(/p0phiphimaxphimin);参见辅导材料P43-44(setqp0(getpoint\n请输入基圆的圆心:));参见辅导材料P34和P46(setqr(getdistp0\n请输入基圆的半径:));参见辅导材料P46(commandcirclep0r);参见辅导材料P49(setqphimin(getreal\n输入渐开线的起始角度(弧度):));参见辅导材料P45(setqphimax(getreal\n输入渐开线的终止角度(弧度):))(setqdphi(getreal\n输入角度增量(弧度):))(setqn(/(-phimaxphimin)dphi));参见辅导材料P34(setqdphi(/(-phimaxphimin)n))(setqx0(carp0)y0(cadrp0));表处理函数(setqphiphimin)(setqx1(+x0(*r(+(cosphi)(*phi(sinphi))))))(setqy1(+y0(*r(-(sinphi)(*phi(cosphi))))))(while(=phiphimax);见辅导材料P41(setqphi(+phidphi))(setqx2(+x0(*r(+(cosphi)(*phi(sinphi))))));见辅导材料P36(setqy2(+y0(*r(-(sinphi)(*phi(cosphi))))))(setqp1(listx1y1));表处理函数(setqp2(listx2y2))(commandplinep1p2)(setqx1x2y1y2)))[本例中相关的表处理函数]:(1)car函数格式:(car表)作用:取表中第一个元素。(2)cdr函数格式:(cdr表)作用:取子表,得到表中除第一个元素以外的所有元素组成的新表。(3)由car和cdr组合而成的函数格式:(cadr表)、(caddr表)、(cdadar表)等作用:分别等价于(car(cdr表))、(car(cdr(cdr表)))、(cdr(car(cdr(car表))))。这种组合最多可达四级,即最多为六个字符,AutoLISP执行这种组合函数时先从后面做起。(4)list函数格式:(list表达式...)作用:将所有表达式的值建立成一个表。该函数的变量个数不限。2.绘制太极图案程序源代码:(defunyinyang(/originradiusi-radiushalf-rorigin-xorigin-yos);参见辅导材料P43-44(setqos(getvarOSMODE));参见辅导材料P51(setvarOSMODE0);参见辅导材料P51(setqorigin(getpoint\nOriginofinynsign:))(setqradius(getdist\nRadiusofinynsign:origin))(setqi-radius(getdist\nRadiusofinternalcircle:origin))(if(i-radiusradius)(setqi-radius(/radius4)));参见辅导材料P41(setqhalf-r(/radius2))(setqorigin-x(carorigin))(setqorigin-y(cadrorigin))(commandCIRCLEoriginradius)(commandARCC(listorigin-x(+origin-yhalf-r))(listorigin-x(+origin-yradius))origin)(commandARCC(listorigin-x(-origin-yhalf-r))(listorigin-x(-origin-yradius))origin)(commandCIRCLE(listorigin-x(+origin-yhalf-r))i-radius)(commandCIRCLE(listorigin-x(-origin-yhalf-r))i-radius)(setvarOSMODEos)(princ);参见辅导材料P49)[本例中相关的打印功能函数](1)prinl函数格式:(prinl[表达式][文件描述符])作用:将“表达式”打印在屏幕上或文件中,并返回该表达式。“表达式”可以是任何形式的表达式,不一定必须是字符串。无表达式时,则不做任何打印,仅返回一个空值(NIL)。(2)princ函数格式:(princ[表达式][文件描述符])作用:与prinl函数基本相同。

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功