AutoLISP和Visual LISP

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2. 实型(REAL)
实型数是带小数点的数。在-1和1之间的实数必须以0开头,例 如:.5是错误的,应该写成0.5。实数用双精度的浮点数表示,并 且至少有14位有效位数的精度。注意,Visual LISP不显示所有的 有效位。
3. 字符串(STR)
字符串是由一对双引号括起来的字符序列。通常又把构成字符 串的双引号对称为字符串界定符。字符串中字母的大、小写和空 格符。 AutoLISP对字符串有如下约定: 字符串中,同一字母的大小写认为是不同的字体,空格也是一个 有意义的字符。 字符串的长度指位于双引号之间的字符个数(不包括双引号)。 如果在字符串的定界符之间无任何字符,称其为空串,它的长度 为零。 任何字符都可以用\nnn的格式表示,其中反斜杠“\”是ASCII 码的前导标识字符,nnn是该字符八进制的ASCII码。例如,字 符串ABCD也可表示为\101\102\123\104。一些常用的控制字符, 象反斜杠、双引号,除了可以用 \nnn的格式表示之外,还可以 用“\”转义字符的格式表示为“\\”、“\"”等特殊字符,见下表 。
,显示变量a是整型的;(type b)返回REAL,显示变量b是
实型的,(type c) 返回STR,显示变量c是字符串类型的。
2.2.3 为变量赋值
用setq函数为变量赋值,其格式如下: (setq 变量1 值1[变量2 值2 . . .]) 例如: Command:(setq x 返回“Center”
9. VLA 对象
VLA 对象是ActiveX 应用程序的主要组成部分。 不仅直线 、圆弧、多义线和圆等都被称为VLA对象,图层、组、块、视 图、视口、图形的模型空间、图纸空间、线型和尺寸标注样式
等也被称为VLA对象,甚至连AutoCAD本身也被认为是VLA对
象。
2.2 变量
2.2.1 符号
符号(SYMBOL)可以理解为标识,用来作为变量、函数的
多数情况下,表达式以表的形式存在,其格式如下:
(函数名 [变元]…) 变元的数量可能为0,也可能任意多个,这取决于具体函数。每 个参数还可以是一个表达式。 表达式形式的表,左圆括号之后的第一个元素必须是函数名。
2.3.2 表达式的前缀表示法
大多数计算机语言的表达式采用中缀表示法,即运算符在操 作数中间。如,x=2.5,y=1+2。 AutoLISP采用前缀表示法,将函数名放在所有操作数之前。 如,(setq x 2.5),(setq y (+ 1 2))。 若将x=(a+b)*c 改写为AutoLISP表达式,则为: (setq x (* (+ a b) c)) 前缀表示法使得运算和函数调用的形式得到了统一。前面提 到,在AutoLISP语言里,运算符也属于函数。
2.3 表达式
AutoLISP处理的对象是符号表达式(简称表达式)。表达式相 当于其他编程语言中程序的语句。
2.3.1 表达式的构成
表达式是由原子或表构成的。原子是指不可再分的元素。例如 平面内一点的坐标可以分为两个元素,即x坐标值,y坐标值,而x 、y不可再分,所以称为原子。符号和常数统称为原子。原子可细 分为数原子、串原子和符号原子。数或串原子的值是数或串本身 。例如:5、12.5、“ABC"是单个原子构成的表达式。
、“>”分别称之为小于、小于等于和大于函数。
其它计算机语言里的子程序、过程、程序流程控制的关字 ,在AutoLISP里也属于函数,例如“if”、 “while”分别称之 为条件和条件循环函数。
6. 文件描述符(FILE)
文件描述符是AutoLISP赋于被打开文件的标识号,它类似于 文件指针。下面的例子是以“读”的方式打开文件myfile.dat, 并将该文件的描述符赋予符号f1。 (setq f1 (open "myfile.dat" "r")) 返回<File:#34614>
第1章
AutoLISP和Visual LISP
• LISP(List Processing,表处理解释语言)诞生 于20世纪50年代末期,是人工智能学科领域广泛应 用的程序设计语言。 • AutoLISP语言是Autodesk公司为用户提供的在 AutoCAD平台上进行二次开发的早期语言。 AutoLISP不仅具备一般高级基本结构与功能,而且 还具有强大的图形处理功能。由于AutoLISP易于掌 握,因此,是AutoCAD用户使用较为广泛的编程语 言之一 • Visual LISP,对AutoLISP是一次重大改进,增强 了AutoCAD的二次开发能力。可使用户方便地用 AutoLISP语言进行程序开发中的编写程序代码、调 试程序等操作。Visual LISP包括文本编辑器、格 式编排器、语法检查器、源代码调试器、检验和监 视工具、文件编译器、工程管理系统、上下文相关 帮助与自动匹配功能和智能化控制台等。
(2)T
T为常量,它作为逻辑变量的值,表示成立,相当于其他程 序设计语言的true。
(3)PAUSE PAUSE与command函数配合使用,用于暂停,等候用户输 入。 (4)PI PI被定义为常量 。
每个变量都占用一些内存空间。为了节省存储空间,可重复 使用变量名,或者将不再使用的变量设为nil,以便释放该变量 所占的内存空间。
第2章
数据类型、表达式和函数
AutoLISP的数据类型丰富,除了一般程序设计语言具有的整 型、实型、字符串等类型之外,还有表、函数、文件描述符、 AutoCAD选择集、AutoCAD图元名、VLA对象、函数分页表和 外部函数等数据类型。
2.1 数据类型 1. 整型(INT)
整型即整数,整数由数字和正负号组成,正号可省略。整数 为32位带符号的数字,其范围从-2147483648到+2147483647。
在AutoLISP中,符号的大小写等价,符号的长 度没有限制,且所有的字符都是有意义的。 如果一个符号的长度不超过6,就用节点本身来存
储;如果符号的长度超过6,这样的符号就不能用节
点来存储,而是在节点中存放一个指向实际存储符号 名的指针。这将会多占用存储空间,且减慢了执行速 度。因此,符号的长度最好不要超过6。
在变量前加一个感叹号“!”,即可将表达式的值传递给
AutoCAD。例如: Command:(setq p '(20 10) r 5) Command:circle Specify center point for circle or [3P/2P/Ttr(tan tan radius)]:! p Specify radius of circle or [Diameter]::!r 即可画出圆心的坐标为(20,10)半径为5的圆。
名字。它的命名规则是不能只含数字,可以由下列字符以外的
任何可打印的字符所组成:
( 左括号 )右括号 · 句号 ′撇号 ″双引号 ;分号
例如,a1、b2 、c_3是合法的符号,(a、)b、.c、'4、"5是非 法的符号。注意:[1]、{2}、~3、!4、/5、1a、3c、-d、+e、b-2 、c*3也是合法的符号,这是与多数计算机语言的不同之处。
7. 图元名(ENAME)
图元名是AutoCAD为图形对象指定的16进制的数字标识。 AutoLISP通过该标识,找到该图形对象在图形数据库中的位 置,以便对其进行访问或编辑。
8. 选择集(PICKSET)
选择集是一个或多个图形对象命名的集合。可以通过 AutoLISP程序建立选择集、向指定的选择集添加或移去图形对 象,通过选择集可以对其内指定的成员进行访问或编辑。
2.2.5 显示变量的值
要想在AutoCAD命令提示区显示变量的值,必须在变量名 前添加惊叹号!。例如了解前面已赋值的变量x、v的值,操作 如下: Command:!x
1.5
Command:!v
"Center"
Command:!z nil(假定变量z尚未被定义)
来自百度文库
2.2.6 在交互方式下将变量的值传递给AutoCAD
表中元素的个数称为表的长度。例如,表(+ 1 2 3)的长 度为4、表(sin (* 0.5 pi))的长度为2、表((A B) C ( C D))的长度为3、表()的长度为0。 用表可以方便地构造出复杂的数据结构,例如,(1.5 3.6 )可以表示为一个X等于1.5、Y等于3.6的二维点,(2.5 2.0 1.0 )可以表示为一个X等于2.5、Y等于2.0、Z等于1.0的三维点。
在程序运行过程中,同一变量在不同的时刻可以被赋予 不同类型的值,因此在程序运行过程中,变量的数据类型是 可以被改变的。 例如,在一个程序里有以下两行: (setq a 5)当前的变量a是整型的。
(setq a "ABC") 当前的变量a是字符串类型的。
用type函数了解变量的类型,例如,(type a ) 返回INT
返回“Center” 该表达式同样为变量x、y、p赋值,并将内层表达式返回的结 果“Center”赋给变量v,最后返回外层表达式的结果“Center” 。
2.2.4 预定义的符号
AutoLISP对变量nil、T、Pause和Pi进行了预定义,用户可以 在编写AutoLISP程序时直接使用。 (1) nil 如果变量没有被赋值,它的值为nil。nil与空和0不同的是, 它既不是空串,也不是0值,它表示尚无定义。引用未被赋值的 变量是错误的。例如,变量x尚未被赋值,(+ 1 x)就会出现 error: bad argument type(坏的参数类型错)。 将nil赋给某一有定义的变量,其结果是:取消该变量的定义 ,并释放其所占存储空间。 nil作为逻辑变量的值,表示不成立,相当于其他程序设计语 言的false。
5. 函数(SUBS)
函数相当于子程序或过程。函数分为内部函数和外部函数 。AutoLISP提供的或用AutoLISP定义的函数为内部函数。用 ADS、ADSRX或ARX定义的函数为外部函数。例如sin 、cos 、sqrt为内部函数。 运算符在AutoLISP里属于函数,例如“+”、“-”、 “*”、“/”分别称之为加、减、乘、除函数,“<”、“<=”
2.2.2 变量的数据类型
AutoLISP变量属于符号,是指存储静态数据的符号。 数据类型是变量的重要的特征,因为它关系到存放变量值的 存储空间的大小。多数的计算机语言都在为变量赋值前对变量做 显式或隐式的说明。AutoLISP无须对变量做事先的类型说明, 变量被赋予值的类型即为变量的类型。 用setq函数对变量赋值,例如,(setq a 5),赋值后的结果是 :变量a是整型的,因为5是整型的;同样的原因,(setq b 2.5) 之后, b是实型的,(setq c "ABC")之后,c就是字符串类型的。
注意:一般的编程语言不允许将内部函数名或流程控 制的关键字作为变量名,而AutoLISP没有这样的限 制。因此,程序中定义的符号名称不要与系统定义的 函数名和预定义的变量名相同,否则,后面的定义将
取代已有的定义,从而引起混乱。例如,sin是正弦
函数,可是在执行表达式(setq sin 1)之后,sin不再 是正弦函数,而是一个值为1的整型变量。
1.5 y 20 p "Center")
除了为变量x、y、p赋值外,还返回最后一个表达式的结果 “Center”。如果上述表达式还有外层表达式,那么,将把该表 达式的返回值“Center”赋给外层表达式的变量。例如, Command:(setq v (setq x 1.5 y 20 p "Center") )
表2-1常用控制字符的表示方法 控制字符 示 用“\”为前导字符 用“\”为前导的ASCII码表
反斜杠“\”
双引号“"”
\\
\"
\134
\042
Esc键
换行
\e
\n
\033
\012
回车键
Tab键
\r
\t
\015
\011
注意,其中的字符e,n,r,t必须小写。
4. 表
表以左圆括号开始,以配对的右圆括号结束,表可以是空 的,可以有若干个元素;各元素间要用空格隔开。元素可以是 简单的,也可以是复杂的,还可以是其它的表。例如:(+ 1 2 3)、(sin (* 0.5 pi))、(A B)、((A B) C (C D ))、(0 "LINE")、(10 1.5 2.6 0.0)、()都是合法的表 。
相关文档
最新文档