Auto-CAD-二次开发-Lisp-字典解读_第1页
Auto-CAD-二次开发-Lisp-字典解读_第2页
Auto-CAD-二次开发-Lisp-字典解读_第3页
Auto-CAD-二次开发-Lisp-字典解读_第4页
Auto-CAD-二次开发-Lisp-字典解读_第5页
已阅读5页,还剩142页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AutoCADLisp函数及例题大全

目录一,基本函数: -1-1,算术运算 -1-+-*/~1+1-absatancosexpexptfixfloatgcdloglogandlogiorlshmaxminminuspremsinsqrtzerop2,字符串处理 -9-strcasestrcatstrlensubstrwcmatch3,等量和条件函数 -12-=/=<<=>>=andboolecondeqequaliforrepeatwhile4,表处理函数 -23-acad_strlsortappendassoccar和cdrconsforeachlastlengthlistlistpmapcarmembernthreversesubst5,符号处理函数 -32-aotmatoms_familyboundpnotnullnumberpquotereadsetsetqtype6,处理函数的函数 -37-applydefunevallambdaprogntraceuntrace7,错误处理函数 -45-alert*error*exitquit8,应用程序处理函数 -50-adsarxarxloadarxunloadautoarxloadautoloadautoxloadloadstartappxloadxunload二,实用工具函数: -56-1,查询和command函数 -56-acad_colordlgacad_helpdlgcommandgetcfggetenvgetvarhelpsetcfgsetfunhelpsetvarver2,显示控制函数 -64-graphscrgrcleargrdrawgrtextgrvecsmenucmdprin1princprintpromptredrawterpritextpagetextscrvports3,用户输入函数 -72-entselgetanglegetcornergetdistgetfiledgetintgetwordgetorientgetpointgetrealgetstringinitgetnentselnentselp4,几何实用函数 -85-angledistanceintersosnappolartextbox5,转换函数 -88-angtofangtosasciiatofaotichrcvunitdistofitoartostrans6,文件处理函数 -96-closefindfileopenread-charread-linewrite-charwrite-line7,设备访问函数 -101-grreadtablet三,ase接口函数: -103-四,选择集,对象和符号表函数: -104-1,选择集处理函数 -104-ssaddssdelssgetsslengthssmembssname2,对象处理函数 -110-entdelentgetentlastentmakeentmodentnextentupdhandent3,扩展数据处理函数 -124-regappxdroomxdsize4,符号表和词典处理函数 -125-dictnextdictsearchnamedobjdictsnvalidtblnexttblobjnametblsearch五,对话框编程函数: -131-1,对话框打开和关闭函数 -131-done_dialogload_dialognew_dialogstart_dialogterm_dialogunload_dialog2,控件和属性处理函数 -134-action_tileget_attrget_tilemode_tileset_tile3,列表框和弹出式列表框处理函数 -136-add_listend_liststart_list4,图象控件处理函数 -137-dimx_tile和dimy_tileend_imagefill_imageslide_imagestart_imagevector_image5,特定应用数据处理函数 -141-client_data_tile六,内存管理函数: -142-allocexpandgcmemvmon一,基本函数:1,算术运算+一.功能

返回所有被加数之和。二.格式

(+

[numbernumber]...)三.说明

如果在调用本函数时仅提供了一个变元number,本函数会返回变元number与0相加的结果。本函数的运行结果是一个数。若不提供变元,则返回0。四.实例

(+32)

;;;返回5

(+1034.5);;;返回8.5

(+12)

;;;返回3

(+1234.5);;;返回10.5

(+1234.0);;;返回10.0-一.功能

从第一个数减去第二个数和随后的那些数,并返回差值。二.格式

(-

[numbernumber]...)三.说明

调用函数时,如果提供的变元多于两个,则本函数返回从第一个数减去第二个数到最后一个数的和的差值。如果仅提供一个number变元,本函数返回0减去number差值。本函数的返回结果是一个数。若不提供变元,则返回0。四.实例

(-5030)

;;;返回20

(-5040.02)

;;;返回8.0

(-5040)

;;;返回10

(-5040.0)

;;;返回10.0

(-5040.02.5);;;返回7.5

(-8)

;;;返回-8*一.功能

返回所有数的积。二.格式

(*

[numbernumber]...)三.说明

