2007AutoCAD超超值值奉奉送送AutoLISP入门AutoLISP是在AutoCAD内部允许的一种内嵌式程序设计语言。LISP(ListProcessingLanguage)是人工智能领域中广泛采用的一种表处理语言,具有较强的表处理功能,主要用于人工智能、机器人、专家系统、博弈、定理证明等领域。LISP也被称为符号式语言,因为它处理的对象是符号表达式。AutoLISP可以直接调用几何所有的AutoCAD命令,为AutoCAD提供了使用高级语言开发编程的途径,使得用户能充分利用它对AutoCAD进行二次开发。感谢:感谢您选购本图书。本部分是《AutoCAD2007中文版自学手册——入门提高篇》图书超值赠送的一部分,仅供读者个人参考使用。未经许可,任何人不得将此部分用于其他商业用途。欢迎您对我们的图书进行监督,并对我们的工作(图书质量、装帧设计、封面、印刷等)提出改进意见或建议。网站:@gmail.comQQ群:9843746(CAD/CAM/CAE应用方向)您的支持是我们前进的动力,您的需要是我们努力的方向!冯如设计在线2006-10-091utoCAD2007中文版绘图自学手册——超值奉送部分A.1AutoLISP基本函数自从AutoCADRA.01开始,出现了VisualLISP语言,它是Autodesk公司为增强AutoLISP程序开发能力而设计的软件工具,为AutoLISP增加了许多新的函数。VisualLISP的集成开发环境提供很多特性,使用户创建和修改源代码、测试和调试程序更加方便。自从AutoLISP嵌入AutoCAD之后,使仅仅作为交互式图形编辑软件的AutoCAD,通过编程使之能真正进行计算机辅助设计、绘图。由于LISP灵活多变、易于学习和使用,因而使AutoCAD成为功能很强大的工具性软件。随着AutoCAD版本的升级,AutoLISP的功能不断得到扩充和增强,主要功能如下:z能够把数据和程序统一表达为表结构,即S-表达式,因此可以把程序当作数据来处理,以可以把数据当作程序来执行;z有图形处理和程控方面的函数,可以直接调用AutoCAD的所有命令;z扩充了AutoCAD应用的特殊功能;z主要控制结构采用递归方式,使得程序设计简单易懂。A.1.1赋值函数AutoLISP提供了大量系统预定义的函数。函数的一般描述格式为:(函数名变元[变元……])表中第一个元素为函数名,它一般指明函数的功能。其余各元素为函数的变量(称为变元)。[]表示任选项;……表示任意多项;表示变元类型。函数调用后显示一个执行该函数的结果,称为返回值。下面是AutoLISP的基本函数。1.(setq符号表达式[符号表达式]……)将一个或者多个符号设置为相应表达式的值,返回昀后一个表达式的值,例如:(setqa123b6.0);符号a返回6.0(setqs“it”x‘(ab));符号s被赋值为”it”,符号x被赋值为(ab),返回(ab)2.(set‘符号表达式)如果符号前有一个单引号,该函数则将符号设置为表达式的值,此用法与setq函数的用法等价,例如:(set‘a18.0);符号a被赋为18.0,返回18.0Set和setq函数都需要将符号作为它的第一个参数。但是set函数接受返回结果为符号的表达式作为参数,setq却不可以。3.(eval表达式)返回对表达式求值的结果,例如:(setqa24b45);返回452(eval10.5);返回10.5(setqc(+123));(evalc);返回6A.1.2数值计算函数这类函数有一个共同特点:参数既可以是整数,也可以是实数,如果所有的数都是整数,返回的结果就是整数;如果有的是实数,返回的结果也就是实数。1.(+[数数]……)返回所有数之和。如果只有一个数,则返回它本身;如果不提供数,则返回0。例如:(+234);返回92.(-[数数]……)返回第一个数减去其它所有数之和的差。如果只提供一个数,则返回它本身。如果不提供数,则返回0。例如:(-5030.05.5);返回A.52007AutoCAD3.(*[数数]……)返回所有数的乘积。如果调用本函数只提供一个数,则返回它本身;如果不提供数,则返回0。例如:(*534.0);返回60.04.(/[数数]……)返回第一个数除以其它所有数乘积的商。如果只提供一个数,则返回这个数除以1的结果;如果不提供数,则返回0。例如:(/130132);返回55.(1+数)返回一个数加1后的结果。例如:(1+4);返回56.(1-数)返回一个数减1后的结果。例如:(1-10);返回97.(abs数)返回一个数的绝对值。8.(atan数1[数2])如果只提供数1,则该函数返回数1的反正切值(单位为弧度)。如果提供了数1和数2,则该函数返回数1/数2的反正切值。如果数2为0,则该函数返回正的或负的1.570796弧度,其正3utoCAD2007中文版绘图自学手册——超值奉送部分负取决于数1的正负。该函数返回角度的范围是-PAI/2~PAI/2(弧度)。例如:(atan0.5);返回0.463648弧度(atan2.03.0);返回0.58803弧度9.(COS角度)返回角度的余弦值,角度的单位为弧度。例如:(cos0.2);返回0.98006710.(expnum)返回常数e(2.718282……)的指定幂,参数num为实数。例如:(exp1.0);返回2.71828211.(exptnumberpower)返回以number为底数的power次幂的值。例如:(expt33);返回2712.(fix数)返回将数截去小数部分的结果。例如:(fis4.5);返回4A.(gcd正整数1正整数2)返回两个正整数的昀大公约数。例如:(gcd3020);返回514.(lognum)返回num的自然对数。参数num为正数,返回值是实数。例如:(log4.5);返回1.5040815.(max[数数……])返回给定各数中的昀大者。如果没有提供数,则返回0,例如:(max1359);返回916.(min[数数……])返回给定各数中的昀小者。如果没有提供数,则返回0,例如:(min1359);返回117.(rem[数数])返回第1个数除以第2个数的余数。例如:(rem406);返回418.(sin角度)返回角度(单位为弧度)的正弦值。例如:(sin1.0);返回0.841471419.(sqrt数)返回一个数的平方根。例如:(sqrt9);返回3A.1.3关系函数1.(=[数或者字符串][数或者字符串])在该函数中,判断数字或者字符串的参数是否相等。如果所有的参数都相等,返回T;否则返回nil。如果只提供一个参数,返回T。如:(=5.205.2);返回T(=“HELLO”“hello”);返回nil2.(/=[数或者字符串][数或者字符串])在该函数中,判断数字或者字符串的参数是否不等。如果相邻两个数或者字符串的值不相等,返回T;否则返回nil。如果只提供一个参数,返回T。如:(/=45.26);返回T2007AutoCAD(/=455);返回nil3.([数或者字符串][数或者字符串])在该函数中,判断数字或者字符串的参数是否小于。如果每个参数的值都小于它右边参数的值,返回T;否则返回nil。如果只提供一个参数,返回T。如:(918);返回T(“l”“ly”);返回nil4.([数或者字符串][数或者字符串])在该函数中,判断数字或者字符串的参数是否大于。如果每个参数的值都大于它右边参数的值,返回T;否则返回nil。如果只提供一个参数,返回T。如:(1009901);返回T5.(=[数或者字符串][数或者字符串])在该函数中,判断数字或者字符串的参数是否小于等于。如果每个参数的值都小于或等于它右边参数的值,返回T;否则返回nil。如果只提供一个参数,返回T。如:(=9.019.01010.09);返回T(=“love”“hate”);返回nil6.(=[数或者字符串][数或者字符串])在该函数中,判断数字或者字符串的参数是否大于等于。如果每个参数的值都大于或等于它右边参数的值,返回T;否则返回nil。如果只提供一个参数,返回T。如:(=27189);返回T5utoCAD2007中文版绘图自学手册——超值奉送部分(=6031003825);返回nilA.1.4输入函数Getxxx函数是AutoLISP提供的用户输入函数,每个用户输入该函数时,都暂停下来等待用户输入该函数指定类型的数据值,并且返回输入的数据,在该函数暂停之前,应用程序可以指定一些要显示的任选的提示。1.(getint[msg])以交互方式等待用户输入一个整型数,并将此值赋给“()”前的变量,参数msg为提示信息(下同)。如:(setqn(getint“请输入一个整数:”))注意:用户不能在提示信息中输入另外一个AutoLISP表达式来响应getint函数的请求。下同。2.(getreal[msg])以交互方式等待用户输入一个实数(浮点数),并将此值赋给“()”前的变数。如:(setqy(getreal“请输入一个实数:”))3.(getstring[cr][msg])等待用户输入一个字符串,并将此字符串赋给“()”前的参数。参数cr控制空格键是否代替Enter键,如果该参数不为nil,那么输入的字符串可以包括空格,此时只能按Enter键结束输入。字符串昀大长度为132位,如果超出132位,则只返回前132位字符。如:(setqw(getstringy“doyouloveme?”))doyouloveme?Yeah!"Yeah!"4.(getpoint[pt][msg])等待用户输入一个点,并将此点赋给“()”前的变数。用户可以使用光标来拾取点,也可以在命令行以坐标形式输入。参数pt是以现行UCS表示第一个2D或3D基点的坐标值(下同)。如:(setqx(getpoint“第一点:”))1,2(2.03.56.9)5.(getdist[pt][msg])以交互方式等待用户输入一段距离。用户可以输入一个数值,也可以输入两个点来指定距离。该函数要求有一个基于现行UCS的基点变量,当用户在屏幕上移动十字光标时,它会从这个基点开始绘制一个矩形。如:6(setqlen(getdist“输入长度:”))6.(getangle[pt][msg])等待用户输入一个方位角,并将此角度值以弧度方式赋给“()”前的变量。该函数以逆时针方向测量由用户指定的方位角或两点所确定的直线与X轴的夹角。了解输入的角度和getangle函数所返回的角度之间的区别,是非常重要的。传送给该函数的角度,是基于AutoCAD的系统变量ANGDIR和ANGBASE的现行设置而确定的。然后,一旦输入了一个角度,则它就以ANGBASE的现行设置为0弧度逆时针方向来测量(忽略ANGDIR的设置)。如:(setqang(getangle“拾取点:”))A.2数据类型数据类型是说明程序可以运算和处理的数据范围。AutoCAD支持以下几种数据类型。z整型数:不含分数且小数点后的值必需是零的正整数或者负整数。通常使用0或1来表示某些系统变量的当前状态,通过设置0和1的值可以对这些变量加以控制。整形数值AutoLISP中以16位传输,取值范围为-32768~+32767,其中符号“+”可以任选。2007AutoCADz实型数:实型变量所使用的是一个含有分数且小数点后的值不为零点正数或者负数,整型数可以包含着实数内。对于小于1的实型数,小数点前必须用0作为开始。实型数可以用科学计数法表示;如用9.01E+02表示901。z字符串:字符串是指用双撇号括起来的一串字符序列。AutoLISP用它来做提示信息、命令选择项、调用命令名和尺寸文字等。字符串中的字符个数为字符串长度。“”为空串,其长度为零,可以表示回车。“”是一个空格字符,长度为1。字符串常数的昀