当前位置:
文档之家› 第四章 Auto LISP的绘图功能
第四章 Auto LISP的绘图功能
例如:用command函数调用Auto CAD命令画一直线, 可写成 (command “line” /(5.0 6.0) /(10.0 15.0) ””) 它相当于在Auto CAD中键入 command:line From point:5.0,6.0 To point:10.0,15.0 To point:〈回车〉 由此可见,command函数的参数格式取决于所执行的 Auto CAD命令及其所需的数据类型。但是由于command 是Auto LISP的内部函数,其参数必须符合Auto LISP的 数据类型,即采用S—表达式形式。为此,将Auto CAD 的命令及其子命令所要求的数据作为command函数的参 数时,作了以下规定:
4.2.4求二直线交点坐标的函数 INTERS
4.利用暂停符号pause使正在执行的Auto CAD命 令暂停。作法是command函数调用参数表中加 pause符号,该Auto CAD命令即暂停,以等待 用户键入或拖拽输入。例如: (command “circle” /(5.0 4.0) pause) 该式是用command函数调入Auto CAD中的 circle命令。先设置圆心(5.0 4.0),然后暂停 下来让用户在屏幕上拖拽圆的半径,当用户给 出所要的点或输入所需的半径后,在屏幕上便 画出一个圆。
1. Auto CAD的命令、子命令和选择项要用字符串 表示,大小写均可。 例如: (command “DIM” “hor” /(2.0 3.0) /(5.0 3.0) /(5.0 5.0) 8) “DIM”为命令,“hor”为子命令,均用字符串 表示。 2.数字常量(整型数或实型数)可写成本身亦可 写成字符串形式。如上例中数字8亦可写成“8”。 3.点常量有两种表示法:一是Auto LISP表的形 式,如上例中/(2.0 3.0),/(5.0 3.0)。二是用字符 串表示,字符串中数据要符合Auto CAD的规定。 如写成“2.0,3.0”,“5.0,10.0”。
在编制绘图程序时,已知一点求另一相关点时,常采用 p1 b p3 两个函数即 List和polar。由于polar函数在很多情况下,使 a 用起来更简便,应尽可能使用polar函数,例如: c 已知p2点及三角形三个边长a,b,c,确定p1p2 、p3点,用 图4.1 polar函数: (setq p1 (polar p2 (/ pi 2.0) a)) p3 (polar p1 0 b)) ;注意p2、a、b、c应先赋值 用List函数: (setq p1 (list (car p2) (+ (cadr p2) a)) p2 p3 (polar (+ (car p1) b) (cadr p1)) ) p3 显然,用polar函数确定相对坐标点是比较简单的。
4.2.2求两点间距离的函数DISTANCE
1.调用格式
(distance 〈点1〉 〈点2〉) 2.功用及求值结果 该函数的功用是求〈点 1 〉和〈点 2 〉的距离,并返 回该函数值。同样,若为三 (distance /(5.0 1.2) /(2.4 1.2)) 返回值 2.600000 (distance /(5.0 1.2 3.0) /(2.4 1.2 5.1)) 返回值 4.045990
6. command可以不带任何参数,即(command),
它等效于在键盘上按CTRL—C键,即取消了Auto CAD 命令。 例如: (command “dim” “hor” /(4 4) /(6 4) /(5 4) 10) (command) 相当于取消DIM命令并返回到命令提示。 (command)也可以用“∧”代替,如上式可写成: (command “dim” “hor” /(4 4) /(6 4) /(5 4) 10∧)
第四章 Auto LISP的绘图功能
如前所述, Auto LISP 语言体现了人工智能语言 lisp 的特点和Auto CAD强大的图形编辑功能,可以说它是集 设计与绘图为一体的人工智能语言,因此,它是开发实 用工程计算机辅助设计和绘图软件的强有力工具。Auto LISP 具有强大的绘图编辑功能,主要是由于它提供了与 Auto CAD相互通讯的简单透明的接口功能,即提供了一 个 系 统 内 部 函 数 command,AutoLISP 程 序 中 利 用 command 函数可以非常简单而方便地调用几乎全部 Auto CAD命令,以完成所要求的各种工程图形的绘制任务, 本章将重点介绍 command 函数的功能、编程技巧及应用 实例。
3.一条Auto CAD命令,可以由多个command函数完成。例如: (command “circle”) (command /(5.0 4.0) (command 3) 在这种情况下可在其中间插入其它函数,如前所述command函数是不 允许用get类函数作参数的。如(command “circle” (getpoint) (getreal))就 是错误的。但我们可以在多个 command 函数调用中间,插进 get 类函数。 例如; (command “circle”) (setq p1 (getpoint “\n 圆心点”)) (command p1) (setq r (getreal “\n 半径”)) (command r)
4.2.3求极坐标函数POLAR
1.调用格式
(polar 〈点〉 〈方向角〉 〈距离〉) 2.功用及求值结果
该函数用于求一个点的极坐标,返回在UCS坐标系统中 的一个点。其〈方向角〉是从X轴方向按逆时针方向计 算,其单位为弧度。〈点〉不管二维点还是三维点总是 返回二维点。
例如: (polar /(7.0 1.0) pi (+ 2.0 3.0) (polar /(4.0 7.0) 0 (/ 4.0 2) (polar /(4.0 7.0) (/ pi 3.0) 4.0) 返回值(2.00000 1.000000) 返回值(6.00000 7.000000) 返回值(6.00000 10.464100)
4. command调用参数中的空串(””)等效于键盘上 按一次空格键。如上例中画直线的程序最后要求以终止该 命令的执行,即用(“”)。 空串亦可代表缺省值。例如: (command “text” “2.0,3.0 ” “” “” “example”) 标准表中二空串表示写文本时,其高度和旋转角采用 缺省值。 5. command调用的参数,如数字、点常量亦可为Auto LISP 的其它表达式 ,但其求值结果的数据类型 ,要与 Auto CAD命令要求的数据类型一致。例如: (setq p1 (list 30.0 20.0) (command “line” p1 (list (+ (car p1) 50.0) (cadr p1)) ””) 但command函数的参数不能用get类函数,这是特别 要注意的,否则将出错。
4.1.3注意
1 . command 函 数 调 用 中 的 参 数 类 型 , 个 数 与 顺 序 应 与 Auto CAD 命 令 严 格 对 应 。 为 防 止 出 错 , 对 于 初 学 者 建 议 在 编 写 用 command函数的Auto LISP程序之前,先用Auto CAD的命令提示状 态下敲入命令,确定其输入命令、子命令及其数据后,再进行编程 。 2 . command 函 数 在调 用 象 line,pline,layer 等 需 要 不定 个 数 据的 Auto CAD命令时,最后必须按一次空格键,以终止该命令的执行。 即在command参数最后加一个(“”)。 mand函数中的参数不能用get族函数。 mand 函数调用中的命令、子命令及其选项等字符串中不 能含空格,因为空格在字符串中也是有效的。例如: (command “line” “1” “2” “3 4” “”) ;非法命令 (command “line” “1,2” “3,4” “”) ;合法 5. command函数调用script命令时只能作为程序文件或函数定 义中的最后一个表达式,否则程序易于出现不正确的结果,这在开 发CAD应用软件中特别出现要加以注意。
4.1.2 功用及求值结果
command函数的功用是在Auto LISP编程中直接 调用Auto CAD命令,以编制绘图程序。求值器 在遇到 command函数时与对其它 Auto LISP函数 一样,也要对各参数求值。但不同的是它把各 参数的求值结果交给 Auto CAD 去调用相应的 Auto CAD命令,执行完Auto CAD命令后,又返 回到Auto LISP。command函数求值结果总是返 回nil。
4.1 COMMAND函数
4.1.1 调用格式 (command 〈参数〉……) command函数的参数可以是任意的Auto LISP的 S—表达式,但与Auto LISP其它函数不同,它 的参数是没有固定的格式。由于它是Auto LISP 系统提供的与Auto CAD相互通讯的接口,利用 它可以直接执行Auto CAD的命令,所以它的 〈参数〉就是它所调用的Auto CAD命令及其子 命令或命令所需的数据。
command函数的实际应用有如下几种情况: 1.用一个command的实际应用是在执行一条Auto CAD命 令。这是最常用的,例如: (setq p1 /(1.2 1.2) p2 /(5.8 12.4)) (command “line” p1 p2 ””) (command “circle” /(5.0 4.0) 3) (command “text” /(4.0 0.4) “3.5” “0.0” “ABC”) 2.用一个command函数执行多条Auto CAD命令,这也是 正确的。 例如: (command “line” p1 p2 ”” “circle” /(5.0 4.0) 3 “text” /(4.0 0.4) “3.5” “0.0” “ABC” )
4.2图形处理函数
Auto LISP编写绘图程序时,常需要一些几何特征点 、距离、角度等数据,如两点距离、两直线交点等。 Auto LISP专门提供了一些解决这类问题的函数,即图 形处理函数。利用这些函数,可使很多复杂问题的求 解简化,充分利用这些函数,可使编程大大简化。