已阅读5页,还剩79页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2/83 * 5.1 Visual LISP概述 5.2 AutoLISP基础础 5.3 AutoLISP内部函数 5.4 AutoLISP应应用程序开发实发实 例 3/83 * 5.1 Visual LISP概述 5.1.1 AutoLISP和Visual LISP的关系 1 AutoLISP和Visual LISP的关系 AutoLISP是解释性语言, Visual LISP 可以编译成二 进制文件; Visual LISP (VLISP) 是为加速 AutoLISP 程序开发而 设计的软件工具; VLISP 还提供了工具,用于发布用 AutoLISP 编写的 独立应用程序。 4/83 * 2 Visual LISP具有以下主要新的功能 (1)强大语法检查功能,识别AutoLISP的语法错误和函数 的非法参数输入。 (2)强有力的符号名查找和自动匹配功能。 (3)具有功能完善源程序调试器,提高程序调试灵活性。 (4)具有语言格式化器,规范程序结构提高程序可读性。 (5)支持LISP和DCL语言文本格式的彩色代码显示功能, 提高程序的清晰度。 (6)具有综合检验器和监视跟踪功能 (7)完整的文件编译器,改善程序的运行速度和安全性。 (8)具有项目管理系统,方便地维护多文件的应用程序。 (9)可以进行编译文件的打包,形成一个ARX和VLX模块。 5/83 * 5.1.2 Visual LISP 的启动动 启动VLISP集成开发环境有两种方法: (1)利用菜单启动 使用下拉菜单启动VLISP 打开“工具”下拉菜单,选择“AutoLISP”菜单项。 选择“VLISP编辑器”菜单项,弹出用户界面。 (2) 使用命令关键字:在命令提示处输入如下命令: 命令:Vlisp (回车) 6/83 * (2) 使用命令关键字:命令:vlisp (回车) 菜单 如果点亮菜单上的某一个菜单项,屏幕底部 的 状态栏上将显示相关命令功能的简介。 工具栏 可快速发出 VLISP 命令。 控制台窗口 控制 台窗口是 VLISP 主窗口 中的一个独立的可滚动 窗口。 状态栏 状态栏中将 显示的动态信息。 7/83 * 5.1.3 Visual LISP集成化环环境 1 Visual LISP 菜单项单项 (1)文件菜单项 :创建新的 AutoLISP 程序文件以供编辑 ; (2)编辑 菜单项 :复制和粘贴文本等编辑 操作; (3)搜索菜单项 :查找和替换文本字符串,设置书签 等; (4)视图 菜单项 :查找和显示AutoLISP代码变 量和符号值 ; (5)工程菜单项 :使用工程和生成程序; (6)调试 菜单项 :设置和删除程序断点,检查变 量状态等 ; (7)工具菜单项 :设置VLISP文本格式化和环境选项 等; (8)窗口菜单项 :组织 当前VLISP对话 中显示的窗口等;。 (9)帮助菜单项 :显示在线帮助。 8/83 * 2 工具栏栏 VLISP提供了五个工具栏:标准、视图、搜索、工具和调试, 各自代表不同功能的VLISP命令组。 通过点击工具栏上图标按钮可执行对应的VLISP命令。如果将 鼠标指针指到工具栏某按钮上并停留几秒钟,VLISP 将显示工具 提示信息,以说明该按钮的功能,同时在屏幕底部的状态栏上显 示更详细的描述。 9/83 * 3 控制台窗口 主要功能: (1)对 AutoLISP 表达式进行求值,并显示表达式的返回值; (2)将 AutoLISP 表达式分多行输入; (3)同时对多个表达式求值; (4)在控制台和文本编辑窗口之间复制和传递文本; (5)在控制台中按 TAB 键可以回溯到以前输入的命令; (6)在控制台中按 TAB 键实现对输 入历史的关联搜索; (7)按 ESC 键清除控制台提示符后的文字; (8)设置控制台提示符的显示方式; (9)设置控制台中VLISP命令和选项的显示方式。 10/83 * 4 文本编辑编辑 器 (1)文件语法着色:可把程序不同部分指定各自的颜色; (2)设置文本格式:设置程序代码格式使代码易读; (3)括号匹配:帮助用户检测 括号匹配错误; (4)执行AutoLISP表达式:在不离开文本编辑器的环境 下,测试表达式或几行程序代码的运行结果。 (5)多文件查找:用单个命令就可以在多个文件中查找某 个词或表达式。 (6)AutoLISP代码语法检查:可对AutoLISP代码进行求值 并亮显其语法错误。 11/83 * 5 加载载和运行AutoLISP应应用程序 (1)首先确认包含程序的文本编辑窗口是活动窗口。如果不能肯 定 该窗口是否是活动的,可以在窗口的任何地方单击它,使它成 为活动窗口; (2)从“工具”工具栏中选择 按钮,或从“工具”下拉菜单 中选择“加载编辑 器中的文字”菜单项; (3)在控制台提示下输入括号和函数名并按回车键; (4)在图形窗口或命令行中指定点以响应提示。当用户 响应提示后,重返回到 VLISP窗口; (5)CAD和VLISP的转换可使用“激活 AutoCAD”菜单项或按 按 钮。 12/83 * 6 退出Visual LISP环环境 选择“文件”下拉菜单的“退出”菜单项 或单击 Windows 的“关闭”按钮来关闭程序。 AutoCAD并没有完全卸载VLISP,只把所有的VLISP 窗口关闭 。 如果用户修改某个VLISP 文本编辑窗口中的代码而没有保存这 些修改,在退出系统时,自动询问 是否想保存这些修改。如果想 保存所有的修改,请选择 “是”,若选择“否”将不保存任何修改。 VLISP 保存退出时的状态。在下一次启动时,将自动打开上次 退出时打开的文件和窗口。 13/83 * 5.2 AutoLISP基础础 5.2.1 AutoLISP语语言的特点 1. 特点 AutoLISP语言是一个嵌入在AutoCAD内部的LISP编程语言, 是LISP语言和AutoCAD的有机结合的产物。 语言既具备一般高级语言的基本结构和功能,又具有一般高级 语言所没有的强大的图形功能,是一种比较流行的CAD二次开发 语言工具。 AutoLISP语言是AutoCAD系统提供给用户的第一代开发工具, 利用AutoLISP语言可直接实现增加和修改AutoCAD命令,扩大图 形的编辑功能,直接访问和处理AutoCAD的图形数据库,开发 CAD的应用软件系统。 每个LISP程序的核心是一个求值器,当该求值器读入用户输入 的程序行(一个表达式),对其进行计算,然后返回计算结果。 14/83 * 2. AutoLISP的求值过值过 程 简单的数据,如整数、实数等把它的自身值作为求值结果 。 符号和变量,把它的约束值作为求值结果。 用运算符和数据组成表达式,根据第一个元素的类型进行。 3. AutoLISP编编程语语言程序特点 变量没有明确的类型说明,而是动态确定类型; AutoLISP数据的存放和处理全部使用表结构; AutoLISP语言的程序没有程序语句、关键字和运算符; 程序的层次结构完全用“()”分割符来完成, AutoLISP语言是解释性语言,采用ASCII文件格式,不编译 。 15/83 * 5.2.2 AutoLISP的数据类类型 1 整型数(INT) 整形数是由09数字、+、-字符组成,不允许出现其它字符。 “”号可以省略,“-”必不可少。 例如:+123,435,-190,0都是有效整数。 2 实实型数(REAL) 实型数是带有小数点的数,用双精度的浮点数表示,并且至少 有14位的有效精度。 实型数两种表示方法,即十进制表示法和科学记数法表示法。 当实数绝对值 小于时,必须加前导0,不能以小数点开头, 否则计算机认为点对出错。 例如:有效实数:0.456,-12.4567,+12.567,-0.12364E3等 无效实数:.456,-112.361E2。 16/83 * 3 字符串(STRING) 字符串是由一对双引号(“ “)引起来的字符序列组成的。 双引号是字符串的定界符,不是字符串的内容。 字符串中的大小写字母和空格字符都是有意义的。 字符串最大长度为132个字符,若超过132个,则后面无效。 如果字符串中没有任何字符,则称为空串,空串长度为0。 字符串可以包含ASCII码表中的任何字符,也可采用汉字。 控制字符的特定表示形式: e 表示escape(ESC)码并等价于033 n 表示换行LF码并等价于012 r 表示回车CR码并等价于015 t 表示回车tab 其中e,n,r,t字符必须是小写。 例如:“adfA12”,“c:fff.lsp”都是有效字符串。 17/83 * 4 表型数据(LIST) 表是放在括号内的一个或多个数据元素的有序组合,数据元素 由任意数量的整数、实数、字符串,甚至其它表组成。 例:(12 25 10),(10“a”12.2)、(12“er”12.3 (23 23 14) 表提供了在一个符号中存储大量相关数值的有效方法,是 AutoLISP的基本数据结构。 表有两种类型: 一种是供求值用,表中第一个元素是函数关键字或运算符。 例如:求值表达式:(+ 12 45)。 另一种是作为数据的容器,表中的第一个元素不是函数关键字 或运算符。 例如:表示一个空间点坐标的点表(12.3 34.5 25)。 此外,还有一种特殊的表,该表中没有元素,称之为空表。 18/83 * 5 符号原子(SYMBOL) 符号原子(简称符号)用于存储数据,符号名可以包含除下列 字符以外的任何可以打印的字符: “(”和“)” 括号用作表的定义。 “.” 该字符用作点对结构。 “” 该字符用于求值,是函数QUOTE的简写。 “;” 分号字符用作程序行的注释标志。 “” 字符串的分界符。 例如: C24,C!23,67tf 正确;B.C,(NBA),N;45 错误。 在程序中符号名不区分大小写,其长度不受限制。 符号存储采用结点方式,一个结点只保存位的符号原子, 若超过,将开辟新存储区,原结点则包含指向该存储区的指针, 定义符号长度不超过位。 两个特殊的字符,即T和Nil,其值由系统预先设定,T 的值 为真,而Nil的值为空或不存在。 19/83 * 6 文件描述符(FILE) 文件描述符是AutoLISP赋予其打开文件的字符系列标号,它的 值由系统自动确定,当AutoLISP需要访问一个文件时(读或写), 该文件的标号首先被引用,然后才能进行文件的读写操作。 5 内部函数(SUB) AutoLISP一般通过定义内部函数来实现具体的操作功能,或者 为AutoCAD增加命令, 内部函数的定义是靠AutoLISP提供的函数 “Defun”来定义的。 8 实实体名(ENAME) 实体名是AutoLISP赋予绘图中实体的符号识别标 号。实际上 它是AutoCAD数据库文件内部的一个指针。 9 选择选择 集(PICKSET) 选择集是一个或多个实体的集合。 20/83 * 5.2.3 AutoLISP变变量 1 变变量的名称 除系统的保留字、函数符号和产生歧意的字符之外的所有字符 。系统约定变量名的第一个字符是字母。 保留字:内部函数名、专用字符和AutoCAD 已定义的变量。 专用字符:如小圆点(.)、双引号(“”)、单引号()、圆括号()、 空格,函数符号有、*、等, 产生歧意的字符:如显示操作符(?)、控制符号()等。 21/83 * 2 类类型说说明 变量没有类型说明函数,值类型取决于赋值函数或表达式的返 回值类型。 在程序设计时 ,对于同一个变量可以设定为不同类型的数据类 型,变量的类型根据所赋值的类型自动确定。 例如:(setq num 123) ;变量num的类型是整型 (setq num “aaa”);变量num的类型是字符串 (setq num (12 23 14 0) ;变量num的类型是表 变量可在系统命令行显示,在变量名前加上字符“!”即可。 例如: !num 显示: (12 23 14 0) 22/83 * 3 常用变变量 AutoCAD已经定义了四个常用变量,用户可以直接调用,也 可以用“setq”函数改变其值(建议不要改变)。 四个常用变量如下: (1) PAUSE变量 带有反斜杠()的字符串,用于在命令函数中 等待用户输入。 (2) PI变量 常数的值,该值为 3.1415926。 (3) Nil变量 表示该变量的值不存在。 (4) T变量 常量,用作一个非空值(not nil)。 23/83 * 4.变变量的值值域 AutoLISP的变量分为全局变量和局部变量。 局部变量:是指用户在某一个函数中定义的变量,变量在函 数执行时,值将被保存;函数结束后,变量从内存中自动消失。 局部变量由AutoLISP函数“defun”来定义。 全局变量:用“setq”函数赋值的变量均为全局变量,其值永 久被保存,直到用户退出AutoCAD状态为止。 变量存储:在AutoLISP中,每一个变量将作为一个节点(或 结点) 来保存,一个节点使用个字节以上的内存。 变量清除:为了节约内存,当全局变量不使用时,及时清 除以释放内存。 清除变量的方法是把它们的值设定为Nil。 例如:(setq num nil) ;nil表示清空。 24/83 * 5.2.4 AutoLISP表达式 表达式的形式为一个表型数据,即求值型表数据。 1 表达式格式 表达式是包含有函数关键字,按照AutoLISP规则的字符串。 格式为: (函数名 参数) 用户在编辑表达式时应注意以下几点: 每一个表达式均由一个左括号开始,对应的右括号结束。 内容包括一个函数名和一个函数的参数表,函数名在左,参 数表在右,分隔符是空格。 例如:(+ 2 3),“”是运算符或内部函数,表示2+3。 表达式可嵌套表达式,不论嵌套几层,左右括号总配对。 例如 (/ (+ (- 21 9) (- 12 8) 2) 25/83 * 2 返回值值 表达式返回一个值,该值返回到命令行命令提示处。 AutoCAD命令行的命令提示信息的格式,英文版的命令提示符为 “Command:”,而中文版的命令提示符为“命令:” 。 例如:命令:(* 2 40) 返回 :80 AutoLISP是解释性语言,在命令行中直接输入。 例如: 命令: (* 2 40) 返回 :80 命令: (+ 5 (* 2 40) 返回 :85 3 错误错误 信息 如果用户输入的右括号不配对,则显示下面的提示:n). 表示表达式中缺少个右括号。 例如:命令: (* 2 (- 45 5 命令: 2) 命令: 80 26/83 * 5.3 AutoLISP内部函数 5.3.1基本函数 基本函数分为:数学函数、关系函数、逻辑函数、表处理函 数、字符串处理函数和转换函数等。 5.3.2实实用函数 实用函数分分为几何求值、交互操作、流程控制和文件处理 等五类。 5.3.3实实体操作函数 实体操作函数分为实体名操作和选择及操作函数两类。 5.3.4其它操作函数 在这类函数中,主要包含系统环境相关、显示控制和内存管 理函数,共列14个函数。 27/83 * 5.3.1基本函数 1 数学函数 分为基本运算、三角函数等,共列18个函数。 加运算 (+ num1 num2 ) 函数返回所有num的总和,num可为整数也可为实数,若其中一 个为实数,结果为实数。 例如:(+ 2 4 6) 返回12 (+ 12.5 2) 返回14.5 减运算 (- num1 num2 ) 函数返回num1减去num2、num3、所得的差。 例如:(- 55 40) 返回10 (- 60 40.0) 返回20.0 (- 8) 返回8 28/83 * 乘运算 (* num1 num2 ) 函数返回所有num的乘积。 例如:(* 3 7) 返回21 (* 3 (+ 2 0.5) 返回5.5 除运算 (/ num1 num2 ) 函数以num1除以num2、num3、.,所得的商返回。 例如:(/ 9 2) 返回4 (/ 9.0 2) 返回4.5 增量计算 (1+ num) 函数返回num+1的值。返回值取决num的类型。 例如:(1+ 8) 返回9 (1+ 3.5) 返回4.5 减量计算 (1- num) 此函数返回num-1的值。 例如:(1- 8) 返回7 (1- 5.5) 返回4.5 29/83 * 求绝对值 (abs number) 函数返回number的绝对值 ,其中number可为整数或实数。 例如:(abs 18) 返回18 (abs 12.5) 返回12.500000 (abs 2) 返回2 求余弦 (cos angle) 函数返回angle的余弦值(实数),其中angle的单位为弧度。 例如:(cos 0.0) 返回1.00000 (cos Pi) 返回 1.00000 求正弦 (sin angle) 函数返回angle的正弦值。 例如:(sin 2) 返回0.90929 (cos 2.0) 返回0.90929 30/83 * 求反正切 (atan num1 num2) 函数返回num1/num2的反正切值。其范围在-之间。如果 没有提供num2,函数返回num1的反正切值。如果num2为零,则 返回的符号与num1相同,其值为1.570796,即值为90。 例如:(atan 2.0 30) 返回0.588002 (atan 1.0) 返回0.785398 (atan 2.0 0) 返回1.570796 求余数函数(rem num1 num2 ) 函数返回num1/num2的余数。 例如:(rem 20 4) 返回0 (rem 42 12) 返回6 求最大公约数(gcd num1 num2) 函数返回num1、num2的最大公约数,其参数必须为正整数。 例如:(gcd 81 57) 返回3 (gcd 17 31) 返回1 31/83 * 求最大值函数(max num1 num2 ) 函数返回所给数的最大值。 例如:(max 12 12.3 4) 返回12.30000 求最小值函数(min num1 num2 ) 函数返回所给数的最小值。 例如:(min 14 11.3 4 -2) 返回-2 乘方计算函数(expt num power) 函数返回num的power次方值,其中num为底数,为power幂 , 如果num和power为整数,返回值也为整数,否则返回实数。 例如:(expt 3 3) 返回27 (expt 3 2) 返回0 (expt 3.0 2) 返回0.11111 32/83 * 求e的任意次方函数(exp num) 函数返回e的num次方值,返回值为实 数。 例如:(exp 1.0) 返回2.718282(即e1) 求对数函数(log num) 函数返回num的自然对数,返回值为实 数。 例如:(log 3) 返回1.098160 求平方根函数(sqrt num) 函数返回num的平方根,返回值为实 数。 例如:(sqrt 25) 返回5.0000 (sqrt 25.0) 返回5.0000 33/83 * 2 关系函数 关系函数主要用于比较表达式之间的关系,共列6个函数。 该类函数有六个,函数名分别为=、/=、和=。在这些 函数中nstr可以为整数,可以为实数,也可以为字符串。当nstr为 字符串时,则按ASCII码的大小进行比较。 等于函数(= nstr1 nstr2) 所有的nstr均相等时,返回,否则返回Nil。 不等于函数(/= nstr1 nstr2) 若nstr1不等于nstr2,返回,否则返回Nil。 小于函数( nstr1 nstr2) 若nstr1大于nstr2时,返回,否则返回Nil。 大于等于函数(= nstr1 nstr2) 若nstr1大于或等于nstr2时,返回,否则返回Nil。 例如:(= 8 8.0) 返回T (= 5.0 5.1 ) 返回Nil (/= 4 7.7) 返回T (= 18 7.0) 返回T ( 3 2) ( 3 4) ( 5 6) ( 3 11) (0,则num1向左移位,否则num1向右移。 例如:(lsh 2 1) 返回 4 (lsh 2 -1) 返回 1 按位逻辑“非”函数( int) 函数返回每一位的NOT(即补码)运算,此参数限定为整数。 例如:( 4) 返回 5 ( -6) 返回5 38/83 * 4 表处理函数 表处理函数主要是对表数据处理或返回数据是表数据,是lisp 函数中使用频度比较高的函数之一,共列15个函数。 构建表函数(list 表达式) 函数将任意数目表达式串连成表,并返回该表。 例如:(list 2 10 21) 返回 (2 10 21) (list (20 12) 123) 返回 (20 12) 123) 连接表函数(append 表1 表2 ) 函数将所有的表连在一起,返回它们组成的新表。 例如:(append (a b) (s d) 返回 (a b s d) (append (a) (c)(t i) 返回(a) (c) t i) 向表首添加新元素函数(cons 新元素 表) 函数把新元素加入到表的开头以构成新表,并返回新表。 在此函数中,若用原子替代表,则构造一个点对并返回。 例如:(cons a (b c d) 返回 (a b c d) (cons a 2) 返回 (a.2) 39/83 * 倒置表函数(reverse 表) 函数返回表被倒置后的新表。 例如:(reverse (123 34 32) 返回 (32 34 123) 取表中第一个元素函数(car 表) 函数返回表中的第一个元素。 如果是空表,返回Nil。 例如:(car (a e d f) 返回 a (cad (a) b v) 返回(a) 取子表函数(cdr 表) 函数将返回一个表,是原表中除第一个元素外的所有元素。 若表为空时,函数将返回Nil。 例如:(cdr (a b c) a e) 返回 (a e) (cdr 12 3 45 33) 返回 (3 45 33) 40/83 * AutoLISP将提供最多四层串接的car及cdr函数。 下面函数是有效的: caaar cadaar caaadr caaar caadar caadr caaddr csaar caddar cadddr caddr cdaddr cdadr cddadr cdaar cadadr cdadr cadr cddar cdddar cdddr cdaar caar cadr cddr 在AutoLISP中,cadr经常用来获取一个2D点或3D点的Y坐标 值(Y坐标值是指二维或三维数据点表中的第2个元素)。 同理,caddr也能被用来获取一个3D点的Z坐标值。例如: 若 (setq pt2 (5.5 10.0) pt3 (5.5 10.0 12) 则 (car pt2) 返回 5.5 (cadr pt2) 返回 10.0 (car pt3) 返回 5.5 (cadr pt3) 返回 10.0 (caddr pt2) 返回 12 41/83 * 取表中第n个元素函数(nth n 表) 函数返回表中第n个元素,其中n是元素的序号(0表示第一个元 素)。若n大于表中元素的数目时,返回nil。 例如:(nth 3 (a b c d e) 返回 d (nth 4 (b c d e) 返回Nil 取表中最后一个元素函数(last 表) 函数将返回表中最后一个元素。表不能为空。 例如:(last (1 2 3 4 5 6) 返回 6 测量表的长度函数(length 表) 函数返回表内元素的数目(整型数)。 例如:(length (a b c d) 返回4 (lengih (a b (c d) 返回 3 42/83 * 表元素替换函数(subst 新项 旧项 表) 函数在表中查找旧项,用新项代替旧项,返回替代后的表。 若在表中没有发现旧项,则把原表返回。 例如:(subst 100 123 (list 200 101 123 234) 返回 (200 101 100 234) assoc函数(assoc 关键字 联合表) 函数在联合表中搜寻关键字,返回关键字对应的元素值。 若搜索不到关键字返回Nil。联合表是点对表,如(10.2) 例如:(setq a1(name box)(width 3)(size 4.7263)(depth 5) 则: (assoc size a1) 返回 (size 4.7263) (assoc weighi al) 返回 ni1 foreach函数(foreach 符号名 表 表达式) 将表中元素按顺序分别赋给 符号名,再计算表达式的值,返 回最后一次循环时循环体中的最后一个表达式的计算结果。 例如:(foreach n (a b c) (print n); 执行结果: (print a) (print b) (print c) 43/83 * mapcar函数(mapcar 函数名 list1listn) 函数把list1listn作为函数的参数,返回结果。 例如:(setq a 10 b 20 c 30) (mapcar 1+ (list a b c) 返回 (11 21 31) 表数据测试函数(listp item) 若item为表时,函数返回T,否则返回Nil。 例如:(listp (a b c) 返回 T (listp 4.3 43) 返回 Nil member函数(member 表达式 表) 函数在表中寻找表达式。返回表达式在表中第一次出现位置开 始到最后所剩所有元素所组成表。若找不到表达式,返回nil。 例如:(member e (a b e d f) 返回 (e d f) (member m (a b c d e) 返回 nil 44/83 * 5 字符串函数 该函数用于对字符串数据进行处理,共列7个函数。 ASCII码转换 函数 (ASCII 字符串(或字符) 函数返回字符串中第一个字符的ASCII码值,值为整型量。 例如:(ASCII “L”) 返回 76 (ASCII “AutoCAD”) 返回 65 字符串转换函数 (Chr int) 该函数将int代表的ASCII码转换 成字符。 例如:(chr 66) 返回 “B” (che 65) 返回 “A” 字符串连接函数 (strcat 字符串1 字符串1 ) 该函数将所有的字符串连接在一起,返回连接的结果。 例如:(strcat “abcd”“13d”) 返回 “abcd13d” (strcat “acd”“13”“AB”) 返回 “acd13AB” 45/83 * 求字符串长度函数 (strlen 字符串) 函数返回字符串的长度。 例如:(strcat “abcd”) 返回 4, (strcat “”)返回 0 求子字符串函数 (substr 字符串 起点 长度) 函数返回字符串一个子串,从字符串中“起点”位开始,取“长 度”个字符,若省略,返回“起点”后的所有字符。 例如:(substr“ab1cd” 2 2) 返回 “b1” 字符串大小写转换函数 (strcass 字符串 方式) 函数根据“方式”的值把字符串进行转换,返回结果。 若“方式”为非空,换成小写字母,否则换成大写字母。 例如:(strcass “AutoCAD” T) 返回 “autocad” (strcass “Autolisp”) 返回 “AUTOLISP” 46/83 * 6 转换转换 函数 该类函数主要实现lisp数据的相互转换、单位制转换和坐标 系转换,共列9个函数。 (1) 实型变整型函数 (fix mumber) 函数将number取整,即舍去小数部分,返回整型数。 例如:(fix 5.4) 返回 5 (fix 7.9) 返回 7 (2) 整型变实型函数(float number) 函数返回number的实型数值。 例如:(float 3) 返回 3.0 (float 56) 返回 56.0 (3) 整型变字符串函数(itoa int) 函数将整型数转换成字符串并返回。 例如:(itoa 33) 返回“33” (itoa -45) 返回“-45” (4) 字符串变整型数函数(atoi str) 函数将字符串转换成整型数并返回。 例如:(atoi “123”) 返回123 (atoi “-67”) 返回-67 47/83 * (5) 字符串变实型数函数(atof str) 函数将字符串转换成实型数并返回。 例如:(atof“12.4”) 返回12.4 (atof“-3.2”) 返回-3.2 (6) 实型数变字符串函数(rtos number 模式 精度) 函数把实型数number转换成字符串返回。模式和精度为可选参 数(整数)。精度表示小数点的位数,模式的值及含义如下表所示: 模式值 1 2 3 4 5 形 式科学计数法十 进 制工 程 制建 筑 制任意分数 例如:(rtos 24.5 1 3) 返回”2.450E+1” (rtos 24.5 2 2) 返回”24.50” 48/83 * (7) 角度单位制转换函数 (angtos ang 格式 精度) 函数将用弧度表示的角度值按指定的格式转换成度。其中格式 和精度均为整型数,精度表示小数点的位数。 格式值01 234 形 式十进制(度)度/分/秒梯 度弧 度测地单位 (8) 坐标系转换函数(trans 点 原坐标系 新坐标系) 函数将一点坐标从一种坐标系统转换 到另一种坐标系统中的 坐标值。两个坐标系均用代码表示。 例如:(angtos 0.785398 0 4) 返回 “45.0000“ (angtos -0.785398 0 4) 返回 “315.0000“ 代码值0 1 23 坐标系统通用系统 (WCS) 用户系统 (UCS) 图纸 空间 (DCS) 图纸 空间 (DCS) 49/83 * 5.3.2实实用函数 1 几何求值值函数 该类函数用于对几何数据进行测量和计算,共列5个函数。 求两点距离(distance pt1 pt2) 函数返回两点pt1和pt2之间的距离,点是2D点也可以是3D点。 例如:(distance (1.0 2.5 3.0)(7.7 2.5 3.0) 返回 6.7 求目标点表函数(polar 点 角度 距离) 函数依据点、角、距方式求出一个点坐标,返回该点的点表。 角度单位弧度,从X轴正方向量,逆时针为 正,顺时针为负 。 例如:(polar (l 2 3) 0.785398 20) 返回 (2.0 2.0 3.5) 求方位角函数(angle pt1 pt2) 函数返回两点pt1和pt2射线与X轴正方向的角度,单位弧度。 如:(angle (list 5.0 1.33) (list 2.4 1.33) 返回3.1415 (angle (5.0 1.33)(2.4 1.33) 返回1.5708 50/83 * 求表达式计算结果函数(eval expr) 函数返回expr的计算结果。Expr可为AutoLISP的任意表达式。 例如:(eval (* 10 4.0 2) 返回 80.0 (eva1 (abs l4) 返回 14 求两线段交点函数(inters pt1 pt2 pt3 pt4 方式) 函数计算两直线的交点坐标,返回交点点表。 pt1和pt2、pt3和pt4为两条线段端点。“方式”为可选参数, 若“方式”为T,交点在两线 段上时,返回交点点表,交点 不在两线段上时,返回Nil。 若“方式”Nil,允许交点在 延长线上,返回交点。 若交点不存在,返回Nil。 51/83 * 2 交互输输入函数 整型数输入函数(getint 提示符) 函数等待输入一个整型数并返回该整型数。 例如:(setq num (getint) (setq num (getint ”n请键入数字:”);n表示回车 实型数输入函数(getreal 提示符) 函数等待输入一实型数返回该实型数,其它同getint函数。 点输入函数(getpoint 参考点 提示符) 函数等待输入一个点并返回该点的点表。参考点是个点表。 例如:(setq pt (getpoint “n输入点:”) (setq pt(getpoint (list 10 20 0)“n输入点:”) 52/83 * 角度输入函数(getangle 参考点 提示符) 函数等待输入角度(用度表示),返回以弧度表示的角度。 例如:(setq ang (getangle “n哪个方向?”) (setq ang (getangle(1.0 3.5 0)“n哪个方向”) 距离输入函数(getdist 参考点 提示符) 函数等待用户键入距离。可直接用键盘输 入距离值,也可以 输入一个点,把参考点到输入点的距离值作为输入值,函数返回 实型数表示距离。 例如:(setq dist (getdist) (setq dist (getdist “n输入距离:”) (setq dist (getdist (1.0 3.0) ”n另一点:”) 矩形对角点输入函数(getcorner 基点 提示符) 函数返回在目前UCS中的一点,该点是基点的矩形对角点。 函数在执行时由此基准点到屏幕上移动的十字光标间画出一矩形 。 53/83 * 输入控制函数(initget 位值 关键字字符) 控制输入函数,该函数为紧随其后的get类函数建立各种可选 择项,它总是返回Nil。位值的定义说明如下表。 位 值 控 制 含 义 1(位0) 不允许空输入(直接回车或空格键) 2(位1) 不接受零值 4(位2) 不接受负值 8(位3) 不检查 屏幕限定范围允许交互输入 16(位4) 返回三维点不是二维点 32(位5) 用虚线(或其它加亮线)画拖动线 或矩形框 64(位6) 在计算两点距离时,忽略三维点Z坐标(仅用于getdist) 128(位7) 在尊重其他控制的前提下,允许任意输入。 例如:(initget (+ 1 2 4) (setq age (getint “n输入你的年龄:”) 54/83 * 关键字输入函数(getkword prompt) 函数要求输入一个关键字并返回设定的关键字。在调用该函数 之前,必须先用initget函数设定关键字的字符表。 例如:(initget (+ 1 2 4) “Yes No nIl”) (setq yn (getkword “n输入关键字:” 字符串输入函数(getstring cr 提示符) 函数等待输入字符串,同时返回此字符串,字符串的最大长度 为32个字符。如果cr存在,允许输入字符串中带有空格,终止字 符串输入只能用回车。如果cr不存在,不允许输入字符串中带有空 格,终止字符串的输入可以用回车也可以用空格键。 例如:(setq s (getstring “n输入你的单位:”) 用户输入:清华大学 返回 “清华大学” (setq s (getstring T “n输入你的姓名:”) 用户输入:王大中回车结束, 返回 “王大中” 55/83 * 关键字输入函数(getkword prompt) 函数要求输入一个关键字并返回设定的关键字。在调用该函数 之前,必须先用initget函数设定关键字的字符表。 例如:(initget (+ 1 2 4) “Yes No nIl”) (setq yn (getkword “n输入关键字:” 字符串输入函数(getstring cr 提示符) 函数等待输入字符串,同时返回此字符串,字符串的最大长度为 32个字符。如果cr存在,允许输入字符串中带有空格,终止字符串 输入只能用回车。如果cr不存在,不允许输入字符串中带有空格, 终止字符串的输入可以用回车也可以用空格键。 例如:(setq s (getstring “n输入你的单位:”) 用户输入:河南理工大学 返回 “河南理工大学” (setq s (getstring T “n输入你的姓名:”) 用户输入:王大中回车结束) 返回 “王大中” 56/83 * 3 流程控制函数 条件控制函数(if 条件式 表达式1 表达式2) 若条件式为T,执行表达式1,否则执行表达式2,返回相应表达 式的值。 例如:(if (= 3 6)”Yes!”“No!”) 返回 “No!” (if (= 4 (+ 3 1)”Yes!”“No!”) 返回 ”Yes!” 分支控制函数(cond (条件1 表达式1) (条件2 表达式2) 函数以任何数值的表为参数,由表的第一项开始,直到有一项 的值不为Nil为止。若条件为真,执行其后的表达式,并返回值。 例如:(setq s “n”) (cond (or (= s “y”) (= s “Y”) (setq a 1) (or (= s “n”) (= s “N”) (setq a 0) (T (setq a NIL) ) 执行结果:0 57/83 * 重复执行函数(repeat n 表达式) 函数将表达式执行n次,返回最后表达式的值。 例如:(setq a 4 b 12) (repeat 4 (setq (+ a l0) b (- b 2) ;返回4 求多个表达式值函数(progn 表达式) 函数顺次计算每一个表达式,返回最后表达式的值。 例如:(setq a 100 b 100) (if (= a b) (progn (setq a (+ a 10) (setq b (- b 10) 循环控制函数(while 条件式 表达式 ) 函数先判别条件式,若表达式成立,顺次执行表达式。然后再 判别条件式,若成立继续执 行,直到表达式为nil时结束。 例如:(setq I 0 a 1) (while (, 选择集中第2个实体名给e 由于图元的名称由系统运行时产生, 故在不同的系统下名称会有一定的差异。 75/83 * 将新实体加入选择集中(ssadd 实体名 选择集) 函数将“实体名”实体加入到选择集中,返回新选择集, 若实体存在,返回Nil。 若在图5-5中,再用line画一条直线段并加入到选择集ss中, lisp程序代码如下: (command “line“ pt1 pt2 “) ;设pt1和pt2已经获得 (setq e (entlast) ;取最后一个实体并赋给变 量e (setq ss (ssadd e ss) ;把实体e加入到选择集ss中 从选择集中删除实体(ssdel 实体名 选择集) 函数从选择集中删除“实体名”实体,返回新选择集。若实体名不 存在,则Nil。 (setq s1 (ssdel e s) ;从s中删除e的选择集 (sslength s1) ;返回2,说明s1中只有两个实体。 76/83 * 5.4 应应用程序开发实发实 例 5.4.1 LISP程序的编辑编辑 和调调用 AutoLISP是解释程序; 用户所建立的AutoLISP应用程序是文本文件; 文件信息和图形编辑状态下交互输入的信息完全相同; AutoLISP应用程序文件的扩展名为“*.lsp”。 1 LISP程序的编辑编辑 分三步: (1) 进入文本编辑状态; (2) 在DOS文本模式下键入文件内容; (3) 仔细检查 侯存盘。 77/83 * (1) 进入文本编辑状态 在命令行键入“EDIT”,然后回车; 系统显示“要编辑的文件:”,键入“XX.LSP”,回车。 系统切换到DOS环境下,弹出文本编辑器。 (2) 在DOS文本模式下键入如下文本文件: (defun C:diban( / ss pt1 pt2 pt3 pt4 ww ll e) (setq ss (getvar “OSMODE“) (setvar “OSMODE“ 0) (setq pt1(getpoint “n定位点:“) (setq ww (getint “n矩形的宽度:“) (setq ll (getint “n矩形的长度:“) (setq pt2 (list (car pt1) (+ ww (cadr pt1) (setq pt3 (list (+ ll (car pt2) (cadr pt2) (setq pt4 (list (+ ll (car pt1) (cadr pt1) (command “pline“ pt1 pt2 pt3 pt4 “c“) (setq e (entlast) (command “move“ e “ pt1 pause) (setvar “OSMODE“ ss) ) (3) 仔细检查错误 ,保存文件。 78/83 * 2 LISP程序的装入 LISP文件的装入使用“LOAD”函数。 函数只有一个变量,表示要装入的AutoLISP文件的全称。 例如要把M盘ycx子目录下的XX.LSP文件装入,表达式为: (load“M:ycxXX”) 如果装入文件在系统的搜索目录下,只需要指明文件名。 若XX.LSP在搜索的子目录中,表达式可以写成: (load “XX”) 当文件装入成功,就把文件最后定义的函数名称返回。 3 LISP程序的运行 文件装入后,所定义函数在当前绘图操作环境中任何时候可运行 或调用。 79/83 * 5.4.2 增加AutoLISP函数 例:修改polar函数 原polar函数是用获取一个目标点的点表,采用方式是点、角、距 方式,其中角度必须以弧度的形式给出。 把该函数进行修改,角度采用度的形式,函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- AI赋能自动驾驶模拟训练:技术原理与工程落地实践
- 2026年中国茶产业劳动力老龄化问题对策
- 2026年外贸企业样品管理流程优化与成本控制
- 2026年医院公共卫生科工作职责
- 2026年骨折术后(出院)康复锻炼与健康指导
- 2026年管理会计综合实训项目教程
- 2026年基于用户社交关系的裂变营销设计
- 2026年乡村大龄劳动力(4050)灵活就业培训
- 2026年运维值班与交接班管理制度
- 2026年医院预算绩效管理审计评价
- 2023年十堰市郧阳区事业单位真题及答案
- 性传播疾病病症处理
- 岗位系数说明正式公示版
- 中国国防建设
- 小说《摩登情书》全文
- 第四种检查器介绍
- GB/T 33610.1-2019纺织品消臭性能的测定第1部分:通则
- 马克思主义基本原理第一章案例
- 07.2五年级下册道德与法治第7课《不甘屈辱 奋勇抗争》PPT教学课件(第二课时)
- 马克思主义基本原理概论:5.3 资本主义的历史地位和发展趋势
- 了不起的狐狸爸爸-全文打印
评论
0/150
提交评论