AutoLISP语言简介
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
name)
指向由AutoCAD图形编辑程序所保持的一个文件的指 针(Pointer),通过这个指针,AutoLISP能够找到该 图元在当前图形数据库中的记录和它在屏幕上的向量。
1.3 AutoLISP语言的程序结构
在AutoLISP语言中,采用了前缀表示法, 即把运算符放在操作数之前,并把运算符 与操作数用圆括号括起来,以表的形式表 示。 例如:(setq x 0.25), (+ 3.4 6.2), (/ 4 5.7) (sin (* 0.5 pi))… 其中 setq、+、sin为运算符(即内部函 数)。
1.2 AutoLISP的数据类型
整型数(INT) 实型数(REAL) 符号(SYM) 字符串(STR) 表(LIST) 文件描述符(FILE) AutoLISP的内部函数(SUBR) 选择集(PICKSET) 图元名(ENAME) 函数分页表(PAGETB)
1.2.1 原子
整型数 如:0,1,2,-25,68,3678 … 2. 实型数 如: 4.3, -2.36, 47.542, 2.5E-6, 1.8E12 … 3. 字符串 如:“ABC” “234” “BDe56” “这是字符串” … “ ” “\nPress Any Key!” 4. 符号原子 如:x1,a24,ab,B*,r-2,u_1 … 注意: ( ) . „ “ ; 这些符号不能作为符号原子!
(defun sqtab (/ a b) (setq a (getreal “\n a=:”)) (setq b (getreal “\n b=:”)) (setq c (sqrt (+ (* a a) (* b (print “c=“) (princ c) (princ) );end
;定义函数 ;等待输入a的值 ;等待输入b的值 b)))) ;计算平方根
1.4 AutoLISP的求值过程
在设计语言中,通常有三种基本类型:
A.
B.
C.
解释型语言—如BASIC语言,逐行解 释、执行; 编译型语言—如C语言、FORTRAN语 言,编译后再执行; 求值型语言—如AutoLISP语言,逐行 读入、计算并返回求值结果。
AutoLISP的求值过程:
1) 整型数、实型数、字符串、文件指针、系统内部函数T 和nil,以其本身作为求值结果; 2) 符号原子以其约束值作为求值结果; 3) 表是根据它的第一个元素的类型来进行求值的,有以下 两种情况: a. 如果表中第一个元素的求值结果为内部函数名,则 表中的剩余元素将作为该函数的参数传送给函数,执 行并返回其函数值; b. 如果表的第一个元素的求值结果为一个表,则该表 被假定为用户定义的函数,且对表中剩余的参数进行 求值,再把求值的结果作为函数的实参进行求值
1.5.2 AutoLISP 程序的运行
1)如果一个AutoLISP程序中没有用户自定义函数,当用load 函数装入该文件时,系统将自动执行程序,并返回最后一个表 达式的求值结果。 例如:在当前目录下建立了一个aa.lsp文件,程序如下: (setq nm (getstring “\n Enter your name:”)) (princ “Your name is”) (princ nm) (princ) 该程序通过command: (load “aa”) 装载后将自动运行如下: Enter your name: jodan Your name is jodan
装载该文件 command: ( load “cad” “Loading fail !!!”) 装载成功将返回:fun2 否则将返回:Loading fail !!!
若要运行其中一个函数,如main, 可在 “ command: ” 命令下 执行: Command: (main) 注:该函数名必须用括号括起来。 若要运行函数fun1 , 则不必带括号,该函数相当于一个 AutoCAD命令。 Command: fun1 若函数带有形参,则在调用时必须以实参取而代之。如: Command: (fun2 4 9)
机械CAD
—VisualLISP编程与应用
第一章 AutoLISP语言简介 第二章 AutoLISP语言的基本函数 第三章 AutoLISP的绘图功能 第四章 函数定义与程序结构 第五章 利用AutoLISP管理图形数据库 第六章 Visual LISP集成化开发环境 第七章 编辑和调试VisualLISP程序 第八章 DCL语言及其应用 第九章 DCL对话框的管理 第十章 维护与编译VisualLISP应用程序 第十一章 机械CAD应用实例
1.5 AutoLISP程序的装入与运行
1.5.1 AutoLISP 程序的装入
基本格式:Command:(load “文件名” “参数”) 1) 不带参数的装载(假设文件名为myname.lsp) Command:(load “c:/lch/myname”) 或 Command:(load “c:\\lch\\myname”) 2)带参数的装载 Command:(load “c:/lch/myname” “loading fail”) 说明:load失败时,通常将返回一个标准出错信息;如果带有 参数,则将返回参数变元的字符串值。此外,load函数跟其它 内部函数一样,可以在程序中任意地调用其它*.lsp文件。
2) 如果一个AutoLISP程序中有一个或多个用户自定义函数,当用 load函数装入该文件时,系统将把所有的用户函数装入内存,并 返回最后一个自定义函数名。
例如:在当前目录下建立一个cad.lsp, 程序中包含3个函数,如下所示: (defun main () 函数体) (defun c:fun1 () 函数体) (defun fun2 (x y) 函数体) ;end
(A . (B . (C . D)))…
(注意:圆点和左右元素之间必须各有一个空格)
联结表。 如:(A . B)
1.2.3 文件描述符
文件描述符是指向AutoLISP所打开文件的一 个标识符,相当于高级语言的文件号。当 AutoLISP的函数需要向文件中写入数据或从 文件中读出数据时,都要用这个文件描述符 来指向文件。文件描述符是AutoLISP的一种 特殊数据类型。 例如:(setq f (open “test.dat” “r”)) 返回:<File “test.dat”> ;此即文件描述符。
1.
1.2.2 表和点对
表—放在一对相匹配的左右括号中的一个或多个元素的有
序集合。有两种基本类型的表: 1.标准表-用于函数调用,如:(setq x 15) (* 4 6 3) … 2.引用表-用于数据处理,如:‘(3 4 7) „(“cad” 56 y)…
点对-由圆点将左右元素分隔开的表,常用于构造
第一章 AutoLISP语言简介
1.1 AutoLISP语言的特点
是嵌在AutoCAD内部并以解释方式运行的编程语言 是函数型语言(Functional Language) 函数和数据的形式一致,都是符号表达式(SymbolicExpression) 执行AutoLISP程序的过程就是对函数求值的过程 可使用递归来定义
1.2.4 AutoLISP的内部函数
用于算术运算(如+、-、*、/)、逻辑运算(如=, >, < ,<=,>=,/=)、赋值(如setq,set)等的函数。
1.2.5 选择集(Selection
sets)
一个或多个实体对象组成的集合。用户可以向选择集 添加或从选择集中删除对象。
1.2.6 图元名(Entity
1.5.3 AutoLISP 程序的自动装入
每次AutoCAD图形编辑程序启动时,如果 “ACAD.LSP”文件存在,AutoLISP将自动装入此文 件。利用这一特性,可以将程序中用到的一些通用函 数定义放在该文件中,这样就能保证每次开始图形编 辑时它们被自动装入和调用。 建立自动装入程序的步骤: 1)在文字编辑下打开“ACAD.LSP”; 2) 添加用户自定义函数在该程序中; 3)重新保存文件。
在程序中使用内部函数的规则:
1)内部函数必须放在表中第一个元素的 位置,且所有括号都必须左右配对; 2)函数运算符与参数之间至少用一个空格 来分开,多个空格和一个空格作用相同; 3)一个表可分几行书写,一行也可以书写 多个表; 4)字符不分大小写,分号后的字符为注释。
AutoLISP程序结构实例:
例如:(+ 4 8 3 1)
(defun addx5 (Hale Waihona Puke Baidu) (+ x 5) );end
返回:16
command:(addx5 8)
4) 5)
返回:13
6)
如果标准表是多层嵌套的,其求值结果总是从最里层的表开始,并依次向 外层求值,最后返回顶层表的结果。 若求值器读入的既不是数字、字符串、文件指针、系统内部函数、符号原 子,也不是一个有效的函数调用的表,则求值器将给出相应的出错提示。 例如:command: (satq a 15) 返回: 错误:空函数。 在任何时候按下Ctrl-C键,都将中断AutoLISP 的求值。
;*********************************************** ;** 这个程序计算 a 和 b 平方和的平方根 ** ;** 用法:输入两个实型数 a ,b的值 ** ;** 该程序计算并打印结果在屏幕上。 ** ;***********************************************