AUTOLISP语言的学习和使用(1)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实体名
实体名是 AutoCAD 系统在绘图过程中赋予所绘实体的一个数字标号。实际是指向一个 AutoCAD 系统内部的数据文件的一个指针。 例如: (setq elast (entlast) ) 注:entlast 是获取数据库中最新图元的名称。
选择集
选择集一个或多个实体的集合。它类似 AutoCAD 的实体选择过程。在 AutoLISP 程序中 也可以构造一个选择集,并把它赋予一个符号供其它函数使用。 例如: (setq ss (ssget “p”))
打开一个名为: “myfile.dat” 的文件, 把打开文件时的文件描述符赋给符号 f, 再把 “This is a sample under AutoLISP.”写入该文件。 (setq f (open “c:\\myfile.dat” “w”) ) (print “This is a sample under AutoLISP.” f)
(setq a 6.0) “!a”将显示 6.0,表示 a 是一个实数,其值为 6.0。 (setq a “6.0”)
“!a”将显示 6,表示 a 是一个字符串,其值为“6.0”。
符号
表是指在一对相匹配的左右圆括号之间的元素的有序集合。表中的每一项称为表的元 素,表中的元素可以是整数、实数、字符串和符号,也可以是另一个表。 为了处理图形中点的坐标,AutoLISP 对二维和三维点的坐标按如下规则表示: 二维点: 以分别代表 x, y 坐标的两个实数所构成的表 (x,y) 的形式表示, 如: (3.21 7.58)
1.1 AutoLISP 语言的基本知识 1.1.1 AutoLISP 语言的特性
AutoLISP 语言是一种解释型语言,它的特点如下: 1. 解释型语言 编程语言有两种基本类型:解释型和编译型。AutoLISP 属于解释型语言。在解释型语 言中,用户编写的源程序直接由解释器解释并执行。而在编译型的语言中,源代码首先要编 译为一种中间格式(目标文件) ,然后再与所需的库文件链接,生成机器码可执行文件。 AutoCAD 本身是用编译型语言写成的。 解释型语言的的主要优点是在执行这种语言编写的程序之前不需要中间步骤,用户可 以交互、独立于其它部分来试验或验证程序段或程序语句,而不需像编译型语言那样,每当 试验程序时,要全部地编译和链接整个程序。 2. 平台和操作系统独立
(defun C:ff(/) (setq a 2.3 ) (setq b 6.7) (setq c (+ a b ) ) )
1.1.4 求值
求值、表达式及变量
每个 LISP 程序的核心是一个求值器。求值器读入用户的输入行(一个符号表达式) ,对
其进行计算,然后返回计算结果。 AutoLISP 的求值过程如下: (1) 整形数、实型数、字符串对、文件指针和子程序以它们本身的值作为结果。 (2) 符号以它们当前的约束值作为计算结果。 (3) 表根据其第一个元素的类型来进行求值。
整型数是一种不带小数点的数字,它可由 0,1,2……,9,+,-共 12 个字符组成, 例如:123,-76,+322 等。
实型数
实型数是带有小数点的数,它可由 0,1,2……,9,+,-,E,e 共 14 个字符组成。 实数有两种表示方法,即十进制表示法和科学计数表示法。例如: 十进制表示法:12.3,-7.6,+3.22 科学计数表示法:6.1E5(610000) ,-0.12E2(-12) ,-0.45E-2(-0.0045)
AutoLISP 语言的另一个优点是可移植性。 AutoLISP 程序可以在运行于多种支持平台 (如 Windows、DOS、UNIX 和 Macintosh 等)上的 AutoCAD 中执行而与 CPU 或操作系统无关。 3. AutoCAD 的版本独立 AutoLISP 程序除平台和操作系统独立外, AutoLISP 的设计还考虑了向下的兼容。 这样, 任一版本 AutoCAD 编写的 AutoLISP 程序一般不加修改就可以在以后版本的 AutoCAD 中运 行。 4. AutoLISP 与主流编程语言的比较 AutoLISP 与目前使用比较多的编程语言(如 C/C++,BASIC 等)之间有一些明显的差 别。具体可体现在下述几个方面: (1) AutoLISP 与其它大多数语言之间最重要的差别是它用表 (List) 存放数据。 AutoLISP 没有数组、联合、结构及记录,所有复杂的数据集均由表来表示和处理。 (2)AutoLISP 的变量没有明确的类型。LISP 变量的类型是在赋值时动态确定的。 (3)AutoLISP 不需要预先声明变量或函数。 (4)与 C/C++,BASIC 等语言不一样,LISP 没有语句、关键词及运算符。它是函数定 位的语言,其所有运算都是由函数调用完成。 特点 声明 数组 可变变量类型 结构类型 用户类型 解释型 AutoLISP 无 无 有 无 无 是 C/C++ 有 有 无 有 有 否 VB 无 有 有 有 有 否
第七节 AutoLISP 语言及其程序设计
LISP(List Processing) 是一种计算机的表处理语言。LISP 语言是人工智能领域中广泛应 用的一种程序语言。 AutoLISP 语言是一种运行在 AutoCAD 环境下的 LISP 编程语言,或称为 AutoCAD 的 一种嵌入式语言。它采用了与 CommandLISP(一种通用的 LISP 语言版本)相近的语法及习 惯约定,并吸收了 LISP 语言的主要函数,同时增加了针对 AutoCAD 特点的许多功能,如: 可以把 AutoLISP 和 AutoCAD 的绘图命令透明地结合起来,使设计和绘图完全融为一体。 利用 AutoLISP 语言编程可以实现对 AutoCAD 当前图形数据库进行直接访问和修改。 在 LISP 语言中,最基本的数据类型是符号表达式。LISP 语言的特点是程序和数据都采 用符号表达式的形式,即一个 LISP 程序可以把另一个 LISP 程序作为它的数据进行处理。 因此使用 LISP 语言编程十分灵活,看起来是一个一个的函数调用。支持递归定义也是 Auto LISP 语言的重要特性。 AutoLISP 语言是提供给用户的主要二次开发工具之一。 用 AutoLISP 语言编写应用程序, 可以为 AutoCAD 增加新的命令或修改 AutoCAD,以适应用户的特殊需要。AutoCAD 软件 的开发者——AutoDesk 公司许诺,将保证今后 AutoCAD 软件对 AutoLISP 语言的支持。掌 握使用和编制 AutoLISP 应用程序的方法和技术将大大提高用户的工作效率和二次开发水 平,增强 AutoCAD 的灵活性,并将得到长期、稳定的技术支持。
三维点: 以分别代表 x, y, z 坐标的三个实数所构成的表 (x,y,z) 的形式表示, 如: (3.21 7.58 4.68) 。 表的大小用其长度来度量。长度是表中顶层元素的个数。 例如: (setq (setq a a 6) (+ c (/ d 2) ) ) 表的长度为 3 表的长度为 3
ຫໍສະໝຸດ Baidu
表达式
所有 AutoLISP 表达式均为下述形式: (function_name [arguments]……) 左边以左括号“ (”开始,其后由函数名和函数的参数组成,最后以右括号“) ”结束。 每个表达式都有一个返回值。 表达式的参数可以是一个表达式, 它的返回值将被外层表达式 使用。
变量
AutoLISP 的变量有四种类型:整型数、实型数、字符串和表。变量的类型根据所赋的 值自动确定,并一直保持到下一次再赋值为止。 AutoLISP 用 setq 函数给变量赋值,格式如下: (setq 变量名 值) 其中参数“值”可以是一个表达式,执行结果返回变量的值。 例如: (setq x 5) x=5 整型数 (setq x 5.0) x=5.0 实型数 (setq x “Hello”) x=”hello” 字符串 (setq x ‘(3.7 6.5) ) x=(3.7 6.5) 表 当要用变量来响应 AutoCAD 提示时,只需在变量名前加一个“!”即可。 例如: command: (setq p1 ‘(100 100) ) (setq p2 ‘(200 200) ) (command “line” p1 p2) 函数: (defun C:aa1(/) (setq p1 '(100 100)) (setq p2 '(200 200)) (command "line" p1 p2) ) 或者: command:line From point:!p1
字符代码表 代码 \\ \” \e \n \r \t 意义 字符\键 字符”键 ESC 键 换行键 回车键 TAB 键 等价 ASCII 码值 \114 \142 \033 \012 \015 \011
例如:下面的表达式表示在显示提示内容前先进行换行,然后再显示字符串内容。 (prompt “\nEnter filename:”) 或 (prompt “\012Enter filename:”) 二者效果完全相同。
表有两种基本类型:标准表和引用表。标准表是从左括号开始到配对的右括号结束。 表中的第一个元素(0 号元素)必须是一个合法的已存在的 AutoLISP 函数。引用表是在左 括号前加一撇号,表示不对此表作求值处理。 点对表 符号、字符串
表达式
原子 数
整数
实数
文件描述符
当 AutoLISP 打开一个文件时,系统将给该文件赋一个数字标号,在以后要访问该文件 时(读或写文件) ,可利用该文件描述符对指定的文件进行操作。 例如:
子程序和外部子程序
由 AutoLISP 提供的函数称为子程序(内部函数),外部子程序是由 ADSRX 或 ARX 应用 程序定义的子程序。
1.1.3
程序结构
C,VC,VB 等采用“中缀表示法” 例如: X=3.4 AutoLISP 采用的是“前缀表示法“ 例如: (setq x 3.4) 表达式 X=(A+B)*C 在 AutoLISP 中表示为: (setq X (* ( + A B) C) ) (setq a 2.3 )(setq b 6.7)(+ a b )
1.1.2 AutoLISP 语言中的数据类型
AutoLISP 支持下述 10 种数据类型: 整型数 实型数 字符串 符号
表 文件描述符 AutoCAD 实体名 AutoCAD 选择集 内部函数(AutoLISP 子程序) 外部函数(ADS、ARX 函数)
整型数
符号
AutoLISP 中符号用于存储数据,因此“符号”和“变量”这两个词含义相同,可以互 相交换使用。 符号名可以由除下列 6 个字符外的任何可以打印的长度不限的字符序列来组成: “ (” 、 “) “、 “ ,” 、 “ ’” 、 “ ”” 、 “ ;” ,当这 6 个字符中的任一字符在符号名中出现时,将 终止符号名。不允许使用数字符号作为第一个字符。 下列为合法的符号名: ABC,!A,&AB,A3 下列为不合法的符号名: ( A) ,A.B,3A 在 AutoLISP 中符号名的大小写是等价的。LISP 中“约束”是指对一对符号和值,当把 一个值赋给一个符号时,也即把这个符号约束为那个值。 例如: (setq a 6) “!a”将显示 6,表示 a 是一个整数,其值为 6。
字符串
字符串(字符串常数)由一对双引号(”)括起来的字符序列组成。这对双引号是字符 串的定界符。 字符串常数最大长度为 132 个字符,但表示字符串的符号名所约束的值可以是任意长 度,因而可以利用“STRCAT“ (字符串拼接)函数无限制地增加其长度。 字符串中,同一字母的大小写认为是不同的字符,空格是一个有意义的字符。 字符串的长度是指字符串一对双引号之间的字符个数(不包括一对双引号)。如果字符串 的定界符之间无任何字符(即””)称为空串,其长度为零。 字符串中可以包含 ASCII 码中任一字符,通用的表示形式为“\nnn“,nnn 为八进制形 式的 ASCII 码。例如: “\101\102 \103”表示“ABC” ,两者的作用完全相同。由于反斜杠“\” 已作为字符串中的前导转义符,因而当字符串中要使用反斜杠时,必须加转义符,即用双反 斜杠“\\”表示字符串中一个反斜杠“\” ,也可以用反斜杠的 ASCII 码表示(即“\114” ) 。 同样, 由于双引号已作为字符串的定界符使用, 因而字符串中的双引号可以用 “\”” 或 “\042” 表示。对于一些常用的控制字符,其 ASCII 代码见下表。