第四章 Auto LISP的绘图功能
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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
4.1.3注意
1 . command 函 数 调 用 中 的 参 数 类 型 , 个 数 与 顺 序 应 与 Auto CAD 命 令 严 格 对 应 。 为 防 止 出 错 , 对 于 初 学 者 建 议 在 编 写 用 command函数的Auto LISP程序之前,先用Auto CAD的命令提示状 态下敲入命令,确定其输入命令、子命令及其数据后,再进行编程 。 2 . command 函 数 在调 用 象 line,pline,layer 等 需 要 不定 个 数 据的 Auto CAD命令时,最后必须按一次空格键,以终止该命令的执行。 即在command参数最后加一个(“”)。 3.command函Hale Waihona Puke Baidu中的参数不能用get族函数。 4.command 函数调用中的命令、子命令及其选项等字符串中不 能含空格,因为空格在字符串中也是有效的。例如: (command “line” “1” “2” “3 4” “”) ;非法命令 (command “line” “1,2” “3,4” “”) ;合法 5. command函数调用script命令时只能作为程序文件或函数定 义中的最后一个表达式,否则程序易于出现不正确的结果,这在开 发CAD应用软件中特别出现要加以注意。
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∧)
4.1 COMMAND函数
4.1.1 调用格式 (command 〈参数〉……) command函数的参数可以是任意的Auto LISP的 S—表达式,但与Auto LISP其它函数不同,它 的参数是没有固定的格式。由于它是Auto LISP 系统提供的与Auto CAD相互通讯的接口,利用 它可以直接执行Auto CAD的命令,所以它的 〈参数〉就是它所调用的Auto CAD命令及其子 命令或命令所需的数据。
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.4求二直线交点坐标的函数 INTERS
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”。
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.1.2 功用及求值结果
command函数的功用是在Auto LISP编程中直接 调用Auto CAD命令,以编制绘图程序。求值器 在遇到 command函数时与对其它 Auto LISP函数 一样,也要对各参数求值。但不同的是它把各 参数的求值结果交给 Auto CAD 去调用相应的 Auto CAD命令,执行完Auto CAD命令后,又返 回到Auto LISP。command函数求值结果总是返 回nil。
p1 图4.2
另外polar函数还可以配合angle,distance等函数使用,使用程序 更简化,例如:已知直线二端点p1、p2,求距p1点为3/7线长的 一点p3(图4.2)。 (setq p3 (polar p1 (angle p1 p2) (* 3.0 (/ (distance p1 p2) 7.0)))) 用polar函数时比较麻烦的是常常要将角度转化成弧度,为简化 起见,可先将一些常用的角度赋给一些简单符号。如: (setq f1 (* 0.017453 30) f2 (* 0.017453 45) f3 (* 0.017453 60) f4 (* 0.017453 90) f5 (* 0.017453 135) f6 (* 0.017453 225) ) 然后,将上面的函数放在绘图环境中,这样使用起来很方便。
在编制绘图程序时,已知一点求另一相关点时,常采用 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.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类函数,这是特别 要注意的,否则将出错。
第四章 Auto LISP的绘图功能
如前所述, Auto LISP 语言体现了人工智能语言 lisp 的特点和Auto CAD强大的图形编辑功能,可以说它是集 设计与绘图为一体的人工智能语言,因此,它是开发实 用工程计算机辅助设计和绘图软件的强有力工具。Auto LISP 具有强大的绘图编辑功能,主要是由于它提供了与 Auto CAD相互通讯的简单透明的接口功能,即提供了一 个 系 统 内 部 函 数 command,AutoLISP 程 序 中 利 用 command 函数可以非常简单而方便地调用几乎全部 Auto CAD命令,以完成所要求的各种工程图形的绘制任务, 本章将重点介绍 command 函数的功能、编程技巧及应用 实例。
例如:用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图形处理函数
Auto LISP编写绘图程序时,常需要一些几何特征点 、距离、角度等数据,如两点距离、两直线交点等。 Auto LISP专门提供了一些解决这类问题的函数,即图 形处理函数。利用这些函数,可使很多复杂问题的求 解简化,充分利用这些函数,可使编程大大简化。
4.2.1求相对角度的函数ANGLE 1.调用格式 (angle 〈点1〉 〈点2〉) 2.功用及求值结果 该函数是求〈点1〉到〈点2〉连成一条直线的正方向与 当前作图平面X轴方向所组成的角度,单位为弧度。求 值结果返回该角度。若〈点〉为三维点,则将其投影到 当前作图平面上计算。例如: (angle /(5.0 1.2) /(2.4 1.2)) 返回值 3.14159 3.注意 〈点1 〉 、〈点2〉顺序不能写错,因它决定直线的方向。 若上例写成:(angle /(2.4 1.2) /(5.0 1.2)) 返回值 0
4.利用暂停符号pause使正在执行的Auto CAD命 令暂停。作法是command函数调用参数表中加 pause符号,该Auto CAD命令即暂停,以等待 用户键入或拖拽输入。例如: (command “circle” /(5.0 4.0) pause) 该式是用command函数调入Auto CAD中的 circle命令。先设置圆心(5.0 4.0),然后暂停 下来让用户在屏幕上拖拽圆的半径,当用户给 出所要的点或输入所需的半径后,在屏幕上便 画出一个圆。