14e5180>
像素名称在图文件内是唯一的,不会重复
对象的像素名称只在目前作业中有效,再开启图档时,会指定新的像素名称予该对象
档案(FILE)
以OPEN函数所开启档案的指针,作为其它函数(读写该档案)的自变量
选集(PICKSET)
用SSGET等函数建立的一个或多个对象的集合或群组
转化(VARIANT)
可将像素名称转换为可与ActiveX配搭使用的VLA-Object对象
符号(SYM)
用以储存静态数据的名称;例如内建或使用者定义的函数
符号名称不分大小写,可由任意长度的可打印字符组成;但下列的字符除外:
左括号(右括号)句点.单引号'双引号"分号;
表(LIST)
亦称为串行,是放在一对小括号()内,一个或多个元素的有序集合
e.g.(1.0"Lisp"()(5.67))
元素可以是字符串,符号,整数或实数;也可以是另一个表
元素与元素之间要用空格隔开,但元素与小括号之间则可以不隔空格
为便于存取表内各元素,每个元素均有其序号;从表的左边开始,第一个元素序号为0,依此类推
表的大小即为其顶层元素的数量(内层嵌套式的表,视为单一元素)
点对(DottedPair)亦是表的一种;表内有2个元素,中间以一圆点分隔,且元素与圆点之间亦须以空格分开
若表内没有任何元素,称为空串行或空表;以()或(NIL)表示
第4节
--------------------------------------------------------------------------------
变数(Variable)
为程序执行中动态储存数据的符号名称;主要分为2类:
区域(Local)变量又称为局部变量;该变量只在该程序段落中有效,不能为其它程序使用
全域(Global)变量又称为整体变量;变量在所有程序段落中均可使用
变量名称与符号的限制相同,使用时宜采用有意义及易于辨别的名称
变量在赋值或使用前无须先行设定
相同的变量可以储存不同型态的数据(但同一时间内只可储存一种型态)
在指定新的数据之前,变量储存的内容会保持不变
赋值
将数据给予指定的变量储存
以内建函数SETQ进行(可用于绘图模式的指令行或AutoLISP程序),其语法如下:
(SETQ变量名称1资料1[变量名称2资料2....])
e.g.(SETQNAME"David"AGE37WEIGHT72.5POINT(LIST1020))
在函数名称之后,各参数以两个一组,每组左边为变量名称,右边为存入变量的数据
亦可将变量名称赋以空值(NIL):
e.g.(SETQOCCUPATIONNIL)
要显示变量所储存的数据,可以使用内建函数PRINC(可用于绘图模式的指令行或AutoLISP程序),其语法如下:
(PRINC变量名称)
e.g.COMMAND:
(PRINCNAME)Result:
David"David"
在绘图模式中,亦可于指令行中使用感叹号!
来显示变量内容,或作为指令选项的输入值;语法如下:
!
变量名称
e.g.COMMAND:
!
NAMEResult:
"David"
在VisualLISP的主控台窗口中,于提示符号_$后键入要显示的变量名称
_$变量名称
e.g._$NAME
要检查变量所储存的数据型态,可使用内建函数TYPE;语法如下:
(TYPE变量名称)
e.g.COMMAND:
(TYPENAME)Result:
STR
若检查的变量没有储存数据,则会传回NIL
第5节
--------------------------------------------------------------------------------
练习(Exercises)
将四个坐标分别存入四个变量中,并以LINE或PLINE指令,配合四个坐标变量,画出正四边形.
COMMAND:
(SETQPOINT1(LIST00)POINT2(LIST010)POINT3(LIST1010)POINT4(LIST100))COMMAND:
LINE;直线段指令
COMMAND:
!
POINT1;第一点(左下角起点)
COMMAND:
!
POINT2;第二点(左上角)
COMMAND:
!
POINT3;第三点(右上角)
COMMAND:
!
POINT4;第四点(右下角)
COMMAND:
C;自动联机至起点以关闭四边形
画圆:
将圆心坐标及半径长度分别存入两个变量中(变量名称及数据型态自订)
COMMAND:
(SETQCEN(LIST00)RAD20);将圆心点设为坐标0,0;半径为20
COMMAND:
CIRCLE;执行划圆指令
Specifycenter....:
!
CEN;在提示后以变量CEN响应输入
Specifyradius....:
!
RAD;在提示后以变量RAD响应输入
将不同型态的数据,分多次存入相同的变数内;每次均以PRINC及TYPE函数显示变量内容及其数据型态
COMMAND:
(SETQTEMP1.2);将实数1.2存入变数TEMP
COMMAND:
!
TEMPResult:
1.2
COMMAND:
(TYPETEMP)Result:
REAL
COMMAND:
(SETQTEMP"AutoLISP");将字符串存入变量TEMP
COMMAND:
!
TEMPResult:
"AutoLISP"
COMMAND:
(TYPETEMP)Result:
STR
二数值资料
第1节
--------------------------------------------------------------------------------
基本运算
加函数
(+[数值参数1数值参数2....])
e.g.(+2.546)Result:
12.5
函数的结果为各参数之总和
若仅提供一个参数,则以0加上此参数的结果为返回值
若没有提供任何参数则传回0;各参数须为整数或实数型态
若所有参数均为整数,结果亦为整数;若其中一个参数为实数型态,结果会转换为实数
减函数
(-[数值参数1数值参数2....])
e.g.(-1023)Result:
5
结果为第一个(最左边)参数减去其右边各参数的总和
若只提供一个参数,返回值为0减去该参数的结果
若没有提供任何参数则传回0;各参数须为整数或实数型态
若所有参数均为整数,结果亦为整数;若其中一个参数为实数型态,结果会转换为实数
乘函数
(*[数值参数1数值参数2....])
e.g.(*234)Result:
24
结果为所有参数的乘积
若只提供一个参数,则返回值为该参数乘以1的结果
若没有提供任何参数则传回0;各参数须为整数或实数型态
若所有参数均为整数,结果亦为整数;若其中一个参数为实数型态,结果会转换为实数
除函数
(/[数值参数1数值参数2....])
e.g.(/2423)Result:
4
结果为第一个(最左边)参数除以其右边各参数的乘积
若仅提供一个参数,则返回值为该参数除以1的结果
若没有提供任何参数则传回0;各参数须为整数或实数型态
若所有参数均为整数,结果亦为整数;若其中一个参数为实数型态,结果会转换为实数
注意:
在本篇教程中,各函数的数值参数,均可以变量(储存值只可以是整数或实数,且不可以是空值nil)取代
第2节
--------------------------------------------------------------------------------
练习(Exercises)
计算式(2+4)*3
COMMAND:
(*3(+24))Result:
18
计算式(50-8*5)/4
COMMAND:
(/(-50(*85))4)Result:
2
注意:
上式的正确答案应是2.5,因为函数中的各参数均为整数,所以传回的结果亦为整数
递增及递减
递增
(1+数值参数)
e.g.(1+2)Result:
3
递减
(1-数值参数)
e.g.(1-4)Result:
3
三角函数(TrinagularFunction)
正弦值
(SIN弧度参数)
e.g.(SIN1)Result:
0.841471
余弦值
(COS弧度参数)
e.g.(COS1)Result:
0.540302
反正切值
(ATAN弧度参数)
e.g.(ATAN1)Result:
0.785398
第3节
--------------------------------------------------------------------------------
其它数值处理
次方值
(EXPT数值参数次方值)
e.g.(EXPT24)Result:
16
若参数及次方值两个均为整数,返回值亦是整数;若其中一个为实数,结果为实数
开方根
(SQRT数值参数)
e.g.(SQRT30)Result:
5.47723
绝对值
(ABS数值参数)
e.g.(ABS-123)Result:
123
余数
(REM[数值参数1数值参数2....])
e.g.(REM50265)=(REM(REM5026)5)Result:
4
将参数1整除参数2的余数
若参数多于2个时,则会将余数再整除下一个参数,再得出余数;依此类推
若其中一个参数为实数时,则结果为实数;否则为整数
最大公约数
(GCD数值参数1数值参数2)
e.g.(GCD8157)Result:
3
两个参数均必须为整数值型态
自然对数
(LOG数值参数)
e.g.(LOG3.5)Result:
1.25276
是EXP函数的反函数;传回值为实数型态
自然反对数
(EXP数值参数)
e.g.(EXP1.25276)Result:
3.49999
是LOG函数的反函数;传回值为实数型态
第4节
--------------------------------------------------------------------------------
数值资料转型
实数转整数
(FIX数值参数)
e.g.(FIX12.56)Result:
12
只会截去小数部份(小数字不会4舍5入)
整数转实数
(FLOAT数值参数)
e.g.(FLOAT12)Result:
12.0
整数转字符串
(ITOA数值参数)
e.g.(ITOA-17)Result:
"-17"
数值转字符串
(RTOS数值参数[模式[小数字]])
e.g.(RTOS17.2333323)Result:
12.266
若不设定模式,则依系统变量LUNITS的设定值转换数值为字符串
若不设定小数字,则依系统变量LUPREC的设定值转换
模式设定值可以是下列数值之一:
1=科学记号
2=十进制
3=英呎及十进制英吋
4=英呎及分数位英吋
5=分数
当选用的模式为3,4或5,则传回的字符串受系统变量UNITMODE影响
弪度转字符串
(ANGTOS角度参数[模式[小数字]])
e.g.(ANGTOS0.7853980)Result:
"45"
e.g.(ANGTOS0.7853984)Result:
"N45dE"
若不设定模式,则依系统变量AUNITS的设定值转换数值为字符串
若不设定小数字,则依系统变量AUPREC的设定值转换
模式设定值可以是下列数值之一:
0=度
1=度/分/秒
2=分度量
3=弪度
4=土地测量单位
当选用的模式为4,则传回的字符串受系统变量UNITMODE影响
反函数为ANGTOF;参阅第5篇教程
第5节
--------------------------------------------------------------------------------
数值资料检查
数值
(NUMBERP数值参数)
e.g.(NUMBERP-3.45)Result:
T
e.g.(NUMBERP"AutoLISP")Result:
nil
注意:
在范例的传回值中,T表示函数的结果为真(成立),nil表示结果为假(不成立)
负数值
(MINUSP数值参数)
e.g.(MINUSP-3.45)Result:
T
e.g.(MINUSP0)Result:
nil
e.g.(MINUSP3.45)Result:
nil
零值
(ZEROP数值参数)
e.g.(ZEROP0)Result:
T
e.g.(ZEROP3.45)Result:
nil
其它应用
最大值
(MAX[数值参数1数值参数2....])
e.g.(MAX-8852)Result:
5
若没有提供任何参数,则传回值为0
最小值
(MIN[数值参数1数值参数2....])
e.g.(MIN-8852)Result:
-88
若没有提供任何参数,则传回值为0
第6节
--------------------------------------------------------------------------------
练习(Exercises)
计算下列算式:
(+12345678901234567890)Result:
-1825831516
上式中两个数值参数均为整数,而结果值大于整数型态所能容许之范围;固导致发生溢位问题,产生无效的结果.修正算式如下:
只要将其中一个参数改为实数型态即可.
(+1234567890.01234567890)Result:
2.46914e+009
计算下列算式:
(+98765432101234567890)Result:
1.11111e+010
上式中两个数值参数均为整数,但其中一个(第一个)参数巳大于整数型态所能容许之范围;系统会自动将此参数先行转为实数型态才计算.
计算下列算式:
(FIX(SQRT(+1(MAX20104030))))Result:
6
----最先执行的是最内层的算式(MAX20104030),求出最大值为40
----其次执行加函数,将MAX函数所得的最大值加1,结果为41
----再利函数SQRT,将41开方根,结果为6.4031
----最后使用FIX函数,截去其小数字,得到最后的结果为6
三程序设计
第1节
--------------------------------------------------------------------------------
使用者定义函数
是将一群表示式组合成一个函数或指令
可应用于绘图模式的指令行提示,VisualLISP主控台,或供其它自定义函数内的表示式呼叫使用
AutoLISP原始程序代码均以纯文字格式存盘,扩展名为LSP(2000版可编译成扩展名为FAS的档案
可以一般文字编辑器进行开发,如DOS的EDIT,WINDOWS的WORD或WORDPAD等
一个自定函数内最少要有一个表达式
在原程序文件(LSP)里,自定义函数以DEFUN函数开始;其语法如下:
(DEFUN[C:
]函数名称([自变量串行...][/局部变数串行...])表达式...)
在呼叫带有自变量的自定函数时,必须同时提供与定义函数时,同等数量的参数,使各参数传入自定函数的各自变量中
自变量被视为一种特殊类型的局部变量,无法用于该自定函数以外的其它函数
若自定函数中无须设定任何自变量,亦必须以空串行()加在函数名称之后
若有提供局部变量,必须以斜线/加在局部变量的开头(即使前面没有自变量串行)
各自变量,斜线,局部变量之间要以空格分隔;但与左右小括号之间则不须以空格分开
若自变量串行中有相同名称的自变量出现,则会忽略第一个以后的相同自变量;变数亦是一样
若在函数名称前加上C:
表示该函数可以在绘图模式的指令行提示下,其执行方式与内建函数相同;亦可以在任何内建命令(执行中)的提示后,以通透方式执行(但须将函数名称包在一对小括号中)
若在函数名称前没有加上C:
在指令行提示下,必须将函数名称包在一对小括号中才可执行
不可以在执行一自定函数时,以通透方式执行另一自定函数
第2节
--------------------------------------------------------------------------------
加载程序
自定函数在使用前,都要将其所在的程序文件(扩展名为LSP)加载才可执行
ACAD.LSP程序文件(预设在SUPPORT子目录内)会在启动AutoCAD时自动加载
(LOAD"程序文件名称"[加载失败])
e.g.(LOAD"TEST")
若程序文件之文件名为LSP,则在程序文件名称之后,可以不加上扩展名
若有需要,系统会顺序尝试其它的扩展名:
VLXFASLSP
若程序文件不在系统的支持目录下,则需在文件名前加上目录路径
注意:
必须以正斜线/或两个反斜线\\作为目录的分隔符
可以在加载失败的参数中提供字符串,以供加载失败时显示;亦可提供有效的自定函数,该函数在加载程序文件失败时会被执行
e.g.(LOAD"TEST""LoadFail")或(LOAD"TEST"(DOERROR))
注意:
在程序文件加载后,在提示行显示的返回值,一般是该程序文件中,最后被定义的函数名称
或是在程序文件内没有包含在自定函数中,最后一个表达式的执行结果
第3节
--------------------------------------------------------------------------------
练习(Exercises)
启动文字编辑器,编写一AutoLISP程序作两个同心圆(第1个圆半径为50,第