本节以被平面斜截圆柱管的等分展开计算为例,说明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函数的一次调用中给多个符号赋值。
样例:
(setq a 5.0) 返回5.0
下面的命令设置两个变量b和c:
(setq b 123 c 4.7) 返回最后一个变量的值4.7
(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——圆柱管半径,可以是内径、中径、外径等。
图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的小程序:
上面短短的几行代码已经写完了全部程序,接下来就可以使用了。这些程序代码可以从随本书赠送光盘Program的目录中,把BJZK8-2.LSP文件直接复制到读者的计算机里,并由Visual Lisp的下拉菜单文件→打开文件将它打开,接着点选工具→加载活动编辑窗口按钮,加载成功在控制台窗口显示信息;7表格从#<editor"D:/Program/BJZK8-2.LSP">加载,见图8-6。
加载后的函数可以调用,现在来求0#等分点位置处素线的高度,将图8-7文本编辑器里需要调用的函数选中,接着点选工具→加载选定代码按钮,AutoLISP对选中的5个函数求值,并将结果显示在控制台窗口中,见图8-7。
图8-6
为了节约篇幅,将上述图8-7文本编辑器选函数,加载选定代码后,在控制台窗口中显示结果的过程描述如下:
→左面的代码表示选中函数代码,→后面的表示在控制台窗口中显示的返回值或符号。
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#等分点位置处素线的高度:
2#等分点位置处素线的高度:
3#等分点位置处素线的高度:
4#等分点位置处素线的高度:
5#等分点位置处素线的高度:
6#等分点位置处素线的高度:
图8-7
7#等分点位置处素线的高度:
8#等分点位置处素线的高度:
9#等分点位置处素线的高度:
10#等分点位置处素线的高度:
11#等分点位置处素线的高度:
12#等分点位置处素线的高度:
13#等分点位置处素线的高度:
14#等分点位置处素线的高度:
15#等分点位置处素线的高度:
16#等分点位置处素线的高度:
以上完成了平面斜截圆柱管的等分展开计算小程序的编写和调用。
当然,这个计算小程序可以对不同情况的平面斜截圆柱管求值,只要修改(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)
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。