第四章 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
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 . 利 用 暂 停 符 号 pause 使 正 在 执 行 的 Auto CAD 命 令 暂 停 。 作 法 是 command函数调用参数表中加pause符号,该Auto CAD命令即暂停,以等 待用户键入或拖拽输入。例如: (command “circle” /(5.0 4.0) pause) 该式是用command函数调入Auto CAD中的circle命令。先设置圆心 (5.0 4.0),然后暂停下来让用户在屏幕上拖拽圆的半径,当用户给出 所要的点或输入所需的半径后,在屏幕上便画出一个圆。
4.2.4求二直线交点坐标的函数 INTERS 1.调用格式 (inters〈端点1〉〈端点2〉〈端点3〉〈端点4〉[〈任选项〉]) 2.功用及求值结果 该函数求以〈端点1〉,〈端点2〉确定的一条直线和以端点〈端点3 〉,〈端点4〉确定的另一直线的交点,并返回该交点。若不相交, 则返回nil。 〈任选项〉提示是否求延长线交点。若〈任选项〉存在,且其值为 nil,则提示可以求两条线上或其延长线上的交点。若〈任选项〉不存 在或其值为非nil,则提示所求交点只在两条线上,两条线不能延长。 例如: 〈任选项〉不存在或存在但其值为nil,如: (inters /(4.0 4) /(1.0 1.0) /(1.0 2.0) /(3.5 6.0)) (inters /(4.0 4) /(1.0 1.0) /(1.0 2.0) /(3.5 6.0) T) 均返回nil,但同样上面函数若任选项为nil如: (inters /(4.0 4) /(1.0 1.0) /(1.0 2.0) /(3.5 6.0) nil) 则可返回交点(0.782609 0.782609)
4.1.2 功用及求值结果 command函数的功用是在Auto LISP编程中直接调用Auto CAD命令, 以编制绘图程序。求值器在遇到command函数时与对其它Auto LISP函数 一样,也要对各参数求值。但不同的是它把各参数的求值结果交给Auto CAD去调用相应的Auto CAD命令,执行完Auto CAD命令后,又返回到 Auto LISP。command函数求值结果总是返回nil。 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. 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类函数,这是特别要注意的,否则将 出错。 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∧)
在编制绘图程序时,已知一点求另一相关点时,常采用两个函数即List和polar。 由于polar函数在很多情况下,使用起来更简便,应尽可能使用polar函数,例如: 已知p2点及三角形三个边长a,b,c,确定p1、p3点(图4.1)。 用polar函数: p1 b p3 (setq p1 (polar p2 (/ pi 2.0) a)) p3 (polar p1 0 b)) ;注意p2、a、b、c应先赋值 a c 用List函数: (setq p1 (list (car p2) (+ (cadr p2) a)) p2 p3 (polar (+ (car p1) b) (cadr p1)) 图4.1 ) 显然,用polar函数确定相对坐标点是比较简单的。 另外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函数时比较麻烦的是常常要将角度转化成弧度,为简化起见,可先将一 些常用的角度赋给一些简单符号。如: p2 (setq f1 (* 0.017453 30) f2 (* 0.017453 45) f3 (* 0.017453 60) f4 (* 0.017453 90) p3 f5 (* 0.017453 135) f6 (* 0.017453 225) p1 ) 然后,将上面的函数放在绘图环境中,这样使用起来很方便。 图4.2
用该方式的圆或弧线不能是块的一部份11quiquick该方式只能与上述方式一起使用目标捕捉一般搜索落入靶区的所有目标并先取最靠近指定方式的特征点当屏幕上出现多个可见图素时这种搜索很费时若加上qui快捷方式则只要找到符合指定类型的目标的一个点便停止搜索但若遇到int方式时则不管qui方式均进行全面搜索
第四章 Auto LISP的绘图功能
如前所述,Auto LISP语言体现了人工智能语言lisp的特点和 Auto CAD强大的图形编辑功能,可以说它是集设计与绘图为一 体的人工智能语言,因此,它是开发实用工程计算机辅助设计 和绘图软件的强有力工具。Auto LISP具有强大的绘图编辑功能 ,主要是由于它提供了与Auto CAD相互通讯的简单透明的接口 功能,即提供了一个系统内部函数command,Auto LISP程序中 利用command函数可以非常简单而方便地调用几乎全部 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.2.3〈点〉 〈方向角〉 〈距离〉) 2.功用及求值结果 该函数用于求一个点的极坐标,返回在UCS坐标系统中的一个点。其〈 方向角〉是从X轴方向按逆时针方向计算,其单位为弧度。〈点〉不管二维 点还是三维点总是返回二维点。例如: (polar /(7.0 1.0) pi (+ 2.0 3.0) 返回值(2.00000 1.000000) (polar /(4.0 7.0) 0 (/ 4.0 2) 返回值(6.00000 7.000000) (polar /(4.0 7.0) (/ pi 3.0) 4.0) 返回值(6.00000 10.464100)
4.1 COMMAND函数 4.1.1 调用格式 (command 〈参数〉……) command函数的参数可以是任意的Auto LISP的S—表达式,但与Auto LISP其它函数不同,它的参数是没有固定的格式。由于它是Auto LISP系统提 供的与Auto CAD相互通讯的接口,利用它可以直接执行Auto CAD的命令, 所以它的〈参数〉就是它所调用的Auto CAD命令及其子命令或命令所需的数 据。
4.1.3注意 mand函数调用中的参数类型,个数与顺序应与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应用软件中特别出现要加以注意。
例如:用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函数的参数时,作了以下规定: 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”。