如果调用本函数时提供了一个number变元,本函数则返加这个变元与1相乘的结果。本函数的返回结果是一个数。不提供变元则返回0。四.实例

(*24)

;;;返回8

(*224.0);;;返回16.0

(*23)

;;;返回6

(*23.0)

;;;返回6.0

(*234.0);;;返回24.0

(*3-4.5)

;;;返回-13.5

(*3)

;;;返回3/一.功能

第一个数除以其余数的积,返回商。二.格式

(/

[numbernumber]...)三.说明

调用本函数时,如果提供的变元多于2个,本函数用第一个数作为被除数,除以第二个数到最后一个数的积,返回最后得到的商。如果仅提供了一个变元number,本函数返回number除以1的结果。本函数的运算结果是一个数。若不提供变元,则返回0。四.实例

(/1002)

;;;返回50

(/1002.0)

;;;返回50

(/10020.02);;;返回2.5

(/100202)

;;;返回2

(/4)

;;;返回4~一.功能

返回变元的按位非(即1的补码)。二.格式

(~

int

)三.说明

变元int必须为整型数。四.实例

(~3)

;;;返回-4

(~100);;;返回-101

(~-4)

;;;返回31+一.功能

返回变元增1后的结果。二.格式

(1+

number)三.说明四.实例

(1+4);;;返回5

(1+-17.5);;;返回-16.51-一.功能

返回变元减1后的结果。二.格式

(1-

number)三.说明四.实例

(1-4);;;返回3

