第十四章 AutolISP初步 第十四章 AutolISP 14.1关于 AutolIsP AutoLISP是由 Autodesk公司开发的一种LISP程序语言(LISP是 List processor的 缩写)。第一篇关于LISP的参考文献是由 John McCarthy在1960年4月的《ACM通讯》 中发表的 除了 FORTRAN和 COBOL,大多数在六十年代早期开发出来的语言都过时了,可是LISP 却生下来,并且已经成为人工智能(A)的首选程序序言。 AutolISP解释程序位于 Autocad 软件包中,然而 AutoCAD R2.17及更低版本中并不包含 AutolISP解释程序,这样,只有 通过 AutoCAD R2.18及更高版本才可以使用 AutoLISP语言。 AutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如 AutoCaD中没有在图形文本对象内绘制矩形及作全局改变的命令。通过 AutoLISP,你可以 使用 AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序 事实上,可以用 AutoLISP编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取 得更高的效率。 现在,已经有数以百计的第三方软件开发人员使用 AutolISP语言编制各种应用程序 软件包,例如,本文作者开发了一个名为 SMLayout的软件包,用它可以产生各种复杂几 何图形的平面布局图,这些几何图形包括管道的交叉部、过渡都、圆柱、弯管接头、圆锥 以及罐顶。目前社会上非常需要 AutoLISP程序员为应用软件及客户菜单的开发提供顾问 在本章中,我们假定读者已经熟悉了 AutoCAD命令及 AutoCAD的系统变量。但是,在 开始学习 AutoLISP时,却并不需要你是一位 AutoCAD或编程专家。同时,本章还假定读 者并无编程方面的知识。如果你熟悉任何一种编程语言,那么学习 AutolISP就会很容易 对各种函数的评细探讨以及对例题的逐步讲解会使你学起来很有兴趣。本章讨论常用的 AutolISP函数以及它们S程序编制中的应用。对于本章中未涉及的函数,请参阅 Autodesk 公司的《 AutoLISP程序员参考手册》。 AutolISP对硬件没有任何特殊要求。如果系统能够 运行 AutoCaD,那么同样也可以运行 AutolISP. autolISP程序可以使用任何文本编辑器进 行编制 142数学运算 任何编程语言都提供数学函数。在 AutolISP中,同样提供了编程以及数学计算所需 的大部分数学函数,你可以使用 AutolISP对数字进行加、减、乘、除运算,还可以得到 以弧度表示的角度的正弦值、余弦值及反正切值等。使用 AutoLISP还可以进行许多其他 计算。这一节主要讨论 AutolISP程序语言支持的常用数学函数
第十四章 AutoLISP 初步 269 第十四章 AutoLISP 14.1 关于 AutoLISP AutoLISP 是由 Autodesk 公司开发的一种 LISP 程序语言(LISP 是 List Processor 的 缩写)。第一篇关于 LISP 的参考文献是由 John McCarthy 在 1960 年 4 月的《ACM 通讯》 中发表的。 除了 FORTRAN 和 COBOL,大多数在六十年代早期开发出来的语言都过时了,可是 LISP 却生下来,并且已经成为人工智能(AI)的首选程序序言。AutoLISP 解释程序位于 AutoCAD 软件包中,然而 AutoCAD R2.17 及更低版本中并不包含 AutoLISP 解释程序,这样,只有 通过 AutoCAD R2.18 及更高版本才可以使用 AutoLISP 语言。 AutoCAD 软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如, AutoCAD 中没有在图形文本对象内绘制矩形及作全局改变的命令。通过 AutoLISP,你可以 使用 AutoLISP 程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。 事实上,可以用 AutoLISP 编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取 得更高的效率。 现在,已经有数以百计的第三方软件开发人员使用 AutoLISP 语言编制各种应用程序 软件包,例如,本文作者开发了一个名为 SMLayout 的软件包,用它可以产生各种复杂几 何图形的平面布局图,这些几何图形包括管道的交叉部、过渡都、圆柱、弯管接头、圆锥 以及罐顶。目前社会上非常需要 AutoLISP 程序员为应用软件及客户菜单的开发提供顾问。 在本章中,我们假定读者已经熟悉了 AutoCAD 命令及 AutoCAD 的系统变量。但是,在 开始学习 AutoLISP 时,却并不需要你是一位 AutoCAD 或编程专家。同时,本章还假定读 者并无编程方面的知识。如果你熟悉任何一种编程语言,那么学习 AutoLISP 就会很容易。 对各种函数的评细探讨以及对例题的逐步讲解会使你学起来很有兴趣。本章讨论常用的 AutoLISP 函数以及它们S程序编制中的应用。对于本章中未涉及的函数,请参阅 Autodesk 公司的《AutoLISP 程序员参考手册》。AutoLISP 对硬件没有任何特殊要求。如果系统能够 运行 AutoCAD,那么同样也可以运行 AutoLISP。AutoLISP 程序可以使用任何文本编辑器进 行编制。 14.2 数学运算 任何编程语言都提供数学函数。在 AutoLISP 中,同样提供了编程以及数学计算所需 的大部分数学函数,你可以使用 AutoLISP 对数字进行加、减、乘、除运算,还可以得到 以弧度表示的角度的正弦值、余弦值及反正切值等。使用 AutoLISP 还可以进行许多其他 计算。这一节主要讨论 AutoLISP 程序语言支持的常用数学函数
第十四章 AutolISP初步 1加法 格式(+ numl num2num3…) 此函数(+)计算加号(+)右边所有数字的和(+mum1num2num3…)。这些数字可 以是整数或实数。如果均为整数,则和为整数:如果均为实数,则和为实数。但是如果既 有整数又有实数,则和为实数。如下所示,在前两个例子中,所有数字均为整数,所以结 果是整数。在第三个例子中,一个是实数(50.0),故结果为实数。 示例 Command:(+25)返回7 Command:(+230450)返回86 Command:(+230450.0)返回86.0 2.减法 格式(- numI numi2num3…) 此函数(一)从第一个数中减去第二个数(mum1-nun2)。如果多于两个数,就用第 个数字减去其后所有数字的和[mum1-(num2+num3…)]。在下面的第一个例子中,28减去 14后返回14。因为两个数均为整数,结果亦为整数。在第三个例子中20与10.0相加, 并用50减去两数的和(30.0),返回一个实数20.0 示例 Command:(-2814)返回14 Command:(-25711)返回7 Command:(-502010.0)返回20.0 Command:(-2030)返回河0 Command:(-20.030.0)返回-10.0 3乘法 格式(*num1num2num3…) 此函数(★)计算乘号右边所有数字的乘积(num1×num2×num3…)。若均为整数, 它们的乘积亦为整数:若其中含有一个实数,乘积即为实数 示例: Command:(*25)返回10 Command:(*253)返回30 Command:(*2532.0)返回60.0 Command:(*2-5.5)返回-11.0 Command:(*2.0-5.5-2)返回22.0 270
第十四章 AutoLISP 初步 270 1.加法 格式(+ num1 num2 num3…) 此函数(+)计算加号(+)右边所有数字的和(+ num1 num2 num3…)。这些数字可 以是整数或实数。如果均为整数,则和为整数;如果均为实数,则和为实数。但是如果既 有整数又有实数,则和为实数。如下所示,在前两个例子中,所有数字均为整数,所以结 果是整数。在第三个例子中,一个是实数(50.0),故结果为实数。 示例: Command:(+2 5)返回 7 Command:(+2 30 4 50)返回 86 Command:(+2 30 4 50.0)返回 86.0 2. 减法 格式(- num1 num2 num3…) 此函数(-)从第一个数中减去第二个数(num1-num2)。如果多于两个数,就用第一 个数字减去其后所有数字的和[num1-(num2+num3…)]。在下面的第一个例子中,28 减去 14 后返回 14。因为两个数均为整数,结果亦为整数。在第三个例子中 20 与 10.0 相加, 并用 50 减去两数的和(30.0),返回一个实数 20.0。 示例: Command:(- 28 14) 返回 14 Command:(- 25 7 11)返回7 Command:(- 50 20 10.0)返回 20.0 Command:(- 20 30)返回河 0 Command:(- 20.0 30.0)返回-10.0 3.乘法 格式(* num1 num2 num3…) 此函数(*)计算乘号右边所有数字的乘积( num1×num2×num3…)。若均为整数, 它们的乘积亦为整数;若其中含有一个实数,乘积即为实数。 示例: Command:(* 2 5) 返回 10 Command:(* 2 5 3) 返回 30 Command:(* 25 3 2.0) 返回 60.0 Command: (* 2 -5.5) 返回-11.0 Command: (* 2.0 -5.5 -2) 返回 22.0
第十四章 AutolISP初步 4除法 格式(/num1num2num3…) 此函数(/)用第一个数除以第二个数。如果多于两个数,就用第一个数除以其后所 有数的乘积[num1/(mum2×mum3×…)]。在下面的第四个例子中,用200除以5.0与 4的乘积[200/(5.0×4)] 示例: Command:(/30)返回30 Command:(/32)返回1 Command:(3.02)返回1.5 Command:(/200.05.04)返回10.0 Command:(/200-5)返回-40 Command:(/-200-5.0)返回40.0 14.3增量、减量与绝对数字 1增量数字 格式(1+ number) 此函数(1+)使数字与1(整数)相加,返回一个增加1的数。在下面的第二个例子 中,1与-10.5相加返回-9.5 示例: (1+20)返回 (1+-10.5)返回-9.5 2减量数字 格式(1- number) 此函数(1-)从数字中减去1(整数),并返回一个减去1的数。在下面的第二个例子 中-10.5减去1返回-1.5 示例 10)返回9 10.5)返回-11.5
第十四章 AutoLISP 初步 271 4.除法 格式( / num1 num2 num3…) 此函数(/)用第一个数除以第二个数。如果多于两个数,就用第一个数除以其后所 有数的乘积[num1/(num2 × num3 ×…)]。在下面的第四个例子中,用 200 除以 5.0 与 4 的乘积[200/(5.0×4)]。 示例: Command:(/ 30)返回 30 Command:(/ 3 2)返回 1 Command:(/3.0 2) 返回 1.5 Command:(/ 200.0 5.0 4)返回 10.0 Command:(/ 200 -5)返回-40 Command:(/ -200 -5.0)返回 40.0 14.3 增量、减量与绝对数字 1.增量数字 格式(1+ number) 此函数(l+)使数字与 1(整数)相加,返回一个增加 1 的数。在下面的第二个例子 中,1 与-10.5 相加返回-9.5。 示例: (1+ 20)返回 21 (1+ -10.5)返回-9.5 2.减量数字 格式(1- number) 此函数(1-)从数字中减去 1(整数),并返回一个减去 1 的数。在下面的第二个例子 中-10.5 减去 1 返回-11.5。 示例: (1- 10)返回 9 (1- 10.5)返回-11.5
第十四章 AutolISP初步 3绝对数字 格式( abs num) abs函数返回一个数的绝对值。该数可以是整数或者实数。在下面的第二个例子中, 由于-20的绝对值为20,故函数返回20 (abs20)返回20 (abs-20)返回20 (abs-20.5)返回20.5 144三角函数 lsin函数 格式( sin angle) sin函数计算一个角(以弧度表示)的正弦值。在下面的第二个例子中,sin函数 计算Pi(180度)的正弦值并返回0。 Command:(sin0)返回0.0 Command:( sin pi)返回0.0 Command:(sin1.0472)返回0.866027 2cos函数 格式( cos angle) cos函数计算一个角(以弧度表示)的余弦值。在下面的第三个例子中,cos函数 计算Pi(180度)的余弦值并返回-1.0。 示例: Command:(cos0)返回1.0 Command:(cos0.0)返回1.0 Command:( cos Pi)返回-1.0 Command:(cos1.0)返回0.540302 3atan函数 格式( atan num1) atan函数计算数的反正切值,返回角度以弧度表示。下面的第二个atan函数计算
第十四章 AutoLISP 初步 272 3.绝对数字 格式(abs num) abs 函数返回一个数的绝对值。该数可以是整数或者实数。在下面的第二个例子中, 由于-20 的绝对值为 20,故函数返回 20。 (abs 20)返回 20 (abs -20)返回 20 (abs -20.5)返回 20.5 14.4 三角函数 1.sin 函数 格式( sin angle) sin 函数计算一个角(以弧度表示)的正弦值。在下面的第二个例子中,sin 函数 计算 Pi(180 度)的正弦值并返回 0。 示例: Command:(sin 0)返回 0.0 Command:(sin Pi)返回 0.0 Command:(sin 1.0472)返回 0.866027 2.cos 函数 格式(cos angle) cos 函数计算一个角(以弧度表示)的余弦值。在下面的第三个例子中,cos 函数 计算 Pi(180 度)的余弦值并返回-1.0。 示例: Command:(cos 0)返回l.0 Command:(cos 0.0)返回 1.0 Command:(cos Pi)返回-1.0 Command:(cos 1.0)返回 0.540302 3.atan 函数 格式( atan num1) atan 函数计算数的反正切值,返回角度以弧度表示。下面的第二个 atan 函数计算
第十四章 AutolISP初步 1.0的反正切值并返回0.785398(弧度)。 示例 Command:(atan0.5)返回0.463648 Command:(atan1.0)返回0.785398 Command:(atan-1.0)返回-0.785398 4.具有两个参数的atan函数 格式( atan num1num2) 还可以在atan函数中再指定一个数。若指定了第二个数,函数将以弧度形式返回 (num1/num2)的反正切值。在下面的第一个例子中,第一个数(0.5)除以第二个数(1.0), atan函数计算商(0.5/1=0.5)的反正切值 Command:(atan0.51.0)返回0.463648弧度 Command:(atan203.0)返回0.588003弧度 Command:(atan2.0-3.0)返回2.55359弧度 Command:(atan-2.03.00)返回-0.5880033弧度 Command:(atan-2.0-3.0)返回-2.55359弧度 Command:(atan1.00.0)返回1.5708弧度 Command:(atan-0.50.0)返回-1.5708弧度 5 antos函数 格式( antos angle[made[ precision]]) antos函数以字符串格式返回以弧度表示的角度值。字符串格式由made和 recision的设置决定。 示例 Command:( antos0.58800304)返回“33.6901” Command:( antos2.5535904)返回“145.3099” Command:( antos1.570804)返回“90.0000” Command:( antos-1.570802)返回“270.00” 注意在( antos angle [mode [precision])中 angle是以弧度表示的角度值。 mode是与 AutoCaD系统变量 AUNITS相对应的 antos模式 AutoCAD中可用模式如下 ANGTOS模式编辑格式 十进制角度 度/分/秒
第十四章 AutoLISP 初步 273 1.0 的反正切值并返回 0.785398(弧度)。 示例: Command:(atan 0.5)返回 0.463648 Command:(atan 1.0)返回 0.785398 Command:(atan -1.0)返回-0.785398 4.具有两个参数的 atan 函数 格式( atan num1 num2) 还可以在 atan 函数中再指定一个数。若指定了第二个数,函数将以弧度形式返回 (num1/num2)的反正切值。在下面的第一个例子中,第一个数(0.5)除以第二个数(1.0), atan 函数计算商(0.5/1=0.5)的反正切值。 示例: Command:(atan 0.5 1.0)返回 0.463648 弧度 Command:(atan 20 3.0)返回 0.588003 弧度 Command:(atan 2.0 -3.0)返回 2.55359 弧度 Command:(atan -2.0 3.00)返回-0.5880033 弧度 Command:(atan -2.0 -3.0)返回-2.55359 弧度 Command:(atan 1.0 0.0)返回 1.5708 弧度 Command:(atan -0.5 0.0)返回-1.5708 弧度 5.angtos 函数 格式(angtos angle[made[precision]]) angtos 函数以字符串格式返回以弧度表示的角度值。字符串格式由 made 和 precision 的设置决定。 示例: Command:(angtos 0.588003 0 4)返回“33.6901” Command:(angtos 2.55359 0 4)返回“145.3099” Command:(angtos 1.5708 0 4)返回“90.0000” Command:(angtos -1.5708 0 2)返回“270.00” 注意 在(angtos angle[mode[precision]])中: angle 是以弧度表示的角度值。 mode 是与 AutoCAD 系统变量 AUNITS 相对应的 angtos 模式。 AutoCAD 中可用模式如下: ANGTOS模式 编辑格式 0 十进制角度 1 度/分/秒