首页 理论教育 AutoLISP函数实例展示

AutoLISP函数实例展示

时间:2023-06-26 理论教育 版权反馈
【摘要】:本节以被平面斜截圆柱管的等分展开计算为例,说明AutoLISP函数的应用和自定义。首先介绍本节要用到的几个AutoLISP函数。这是AutoLISP的基本赋值函数,将一个或多个符号的值设置为相应表达式的值,即可以在对setq函数的一次调用中给多个符号赋值。如果指定了重复的参数或符号名称,AutoLISP使用第一个出现的名称,而忽略其他的名称。则该函数可以像内置的AutoCAD命令一样在AutoCAD命令行、Visual LISP中定义、加载和使用此函数。要将函数用作AutoCAD命令,必须确保它们遵循如下规则。

AutoLISP函数实例展示

本节以被平面斜截圆柱管的等分展开计算为例,说明AutoLISP函数的应用和自定义。首先介绍本节要用到的几个AutoLISP函数。

1.加函数

(+[number number]...)

参数number为数值型,返回所有数的和。

如果在调用本函数时仅提供了一个number参数,本函数会返回它和0相加的结果,即返回该number。如不提供参数,则返回0。

样例:(+12) 返回3

(+1234.5) 返回10.5

(+1234.0) 返回10.0

2.减函数

(-[number number]...)

参数number为数值型,将第一个数减去其他数的和并返回差值。

如果提供的number参数多于两个,则本函数返回从第一个数减去第二个数到最后一个数的和的差。如果仅提供一个number参数,本函数返回0减去它的差,即返回-number。如不提供参数,则返回0。

样例:(-5040) 返回10

(-5040.0) 返回10.0

(-5040.02.5) 返回7.5

(-8) 返回-8

3.乘函数

(∗[number number]...)

参数number为数值型,返回所有数的乘积。

如果调用本函数时仅提供一个number参数,本函数返回它与1相乘的结果,即返回该number。如不提供参数,则返回0。

样例:(∗23) 返回6

(∗23.0) 返回6.0

(∗234.0) 返回24.0

(∗3-4.5) 返回-13.5

(∗3) 返回3

4.除函数

(/[number number]...)

参数number为数值型,将第一个数除以其他数的乘积并返回商。

如果提供的number参数多于两个,本函数用第一个数作为被除数,除以第二个数到最后一个数的乘积,返回最后得到的商。如果仅提供一个number参数,本函数返回它除以1的结果,即返回该number。如不提供参数,则返回0。

样例:(/1002) 返回50

(/1002.0) 返回50.0

(/10020.02) 返回2.5

(/100202) 返回2

(/4) 返回4

5.赋值函数

(setq sym expr[sym expr]...)

参数:sym为符号,不计算该参数;expr为表达式。

这是AutoLISP的基本赋值函数,将一个或多个符号的值设置为相应表达式的值,即可以在对setq函数的一次调用中给多个符号赋值。

样例:

下面的函数调用变量a设为5.0:

(setq a 5.0) 返回5.0

下面的命令设置两个变量b和c:

(setq b 123 c 4.7) 返回最后一个变量的值4.7

下例中将s设为字符串:

(setq s"等分数N:") 返回"等分数N:"

6.定义函数

读者可定义自己的函数。一旦定义了这些函数,即可像使用标准函数一样在AutoCAD命令提示、Visual LISP控制台提示或其他AutoLISP表达式中使用它们。

(defun sym([arguments][/variables...])expr...)

参数sym为函数名;arguments为函数需要的形式参数名;/variables为函数使用的一个或多个局部变量名;expr为执行函数时要执行的任意数目AutoLISP表达式。

局部变量名称前的斜线和第一个局部名称之间,以及该斜线和最后一个参数(如果存在的话)之间,都必须保持至少一个空格的距离。

如果没有声明任何参数或局部符号,则在函数名称后必须使用空括号

如果指定了重复的参数或符号名称,AutoLISP使用第一个出现的名称,而忽略其他的名称。

它返回最后计算的表达式的值。

警告!不要将内置函数或符号作为sym的值。这样会覆盖原有的定义,导致内置函数或符号无法使用。

样例:(defun myfunc(x y)...) 具有两个参数的函数

(defun myfunc(/a b)...) 具有两个局部变量的函数

(defun myfunc(x/temp)...) 一个参数和一个局部变量

(defun myfunc()...) 未指定参数或局部变量

读者也可以用名称格式为C:XXX创建自己的AutoCAD命令,因为命令是一种特殊类型的函数。则该函数可以像内置的AutoCAD命令一样在AutoCAD命令行、Visual LISP中定义、加载和使用此函数。可以用这个功能为AutoCAD添加新命令或重定义现有的命令。

