AutoCAD高级培训第五讲之一.docx
- 文档编号:30227805
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:8
- 大小:17.92KB
AutoCAD高级培训第五讲之一.docx
《AutoCAD高级培训第五讲之一.docx》由会员分享,可在线阅读,更多相关《AutoCAD高级培训第五讲之一.docx(8页珍藏版)》请在冰豆网上搜索。
AutoCAD高级培训第五讲之一
AutoCAD高级培训第五讲之一
——AutoCAD二次开发
(AutoLISP语言编程概述)
二次开发:
采用编程的方法扩充AutoCAD的功能,如增加新的绘图命令、新的修改命令等。
例如,AutoCAD中本来没有绘制正弦曲线(函数形式为Y=Asin(X+))命令,通过编程开发一个AutoCAD的新命令,使用户可以使用该命令实现绘制正弦曲线,在命令的交互过程中,系统提示用户依次输入所需要的参数:
坐标原点、振幅、周期数、初相角等。
常用二次开发工具:
AutoLISP语言(运行于VisualLISP集成开发环境)、ActiveX、VBA、JAVA、C、ObjectARX等
需要掌握:
AutoLISP语言(高级证书所必需)
一、AutoLISP语言简介
1.LISP——ListProcessingLanguage
2.AutoLISP:
嵌套于AutoCAD内部,将LISP与AutoCAD有机结合,是AutoCAD开发的重要工具。
3.AutoLISP的功能:
可直接调用AutoCAD的几乎全部命令
具备一般高级语言的结构和功能
具备一般高级语言所没有的强大的图形处理功能
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
(command"circle"p0r);参见辅导材料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))
(command"pline"p1p2"")
(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(getvar"OSMODE"));参见辅导材料P51
(setvar"OSMODE"0);参见辅导材料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))
(command"CIRCLE"originradius)
(command"ARC"
"C"
(listorigin-x(+origin-yhalf-r))
(listorigin-x(+origin-yradius))
origin
)
(command"ARC"
"C"
(listorigin-x(-origin-yhalf-r))
(listorigin-x(-origin-yradius))
origin
)
(command"CIRCLE"
(listorigin-x(+origin-yhalf-r))
i-radius
)
(command"CIRCLE"
(listorigin-x(-origin-yhalf-r))
i-radius
)
(setvar"OSMODE"os)
(princ);参见辅导材料P49
)
[本例中相关的打印功能函数]
(1)prinl函数
格式:
(prinl[表达式][文件描述符])
作用:
将“表达式”打印在屏幕上或文件中,并返回该表达式。
“表达式”可以是任何形式的表达式,不一定必须是字符串。
无表达式时,则不做任何打印,仅返回一个空值(NIL)。
(2)princ函数
格式:
(princ[表达式][文件描述符])
作用:
与prinl函数基本相同。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AutoCAD 高级 培训 第五 之一