(1--17.5;;;返回-18.5abs一.功能

返回变元的绝对值二.格式

(abs

number)三.说明四.实例

(abs10)

;;;返回

10

(abs

-50)

;;;返回

50

(abs-15)

;;;返回

15atan一.功能

返回一个数的反正切值,单位为弧度。二.格式

(atan

num1[num2])三.说明

调用atan函数时,若仅提供变元num1,则本函数返回数num1的反正切值,单位为弧度。如果提供了num1和num2这两个变元,atan函数返回num1/num2的反正切值,单位为弧度。如果num2是零,则返回的角度为正或为负的1.570796弧度(+90度或-90度),取决于num1是正还是负。所返回的角度范围是-Pi/2至+Pi/2弧度。四.实例

例1.(atan

0.5);;;返回0.463648

(atan

1.0);;;返回0.785398

(atan

-1.0);;;返回-0.785398

(atan

2.03.0);;;返回0.588003

(atan

2.0-3.0);;;返回2.55359

(atan

1.00.0);;;返回1.5708

例2.

angtos函数可以将atan函数所返回弧度值转换成一个字符串值。

(angtos(atan

-1.0)04);;;返回"315.0000"

(angtos(atan

2.03.0)04);;;返回"33.6901"

(angtos(atan

2.0-3.0)04);;;返回"146.3099"

(angtos(atan

1.00.0)04);;;返回"90.0000"cos一.功能

返回以弧度表示的一个角度的余弦值。

二.格式

(cosangle)

三.说明四.

实例

(cos0.0);;;返回1.0

(cospi);;;返回-1.0exp一.功能

该函数返回e的次幂num的值﹐e为自然对数的底数﹐即e=2.718282…。exp函数总是返回一个实型数。二.格式

(expnum)三.实例

(exp1.0);;;返回2.71828

(exp2.0);;;返回9.02501

(exp-0.4);;;返回0.67032expt一.功能

该函数返回以数number为底数的power次幂的值。二.格式

(exptnumberpower)三.说明

调用此函数时﹐如果提供的两个变元都是整数﹐结果也是整数;否则﹐结果是实数。四.实例

(expt24);;;返回16

(expt3.02.0);;;返回9.0fix一.功能

截尾取整函数。二.格式

(fixnum)三.说明

fix截去数num的小数部分﹐而返回它的整数部分。

如果num大于最大可能的整数(在32位平台上最大可能整数是+2147483647或-214748648)﹐fix函数返回num被截去尾数后面而得到的一个实数(尽管AutoLISP和AutoCAD之间的整数传送被限制在16位值范围内)。四.实例

(fix3);;;返回3

(fix3.7);;;返回3

(fix-3.999);;;返回-3float一.功能

将一个数转换成实型数后返回。二.格式

(floatnum)三.说明

这个函数在某些场合是非常有用的﹐如在除法函数中﹐通过float函数强制把数转换为实型数﹐从而使可能为整除的运算变为浮点除运算。四.实例

(fix3);;;返回3.0

(fix3.75);;;返回3.75

(fix2.65);;;返回2.65gcd一.功能

返回两个整型数的最大公约数。二.格式

(gcdint1int2)三.说明

变元In1和in2必须是大于0的整型数。四.实例

(gcd8157);;;返回3

(gcd1220);;;返回4log一.功能

返回一个实型数的自然对数。二.格式(log

num)三.实例(log

4.5)

;;;

返回1.50408

(log

1.22);;;返回0.198851logand一.功能

返回一个整型数表的各数按位逻辑与(AND)的结果。二.格式

(logand

7153);;;返回3

(logand

2315);;;返回2

(logand

834);;;返回0logior一.功能

返回一个整型数表的各数按位逻辑或(OR)的结果。二.格式

(logior

int

int)三.说明(logior

124);;;返回7

(logior

93)

;;;返回11lsh一.功能

该函数实现的逻辑移位。它返回数int按位方式作整数numbits次逻辑移位的结果(整型数)。二.格式

(1sh

int

numbits)三.说明如果numbits是正数,则数int向左移位numbits次;如果numbits是负数,则数int向右移位numbit次。在这两种情况下,移入位为0,移出位丢弃。如果移位运算之后符号位包含的是0(即位号31),则返回的值是正数;否则,返回的值是数。执行一次逻辑左移操作,数int的绝对值增大一倍(即相当乘以2);执行一次逻辑右移,数int的绝对值减少一半(即相当于除以2)。四.实例

(1sh

21);;;返回4

(1sh

2-1)

;;;返回1

(1sh

401)

;;;返回160

(1sh

-21)

;;;返回-4max一.功能

返回给定的各个数中的最大者。二.格式

(max

number

number...)三.说明

(max

4.07-144)

;;;返回4.07

(max

-881952);;;返回19

(max

2.148)

;;;返回8.0min一.功能

返回给定的各个数中的最小者。二.格式

(min

number

number...)三.实例(min

683-10.0);;;返回-10.0

(min

732485);;;返回2

(min

246.7)

;;;返回2.0minusp一.功能

检查一个数是否是负数。二.格式

(minusp

num)三.说明如果num负数,本函数调用结果返回T;否则,返回nil。四.实例(minusp

-1)

;;;返回

T

(minusp

-4.293);;;返回

T

(minusp

830.2)

;;;返回

nilrem一.功能

将第一个数除以第二个数,并返回余数。二.格式

(rem

number

number...)三.说明如果调用rem函数时,给出的数多于二个,则它返回(rem...(rem

(rem

num1

num2)

num3)...)的结果四.实例

(rem

4212)

;;;返回6

(rem

12.016);;;返回12.0

(rem

267)

;;;返回5

(rem

52)

;;;返回1

(rem

2672)

;;;返回1sin一.功能

返回以弧度为单位的一个角度的正弧度。二.格式

(sinangle)三.说明angle变元必须是以弧度表示的一个角度。四.实例(sin

1.0)

;;;返回0.841471

(sin

0.0)

;;;返回0.0sqrt一.功能

返回一个实型数的平方根。二.格式

(sqrt

num)三.实例

(sqrt

4)

;;;返回2

(sqrt

2.0);;;返回1.41421zerop一.功能

检查一个数的求值是否为零。二.格式

(zerop

number)三.说明

如果number的求值为零,zerop函数返回T,否则,返回nil。四.实例

(zerop

0)

;;;返回T

(zerop

0.0)

;;;返回T

(zerop

0.0001)

;;;返回nil2,字符串处理strcasestrcat一.功能

将多个字符串拼接成一个长字符串后返回。二.格式

(strcat

string1[string2]...)三.实例

(strcat

"a""bout");;;返回"about"

(strcat

"a""b""c");;;返回"abc"

(strcat

"a""""c");;;返回"ac"strlen一.功能

求出一个字符串中字符的个数,并将这个数以整型数形式返回。二.格式

(strlen[string]

...)三.说明

调用strlen函数时如果提供了多个string变元,则返回所有字符串的长度之和的整型数。若省略变元或为函数提供一个空字符串变元,Strlen函数返回零。四.实例

(strlen

"abcd");;;返回4

(strlen

"ab");;;返回2

(strlen

"one""two""four");;;返回10

(strlen);;;返回0

(strlen

"");;;返回0substr一.功能

返回一个字符串的一个子字符串。二.格式

(substr

string

start

[length])三.说明

Substr函数从字符string中取出一个子字符串并返回,截取的子字符串的起点由start变元指定,长度由length变元指定。同有提供length变元,则子字符串的结束处在母字符串string的端点,start和length变元都必须是正整数。四.实例

例1.(substr

"abcde"2)

;;;返回"bcde"

(substr

"abcde"21);;;返回"b"

(substr

"abcde"32);;;返回"cd"

例2.下面的程序将一个字符串的一个子串替换成一个新的子串,并返回替换后的结果。

(defun

instr

(olds

news

estr)

(setq

temp1

nil)

(setq

temp2

nil)

(setq

nold

(strlen

olds))

(setq

nnew

(strlen

news))

(setq

nest

(strlen

estr))

(setq

ct

1)

(setq

e

1)

(while

e

(setq

tststr

(substr

estr

ct

nold))

(setq

ct

(+

ct

1))

(if

(=tststr"")(setq

e

nil))

(if

(=strcase

tststr)(strcase

olds))

(progn

(setq

e

nil)

(setq

ct

(-

ct

1))

(setq

temp1(substr

estr

1(-ct1))

(setq

temp2(substr

estr

(+

ct

mold)

nest))

(setq

estr

(strcat

temp1

news

temp2))

)

)

)

若设置如下初值:

(setq

a

"abcxyzghi")

则:

(setq

a

(instr

"XYZ""def"

a));;;返回"abcdefghi"wcmatch一.功能

将一个通配样本与一个字符串进行匹配比较。二.格式

(wcmatch

string

pattern)三.说明

wcmatch函数将一个字符串string与一个通配样本进行比较,看它们是否匹配。如果匹配,本函数返回T;否则返回nil。

String和pattern这两个变元既可以是由双引号引起来的字符串,也可以是变量。

pattern变元中可以包含通配字符,我们将这些通配字符全部列出在下表中。仅对string和pattern中最前面的500个字符进行比较,超过500个字符之后的那些字符会被忽略。

通配字符表

_______________________________________________

通配字符

含义

_______________________________________________

#

匹配任意单个数字字符

_______________________________________________

@

匹配任意单个字母字符

_______________________________________________

.(圆点)

匹配任意单个非字母数字字符

_______________________________________________

*(星号)

匹配任意字符序列,包括一个空字符串,

该字符串可以用在搜索样本中的任意位

置,包括开头,中间和结尾处。

_______________________________________________

?(问号)

匹配任意单个字符

_______________________________________________

~(波浪)

如果该字符是匹配样本中的第一个字符,

则匹配除此样本之外的任何东西。

_______________________________________________

{}

匹配括号中的任意一个字符

_______________________________________________

{~}

匹配不在括号中的任意单个字符

_______________________________________________

-(连字符)

用在括符之间,指明单一字符的取值范围_______________________________________________

,(逗号)

分开两个样本

_______________________________________________

’(反引号)

特殊转义字符(按字义读取随后的字符)_______________________________________________四.实例

例1.(wcmatch

"Name

"N

*");;;返回T

这个实例测试字符串Name是否是用N打头的。

例2.在测试样本中可以使用逗号分隔多个测试条件,如;

wcmatch

"Name""???,~*m*,N*");;;返回T

如果上述三个测试样本中的任何一个满足条件,wcmatch函数返回T。Name中有一个字符这一条件不成立(为假);Name中不包含字符m不成立(为假);Name是由字符N打开的(为真),所以表达式最后的返回值为T。

样本的匹配是大小写敏感的,因此,它的大写和小写都必须匹配。在string和pattern中,使用由AutoLISP函数中返回的变量和值也是有效的。

例3.为了测试一个字符串中的一个通配符,您可以使用单个反引号来转义字符,转义的意思是指跟在单个反引号(’)后面的字符不当作通配符读取,而按其表面值进行比较。例如,为了测试在字符串Name中的任何位置是否有逗号,可以使用如下表达式:

(wcmatch

"Name""*',*");;;返回nil

由于其它的通配符可能在将来的AutoLISP版本中会加入,所以在样本中最好给所有的非字母数字字符换码,这样可确保其向上的兼容性。

例4.由于C和AutoLISP程序设计语言都使用反作斜杠(\)作为换码字符,所以在字符串中需要使用两个反斜杠(\\)才能产生一个反斜杠(\)。为了测试字符串Name中的任何位置上是否有一个反杠(\),可以使用如下表达式:

(wcmatch

"Name""*'\\*");;;返回nil

所有包含在括符[...]中的字符按字义读取,所以不必它们换码。但有一个例外,即波浪符(~)只有在括号中非第一个字符是(如:[A~BC]才按字义读取;否则,作为一个“非”字符读取,这意味着wcmatch函数将匹配所有字符,除跟随在波浪符之后的那些字符之外(如:“[~ABC]”。连字字符(-)仅当它是括符中的第一个字符(如::“[-ABC]”)或是括符中的最后一个字符(如:“[ABC-]”时,才按字义读取;否则,在括符中的连字符用于指定一个专用字符的取值范围,该范围仅限于单个字符的取值,因此,“STR[1-38]”与STR1、STR2、STR3和STR8匹配,而“[A-Z]”与任意单个大写字母匹配。

如果闭括符内的首字符(如:“[]ABC]”)或者它跟随在一个波浪符之后(如:“[~]ABC]”),则按字义读取。3,等量和条件函数=一.功能

如果所有变元在数值上是相等的,则返回T;否则,返回nil。二.格式

(=

number[numstr]...)三.说明

每一个numstr既可以是一个数,也可以是一个字符串。四.实例

(=44.0)

;;;返回

T

(=108)

;;;返回

nil

(=)

;;;返回

T

(=)

;;;返回

nil

(=

"go"

"go")

;;;返回

T

(=

"go"

"in")

;;;返回

nil五.

函数“=”,“eq”和“equal”之间的比较

(以下转载自晓东网站,未证实)

1、所有同源值一定相等

2、不同源时,INTREALSTR类型一定相等

3、不同源时,ENAME类型,'='不等,'eqequal'相等

(setqe1(car(entsel))e2(car(entsel)))这时选取相同实体

4、不同源时,LIST类型,'=eq'不等,'equal'相等

5、PICKSET好像不存在不同源问题

6、对不常用类型SYMSUBREXRXSUBR等未加分析

SYM应该属于不同源时相等的一类

/=一.功能

如果各变元在数值上不相等,则返回T;如果各变元数值上相等,则返回nil。二.格式

(/=

number

[numstr]...)三.说明

每一个numstr变元既可以是一个数,也可以是一个字符串。四.实例

(/=48.0)

;;;返回

T

(/=1010)

;;;返回

nil

(/=3.53.2);;;返回

T

(/=

"go"

"in");;;返回

T<一.功能

如果每一个变在数值上都小于它右边的变元,则返回T;否则返回nil。二.格式

(<

numstr

[numstr]...)三.说明

每一个numstr变元既可以是一个数,也可以是一个字符串。四.实例<=一.功能

如果每一个变元在数值上都小于或等于它右边的变元,则返回T;否则,返回、nil。二.格式

(<=

numstr

[numstr]...)三.说明

每一个numstr变元既可以是一个数,也可以是一个字符串。四.实例

(<=1020)

;;;返回

T

(<="b""b")

;;;返回

T

(<=323256);;;返回

nil

(<=133)

;;;返回

T

(<=3687)

;;;返回

nil>一.功能

如果每一个变元在数值上都大于它右边的变元,则返回T;否则,返回nil。二.格式

(>

numstr

[numstr]...)三.说明

每一个变元numstr既可以是一个数,也可以是一个字符串。四.实例

(>125)

;;;返回

T

(>"C""b")

;;;返回

T

(>310)

;;;返回

nil

(>742)

;;;返回

T

(>"ac""ab");;;返回

T>=一.功能

如果每一个变元在数值上都大于或等于它右边的变元,则返回T;否则,返回nil。二.格式

(>=

numstr

[numstr]...)三.说明

每一个变元numstr既可以是一个数,也可以是一个字符串。四.实例

(>=125)

;;;返回

T

(>="C""b")

;;;返回

T

(>=310)

;;;返回

nil

(>=74

2)

;;;返回

T

(>="ac"

"ab")

;;;返回

Tand一.功能

返回表达式的逻辑与运算结果。二.格式

(and

expr...)三.说明

如果任何一个表达式的求值结果为nil,这个函数就停止进一步的求值,并返回nil;否则,返回T。四.实例

给定如下初值

(setqa103bnilc

“string”))

那么:

(and1.4ab)

;;;返回

T

(and1.4abc)

;;;

返回

nilboole一.功能

本函数用作一个通用的按位布尔运算函数。二.格式

(boole

func

int1

int2...)三.说明

变元func是0~15之间的整数,代表16种可能的双变量布尔函数。随后的整数变元int1,int2...则根据这个函数和下表中给出的真值表,进行按位方式(即逻辑方式)组合。

布尔真值表

func位值

int1

int2

8

0

0

4

0

1

2

1

0

1

1

1

变元int1的每一位与变元的int2的对应位配对,指定其值表中一水平行。运算的结果某一位可能是0,也可能是1,这取决于真值表中这一行所对应的runc位的设置情况。

如果func位被适当设置,则结果位为1;否则,结果位为0。func变元的某些取值等效于标准布尔运算AND(与)、OR(或)、XOR(异或)和NOT(非),参见下表。

func的值表

func位值

运算

结果位为1的条件

1

AND

两个输入位均为1

6

XOR

两个输入位仅有一个为1

7

OR

有一个或两个输入位为1

8

NOR

两个输入位均为0(1的补码)

四.实例

例1.数12和5的逻辑AND运算。

(boole

1125);;;返回4

例2.数6和5的逻辑XOR运算。

(boole

665);;;返回3

例3.你还可以使用其他的func位值,去执行没有标准名的其他布尔运算。例如,如果func是4,那么当int2的位为1,而int1的对应位为0时,其结果位才为1,因此:

(boole

4314);;;返回12cond一.功能

这是AutoLISP语言的一个主要的条件函数。

二.格式

(cond(test1result1…)…)

三.说明

cond函数取任意数目的表作为变元。每一个表称为一个分支,每个分支中包含一个测试部分testn和测试成功的结果部分resultn。

Cond函数的求值过程是:自顶向下逐个测试每个条件分支。每个分支表仅第一个元素(即:testn)被求值。如果求值中遇到了一个非mil的值﹐则该分支便为满足条件的成功分支,后面其他分支不再被求值,cond转向对该成功分支的结果部分resultn中的诸表达式求值。??是仅有副作用。

有以下两种特殊情况:

(1)若所有分支的测试值都为nil,或者一个分支也不存在时,cond返回nil。

(2)如果成功的分支表中只有一个元素,即只有测试式<testn>而没有结果部分<resultn>,那么﹐该元素本身的值即为cond的返回值。换言之,测试部分和结果部分可以是同一个。

图cond函数的控制结构(得录入)

cond函数的控制结构如上图。其中T表示测试成功。实际上并不严格要求测试结果非为T不可,因为从逻辑的角度来说,任何非nil的表达式都与T等效。所以,只要测试非nil,都可以驱动一个分支执行。

四.实例

例1.编程用于计算一个数的绝对值。

(defunsbsx(a)

(cond((minuspa)(-a))

(ta)

)

)

上面的函数用于求一个数a的绝对值。Cond函数执行时,首先对cond的函数参数中的第一个表中的第一个元素(minuspa)求值结果为T,第一个分支即为成功分支,cond不再对其第二个分支求值,而去执行成功分支的结果部份:(-a),求值结果是把a的值取反,即负数变为正数,并作为cond的返回值。若a为正数,则(minuspa)的求值结果为nil,cond不再对其结果部份的表达式(-a)继续求值,而是转向第二分支进行测试。因为第二个分支的第一个元素是T,这实际上一个"无条件"执行分支,cond对该分支的结果表达式a求值,并作为cond调用的返回值。上式cond最后分支表中,其测试度为T,其实并不严格要求一个T,完全可以省去,只要是非nil的任何求值的结果都可以驱动该分支。因此,上面的程序可以改写如下,其效果一样:

(defunsbsx(a)

(cond((minuspa)(-a))

(a)

)

例2.定义一个函数,其功能是改变一个或一组对象使其与屏幕上的另一个对象具有相同的图层、标高或厚度。

(defunc:match(/oldssxpv)

(setqold(getvar"emdecho"))

(while(not(setqss(ssget))))

(setvar"cmdecho"o)

(command"change"ss"")

(setqx(entsel"\nSelectobjecttobematched"))

(initget1"LayerEleveThickness")

(setqp(getword"\nLayer/Eleve/Thickness;ofobject:"))

(setqv(cond((=P"Layer")8)

((=P"Eleve")38)

((=P"Thickness"39)

)

)

(command"P"P(cdr(assocv(entget(carx))))"")

(setvar"cmdecho"old)

(princ)

)

例3.设计一个函数,测试用户的响应信息。若用户用Y或y响应,则返回1;若用户N或n响应,则返回0;其它响应信息则返回nil。

(defunrespc(s)

(cond((=s"Y")1)

((=s"y")1)

((=s"N")0)

((=s"n")0)

(tnil)

)

)eq一.功能

确定两个表达式是否恒等。二.格式

(eqexpr1expr2)三.说明

eq函数用于检查两个表达式expr1和expr2是否约束于同一对象(用setq函数)﹐即它们不仅值相等﹐而且占用同一内存单元。若是﹐则返回T;否则返回nil。

您还可以使用这个函数确定两个表示否相同。例如﹐给定如下表达式:

(setqf1'(abc))

(setqf2'(abc))

(setqf3f2)

那么:

(eqf1f3);;;返回nil﹐因为f1和f3不是同一个表

(eqf3f2);;;返回T﹐因为f3和f2是同一个表四.

比较eq和equal函数的功能﹐可以得出如下结论:

1.两个表的equal相等﹐但对eq则不一定相等。

2.原子的equal相等﹐则一定是eq相等。

3.两个原子或表的eq相等﹐则一定是equal相等。五.

函数“=”,“eq”和“equal”之间的比较

(以下转载自晓东网站,未证实)

1、所有同源值一定相等

2、不同源时,INTREALSTR类型一定相等

3、不同源时,ENAME类型,'='不等,'eqequal'相等

(setqe1(car(entsel))e2(car(entsel)))这时选取相同实体

4、不同源时,LIST类型,'=eq'不等,'equal'相等

5、PICKSET好像不存在不同源问题

6、对不常用类型SYMSUBREXRXSUBR等未加分析

SYM应该属于不同源时相等的一类

equal一.功能

确定两个表达式的值是否相等。二.格式

(equalexpr1expr2[fuzz])三.说明

equal函数确定两个表达式的求值结果是否相等。当比较两个实型数(或由实型数组成的点表)时﹐如果采用不同的方法来计算它们﹐则恒等的两个数也可以稍有差别。因此﹐任选变元fuzz可以让用户指定表达式expr1和expr2间的最大差值﹐在此范围内﹐仍然认为expr1和expr2是相等的。例如﹐给定如下表达:

(setqf1'(abc)

(setqf2'(abc)

(setqf3f2)

(setqa1.123456)

(setqb1.123457)

则有:

(equalf1f3);;;返回T

(equalf3f2);;;返回T

(equalab);;;返回nil

(equalab0.000001);;;返回T四.

比较eq和equal函数的功能﹐可以得出如下结论:

1.两个表的equal相等﹐但对eq则不一定相等。

2.原子的equal相等﹐则一定是eq相等。

3.两个原子或表的eq相等﹐则一定是equal相等。五.

函数“=”,“eq”和“equal”之间的比较

(以下转载自晓东网站,未证实)

1、所有同源值一定相等

2、不同源时,INTREALSTR类型一定相等

3、不同源时,ENAME类型,'='不等,'eqequal'相等

(setqe1(car(entsel))e2(car(entsel)))这时选取相同实体

4、不同源时,LIST类型,'=eq'不等,'equal'相等

5、PICKSET好像不存在不同源问题

6、对不常用类型SYMSUBREXRXSUBR等未加分析

SYM应该属于不同源时相等的一类

if一.功能

根据对条件的判断,对不同的表达式进行求值。二.格式

(iftestexprthenexpr[elesexpr])三.说明

如果testexpr的求值结果为非空,则对thenexpr进行求值;否则,对elsexpr进行求值。if函数返回所选择的表达式的值。如果没有elseexpr表达式且testexpr是nil,那么,if函数返回nil。

本函数的相关函数是progn函数。四.实例

例1.(if(=13)"YES!!""no.")

;返回"no."

(if(=2(+11))

"YES!!""no.")

;返回"YES!!"

(if(=2(+34))"YES!!")

;返回nil

例2.下面的程序可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论