要将函数用作AutoCAD命令,必须确保它们遵循如下规则。

1)函数名必须使用格式C:XXX格式(大写或小写字符)。名称的C:部分必须存在;XXX部分是读者选择的命令名。

2)函数必须定义为不带参数。允许使用局部变量,并且使用局部变量是一个很好的编程习惯。

使用时应注意不同环境是不一样的。例如定义了C:HELLO函数,则在命令行可以直接输入名称HELLO调用。但是在Visual LISP控制台窗口中调用时,必须使用完整名称;例如,(C:HELLO)。

现在以数学模型(见图8-5)为例,说明编写函数的过程。

h1=h-rtanβ

式中h1——圆柱管最短素线的高度;

h——斜截面的高度;(www.xing528.com)

β——斜截面和圆柱管端面之间的夹角;

r——圆柱管半径,可以是内径、中径、外径等。

978-7-111-28812-1-Chapter08-10.jpg

图8-5

α i=(2π/n)i式中α i——等分点位置角度(弧度);

π——圆周率常量;

n——等分数。它的取值和圆柱管直径大小成正比,一般取8、12、16、24、32等;

i——等分点位置编号。

h i=[r×(1-cosα i)×tanβ]+h1

式中h i——展开线上各等分号位置处素线的高度。

编写已知r=213、h=200、β=30、n=16求h i的小程序:

978-7-111-28812-1-Chapter08-11.jpg

978-7-111-28812-1-Chapter08-12.jpg

上面短短的几行代码已经写完了全部程序,接下来就可以使用了。这些程序代码可以从随本书赠送光盘Program的目录中,把BJZK8-2.LSP文件直接复制到读者的计算机里,并由Visual Lisp的下拉菜单文件→打开文件将它打开,接着点选工具→加载活动编辑窗口按钮,加载成功在控制台窗口显示信息;7表格从#<editor"D:/Program/BJZK8-2.LSP">加载,见图8-6。

加载后的函数可以调用,现在来求0#等分点位置处素线的高度,将图8-7文本编辑器里需要调用的函数选中,接着点选工具→加载选定代码按钮,AutoLISP对选中的5个函数求值,并将结果显示在控制台窗口中,见图8-7。

978-7-111-28812-1-Chapter08-13.jpg

图8-6

为了节约篇幅,将上述图8-7文本编辑器选函数,加载选定代码后,在控制台窗口中显示结果的过程描述如下:

→左面的代码表示选中函数代码,→后面的表示在控制台窗口中显示的返回值或符号。

978-7-111-28812-1-Chapter08-14.jpg

77.0244就是0#等分点位置处素线的高度。

(setq beta1(dtr beta))它将斜截面和圆柱管端面之间的夹角beta=30°转换成弧度,并且赋值给变量beta1,以后不用再求值。同样,(setq h1(-h(∗r(/(sin beta1)(cosbeta1)))))求得圆柱管最短素线的高度以后也不用再求值。

(defun alpha(n i)(/(∗2 pi i)n))它定义一个度转换成弧度的函数,以后不用再定义。不过调用时要根据不同的等分点位置修改对应的i值。如1#等分点位置处应将(setq al-phai(alpha 160))修改成(setq alphai(alpha 161))后,再调用。

1#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-15.jpg

2#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-16.jpg

3#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-17.jpg

4#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-18.jpg

5#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-19.jpg

6#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-20.jpg

978-7-111-28812-1-Chapter08-21.jpg

图8-7

978-7-111-28812-1-Chapter08-22.jpg

7#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-23.jpg

8#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-24.jpg

9#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-25.jpg

10#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-26.jpg

11#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-27.jpg

12#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-28.jpg

13#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-29.jpg

14#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-30.jpg

15#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-31.jpg

16#等分点位置处素线的高度:

978-7-111-28812-1-Chapter08-32.jpg

以上完成了平面斜截圆柱管的等分展开计算小程序的编写和调用。

当然,这个计算小程序可以对不同情况的平面斜截圆柱管求值,只要修改(setq r 213

h 200 beta 30 n 16)赋值函数中对应的值后,按照上述步骤做一次即可。

如:已知r=500、h=1000、β=45、n=16、δ=10求hi。

需要处理壁厚时,按内径计算只要将r=490修改,对应位置的值如下:

(setq r 490 h 1000 beta 45 n 16)

需要处理壁厚时,按外径计算只要将r=500修改,对应位置的值如下:

(setq r 500 h 1000 beta 45 n 16)

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