《CAD二次开发技术课件(一、二).ppt》由会员分享,可在线阅读,更多相关《CAD二次开发技术课件(一、二).ppt(37页珍藏版)》请在三一办公上搜索。
1、河南工业大学机电工程学院,CAD二次开发技术,授课:韩莉莉,本课程要学习的内容,第1章 AutoCAD及其二次开发工具简介第2章 AutoLISP基本函数和绘图功能第3章 AutoLISP分支函数与循环结构第4章 AutoLISP输入输出函数和图形数据库 第5章 AutoLISP对话框设计技术,1.1 AutoCAD简介1.2 AutoCAD二次开发1.3 AutoCAD二次开发工具简介1.4 AutoLISP语言概述,第1章 AutoCAD及其 二次开发工具简介,1.1 AutoCAD简介,AutoCAD是美国Autodesk公司开发的通用CAD软件,1982年首次推出了AutoCAD R1
2、.0版本,经过不断的版本更新,现最新的是AutoCAD2011版本。AutoCAD是目前微机上应用最为广泛的通用交互式计算机辅助绘图与设计软件包。AutoCAD的强大生命力在于它的通用性、多种工业标准和开放的体系结构。用AutoCAD绘图速度更快、精度更高、而且便于个性,它已经在航空航天、造船、建筑、机械、电子、化工、美工、轻纺等很多领域得到了广泛应用,并取得了丰硕的成果和巨大的经济效益。,AutoCAD软件具有如下特点:(1)具有完善的图形绘制功能。(2)有强大的图形编辑功能。(3)可以采用多种方式进行二次开发或用户定制。(4)可以进行多种图形格式的转换,具有较强的数据 交换能力。(5)支持
3、多种硬件设备。(6)支持多种操作平台。(7)具有通用性、易用性,适用于各类用户。,1.1 AutoCAD简介,为了适用于各种产品的设计需求,多数CAD软件的功能都具有很高的通用性。但由于针对性不强,用户需求与CAD系统规模之间的矛盾日益增加,存在设计效率不高的问题。在CAD软件平台上,结合具体的应用需求,总结行业的设计知识和经验,开发面向行业和设计流程的CAD系统,这就是所谓CAD二次开发。AutoCAD的开放体系结构。允许用户采用高级编程语言对其进行扩充和修改。Autodesk公司自AutoCAD v2.18版至AutoCAD 2000的短短十几年间,就相继推出了三代二次开发工具。,1.2
4、AutoCAD二次开发,AutoLISP AutoLISP是1986年随AutoCADv2.18提供的二次开发工具。它是嵌入AutoCAD内部的一种人工智能语言。使用AutoLISP可调用几乎所有的AutoCAD命令。AutoLISP语言最典型的应用之一是实现参数化绘图程序设计,包括尺寸驱动程序和鼠标拖动程序等。另一个典型应用就是驱动AutoCAD提供PDB模块构成DCL文件,创建自己的对话框。AutoLISP适合于有能力的终端用户完成一些自己的开发任务。,1.3 AutoCAD二次开发工具简介,Visual LISP(VLISP)VLISP是AutoLISP的换代产品。与AutoLISP完全
5、兼容,并提供它所有的功能,是新一代的AutoCAD LISP语言。VLISP对语言进行了扩展,可以通过Microsoft ActiveX Automation接口与对象交互。作为开发工具,VLISP提供了一个完整的集成开发环境(IDE),包括编译器、调试器和其他工具,可以提高二次开发的效率。,1.3 AutoCAD二次开发工具简介,VBA VBA是2000版本后具备的功能。它通过AutoCAD ActiveX Automation接口对AutoCAD进行编程控制,是一个引入了对象的设计环境,为用户提供类似Visual Basic语言所拥有的功能,可以执行并存取 AutoCAD环境的所有资源,适
6、合编写中型的数据库类的CAD软件。,1.3 AutoCAD二次开发工具简介,ActiveX Automation是微软公司推出的一个技术标准,其作用是在Windows系统的统一管理下协调不同的应用程序,允许应用程序之间相互控制、相互调用。AutoCAD ActiveX技术提供了一种机制,可使编程者通过编程手段从AutoCAD的内部或外部来操纵AutoCAD。ActiveX是由一系列的对象组成,每一个对象代表了AutoCAD中一个明确的功能,如绘制图形对象、定义块和属性等等。ActiveX所具备的绝大多数AutoCAD功能,均以方法和属性的方式被封装在ActiveX对象中,只要使用某种方式,使A
7、ctiveX对象得以“暴露”,那么就可以使用各种面向对象编程的语言对其中的方法、属性进行引用,从而达到对AutoCAD实现编程的目的。,ARX ObjectARX是AutoDesk公司针对AutoCAD平台上的二次开发而推出的一个开发软件包,它提供了以C+为基础的面向对象的开发环境及应用程序接口,能真正快速的访问AutoCAD图形数据库。ObjectARX应用程序是一个DLL(动态链接库),共享AutoCAD的地址空间,对AutoCAD进行直接函数调用。所以,使用ARX编程的函数的执行速度得以大大提高。ARX 类库采用了标准的C+类库的封装形式,这也大大提高了程序员编程的可靠度和效率。由于是在
8、Windows及VC+编程环境里运行,所以,对开发者的编程能力要求较高。,1.3 AutoCAD二次开发工具简介,LISP(List Processing Language)是一种计算机的表处理语言,是在人工智能学科领域广泛应用的一种程序设计语言。AutoLISP语言是嵌套于AutoCAD内部,将LISP 语言与AutoCAD有机结合的产物。使用AutoLISP可直接调用几乎所有的AutoCAD命令。AutoLISP语言既具备一般高级语言的基本功能,又具有一般高级语言所没有的强大的图形处理功能。是当今世界上CAD软件中被广泛应用的语言之一。AutoLISP程序设计较简单易懂,易于掌握。适合于有
9、能力的终端用户完成一些自己的开发任务。Visual LISP是AutoLISP的换代产品。与AutoLISP完全兼容,并提供它所有的功能,是新一代的AutoCAD LISP语言。VLISP对语言进行了扩展,可以通过Microsoft ActiveX Automation接口与对象交互。,1.4 AutoLISP语言概述,一、AutoLISP的数据类型,整数:(-2147483648到2147483648)实数:(-1.79769310308到1.79769310308)符号:包括除“(”、“)”、“.”、“”、“;”以外的任何打印字符。长度没有限制,大小写等价。字符串:包含在一对双引号内的一组
10、字符 包括任何可以打印的字符。区别大小写。最大长度为100个字符,100以后的字符无效。没有任何字符的字符串为空串:”,1.4 AutoLISP语言概述,常用术语“符号”来指储存静态数据的一个符号名,如内建式函数和自定义函数。常用术语“变量”来指存储程序数据的符号名(只有当前类型没有固定类型,字母开头,不用内部函数名和保留字符,如:、.、;、(、)、pi、pause、T、nil等等)。AutoLISP的变量不需要事先定义。每一个变量都要消耗少量内存,故当变量值不再有用时重复使用变量名或将变量设置成nil是良好的程序设计习惯。其值保持不变的变量称为常量,如:Pi,整数、实数、符号、字符串在Aut
11、oLISP语言中称为原子。原子包括:数字原子、符号原子和串原子。,表:放在一对相匹配的左右括号内的一个或多个元素的集合。元素间用空格分开。有标准表和引用表两种类型。,一、AutoLISP的数据类型,1.4 AutoLISP语言概述,表有标准表和引用表两种类型;AutoLISP程序就是用标准表来表示的;引用表用作数据处理,相当于其它高级语言的数组,提供了保存各种数据的有效方法。引用表中的每一个元素可以是数字、符号、字符串,也可以是表。表可以嵌套。如:(23 1.5 A dfg”程序”(20.0 30.0 0.0)仅有两个元素,并用“.”分开表称为点对。点对常用于构造连接表。,原子和表是AutoL
12、ISP最基本的数据,总称为符号表达式(S-表达式)。,表有标准表和引用表两种类型;AutoLISP程序就是用标准表来表示的;引用表用作数据处理,相当于其它高级语言的数组,提供了保存各种数据的有效方法。引用表中的每一个元素可以是数字、符号、字符串,也可以是表。表可以嵌套。如:(23 1.5 A dfg”程序”(20.0 30.0 0.0)仅有两个元素,并用“.”分开表称为点对。点对常用于构造连接表。,文件描述符:打开文件时的返回值,相当于其它语言的文件号,用于数据的存取。选择集:选择集是一个或多个对象的集合。实体名(图元名):是AutoCAD系统在绘图过程中赋予所绘对象的一个数字标号。确切地说,
13、它是指向一个AutoCAD系统内部数据文件的指针。利用图元名,AutoLISP可以查找到图形对象的数据库记录,并对其进行各种方式的处理。,一、AutoLISP的数据类型,1.4 AutoLISP语言概述,AutoLISP语言中的一切设计成份都是以函数的形式给出的。它没有语句的概念或其它语法结构,执行程序就是执行函数,再调用函数。学习掌握AutoLISP语言,核心就是要掌握它的函数;学习AutoLISP函数要掌握的基本内容:(1)调用格式:即函数名、函数要求的参数个数和类型。(2)功能:即该函数的作用,它对其参数如何进行处理。(3)求值情况:即哪些参数被求值,哪些不被求值。(4)求值结果的返回值
14、类型,二、AutoLISP的函数,1.4 AutoLISP语言概述,这一点很重要,因为大多数函数的返回值都要被其它函数接受,而每个函数所需要参数都有特定的类型。因此只有搞清被调用函数的返回值的类型,才不会因用错函数的参数而导致错误。,AutoLISP程序是由一系列按顺序排列的标准表组成。每个标准表的第一个元素均为系统或用户定义的函数,其后的各元素为该函数的参数。如:,(setq x 25.0)(setq y 25.0)(+(*x y)x),AutoLISP的程序的书写格式:所有括号必须左右匹配;阅读AutoLISP程序时,按从左到右的规则进行;函数必须放在表中的第一个元素位置;一个表可以占多行
15、,一行也可以写多个表;AutoLISP用“;”作注释;AutoLISP是以扩展名为“.lsp”的ASCII码文本文件的形式存储。,三、AutoLISP的程序,(setq x 25.0),(setq x 25.0)(setq y 25.0)(+x y),1.4 AutoLISP语言概述,程序编辑:AutoLISP程序是纯文本文件,可以用任意一种ASCII码文本编辑器(如记事本)来进行编辑。编辑后以扩展名为“.lsp”进行保存。使用Visual LISP编程环境:打开AutoCAD2000及以上版本,点击“工具”菜单下AutoLISP(S)菜单项中的Visual LISP编辑器(V),进入Visu
16、al LISP编程环境,程序运行:将编辑好的程序,加载后,在AutoCAD的命令行Command下输入函数名即可运行。,四、编辑和运行AutoLISP的程序,1.4 AutoLISP语言概述,2.1 AutoLISP的基本函数2.2 AutoLISP绘图功能,第2章 AutoLISP基本函数 和绘图功能,2.1 AutoLISP基本函数,一、数值函数,(1)数值运算函数加:(+)减:()乘:(*)除:(/)注意防止除数为零,如:(/25(/4 9)求最大数:(max)求最小数:(min)求平方根:(sqrt)求幂次方:(expt)求绝对值:(abs),2.1 AutoLISP基本函数,一、数值
17、函数,(2)三角函数正弦函数:(sin)用弧度表示余弦函数:(cos)用弧度表示反正切函数:(atan)若没有提供,atan返回 的反正切值(单位为弧度)返回角度范围为-到;若提供了,则返回/的反正切值(单位为弧度);若为0,则返回值的符号同;其值为1.570796(90)。,2.1 AutoLISP基本函数,一、数值函数,(3)数的类型转换函数取整函数:(fix)截去的小数部分,将转换为整型数。实型化函数:(float)将转换为实型数。,2.1 AutoLISP基本函数,二、符号与函数处理函数,(1)赋值函数:(setq)setq函数返回值是最后一个表达式的赋值结果。AutoLISP程序中作
18、为参数的任何符号都必须先赋值。setq函数的求值结果很重要,常作为其它函数的参数。不使用系统内部函数作为变量查看变量的值,在AutoCAD的Command下可在变量前加”!”;在控制台下直接输入变量,回车。(2)禁止求值函数:(quote)也可简写成:()禁止对表达式求值,返回表达式本身。,2.1 AutoLISP基本函数,二、符号与函数处理函数,(3)定义用户函数的函数:(defun)函数名 就是用户所定义的函数名,它必须是符号原子。形参表 每个参数都是符号原子。由用“/”隔开的形参和局部变量组成。它可以是空表、只有形参、只有局部变量或形参和局部变量都有。表达式 可以是一个或多个,在函数调用
19、时对它们进行求值。利用defun可以为AutoCAD增加命令(defun C:XXX().),2.1 AutoLISP基本函数,二、符号与函数处理函数,(3)定义用户函数的函数:defun函数的调用是对已定义的函数的调用,其调用格式为:(函数名 实参表)实参表中实参的个数与位置,要与函数定义的形参表 中形实参的个数与位置逐一对应。Defun函数的返回值是所定义函数的函数名。执行完defun定义的函数,局部变量将被释放掉。,全局变量可由任何函数访问和修改,或在任一表达式中使用。局部变量仅在定义它的函数求值期间(函数调用期间)有意义。,2.1 AutoLISP基本函数,三、表处理函数,(1)提取表
20、中数据的函数:(car)提取表中第一个元素。(cdr)提取表中除第一个元素以外的所有元素组成表:,(nth)提取表中第n个元素,n=0,1,2,(last)提取表中顶层的最后一个元素。,AutoLISP接受car和cdr的任意组合,如:(cadar)等效于(car(cdr(car)。,2.1 AutoLISP基本函数,三、表处理函数,(2)构造和修改表的函数:(list)构造表:将任意数目的表达式的求值结果串在一起,并返回它们组成的表。(append.)构造表:将所有中的元素串联在一起,构成一个新表。(cons)构造表:将新的第一个元素加入表,返回加入元素后的表;若表为原子,则构造一个点对表。
21、(reverse)构造表:将中的顶层元素倒排,构成一个新表。,2.1 AutoLISP基本函数,三、表处理函数,(3)提取并修改表中数据的函数:(assoc)连接表又称表。它是以点对或子表为元素组成的表。每个点对和子表的第一个元素称为关键字。函数assoc搜索连接表,以找到此表中的关键字,并提取包含关键字的子表,并返回该子表;若未找到关键字,则返回nil。(subst)函数subst 从表搜索旧项,将表中的每一个旧项用新项替换,并返回替换后的表;若未在表中找到旧项,则返回没有更改的表,2.1 AutoLISP基本函数,三、表处理函数,(4)表循环处理函数:(foreach)该函数循环地将表中每
22、一个顶层元素赋给符号原子再对循环体中的每一个表达式求值,并返回最后一次循环时循环体中最后一个表达式的求值结果。(mapcar)该函数依次循环地把表1、表2 表n 的元素赋给函数名所指函数的相应参数,并调用此函数 进行求值,把每次循环的求值结果按求值顺序构成一个表,作为mapcar函数的返回值。,2.1 AutoLISP基本函数,四、字符串处理函数,(1)数串互换函数:(itoa)该函数将整数转换成整数字符串,返回字符串。(atoi)该函数将数字字符串转换成整数,返回整数。(atof)该函数将数字字符串转换成实型数,返回实型数。,2.1 AutoLISP基本函数,四、字符串处理函数,(1)数串互
23、换函数:(rtos)该函数该函数根据 和,将转换成相应的字符串,其中 和都为整数。的值的意义:1 科学计数格式 2 十进制格式 3 工程计数格式 4 建筑计数格式 5 任选的分数单位:保留小数点后几位,2.1 AutoLISP基本函数,四、字符串处理函数,(2)字符串处理函数:(strcat)该函数将 按顺序头尾相连组成一个新的字符串,并返回这个新字符串。(substr)该函数从 中截取一个子字符串并返回,其中和 变量都必须是正整数。(strlen)该函数求中字符的个数(含空格)并返回。,2.2 AutoLISP的绘图功能,一、GET类输入函数,GET类(屏幕)输入函数的通用格式:(getXX
24、X)XXX:int real string point dist angle(getint)从提示行输入一整型数;(getreal)从提示行输入一实型数;(getstring)从提示行输入一字符串;(getpoint)从提示行输入一个点或在屏幕上用鼠 标输一个点(getdist)从提示行输入一个实型或整型值(距 离值)或从 屏幕上输入两点而决定距离。(getangle)从提示行输入一个角度值或基于从屏幕 上选取的点决定角度值。,2.2 AutoLISP的绘图功能,二、Command函数,(1)Command函数的格式(Command.)参数格式取决于所执行的AutoCAD命令及其所需要的数据类
25、型。即command函数中所调用的参数类型、个数、与顺序均要和AutoCAD命令严格对应。AutoCAD的命令、子命令和选择项要用不含空格的字符串表示,大小写均可。数字常量(整数或实型数)可写成数本身也可写成字符串形式 点常量有两种表示方法,一是用表的形式,如(10.0 25.0);二是用字符串中的数据表示如:”10.0,25.0”。command函数调用参数中的空串(“”),等效于在键盘上按一次空格键。command函数调用的参数,如数字、点也可为表达式,但表达式求值结果的数据类型要和AutoCAD命令的要求一致。command函数可以不带任何参数,相当于在键盘上按一次Ctrl+C。,Aut
26、oLISP具有强大的绘图编辑功能,主要是由于它提供了一个系统内部函数Command函数,利用Command函数可以非常方便地调用几乎全部AutoCAD命令,以完成各种工程图形的绘制功能。,2.2 AutoLISP的绘图功能,二、Command函数,(2)Command函数的功能 Command函数的功能是在AutoLISP编程中直接调用AutoCAD命令以编制绘图程序,其求值结果总是返回nil。用一个Command函数可以执行一条或多条AutoCAD命令。一条AutoCAD 命令可由多个command函数完成。command的参数不能用get类函数。在一条AutoCAD 命令由多个comman
27、d函数完成情况下,可在多个command函数调用中插入get类函数。(3)应用Command函数的注意事项 Command函数调用中的参数类型、个数、顺序要和AutoCAD命令严格对应。为防止出错,可先在AutoCAD的命令行输入要执行的命令,确定其输入命令、子命令及数据都准确无误后,再编入程序的Command函数中。Command函数调用中的命令、子命令及选项中不能含有空格。,2.2 AutoLISP的绘图功能,三、图形处理函数,(polar)用于求相对于点一定角度,一定距离的另外一点。方向角从轴正方向逆时针方向计算,单位为弧度。点可以是二维点或三维点,但polar总是返回二维点。(dist
28、ance)返回两点间的3D距离。(angle)返回由两点确定的一条直线与x轴正向的夹角,单位为弧度。,2.2 AutoLISP的绘图功能,三、图形处理函数,(inters)和确定第一条直线,和确定第二条直线,本函数用来求两条直线的交点坐标。若任选项存在且其值为nil,则函数可以求两条直线或其延长线上的交点。目标捕捉函数osnap 用点拾取屏幕图形目标,再根据目标捕捉方式求出该图形目标的特征点,目标捕捉方式:nea 最近点、endp端点、mid中点、cen圆心、int交点,2.2 AutoLISP的绘图功能,四、查询和设置系统状态的函数,(setvar)将AutoCAD系统变量置为给定,并返回这个值。其中变量名必须大写并且用引号括起来。(getvar)用于获得AutoCAD系统变量的值。变量名必须大写并且用引号括起来。,