第四章AutoLISP的绘图功能课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第四章AutoLISP的绘图功能课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 AutoLISP 绘图 功能 课件
- 资源描述:
-
1、第四章第四章 Auto LISP的绘图功能的绘图功能 如前所述,Auto LISP语言体现了人工智能语言lisp的特点和Auto CAD强大的图形编辑功能,可以说它是集设计与绘图为一体的人工智能语言,因此,它是开发实用工程计算机辅助设计和绘图软件的强有力工具。Auto LISP具有强大的绘图编辑功能,主要是由于它提供了与Auto CAD相互通讯的简单透明的接口功能接口功能,即提供了一个系统内部函数内部函数command,AutoLISP程序中利用command函数可以非常简单而方便地调用几乎全部Auto CAD命令,以完成所要求的各种工程图形的绘制任务,本章将重点介绍command函数的功能、
2、编程技巧及应用实例。4.1.1 调用格式调用格式 (command 参数) command函数的参数可以是任意的Auto LISP的S表达式,但与Auto LISP其它函数不同,它的参数是没有固定的格式。由于它是Auto LISP系统提供的与Auto CAD相互通讯的接口,利用它可以直接执行Auto CAD的命令,所以它的参数就是它所调用的Auto CAD命令及其子命令或命令所需的数据。 例如:用command函数调用Auto CAD命令画一直线,可写成 (command “line” /(5.0 6.0) /(10.0 15.0) ”) 它相当于在Auto CAD中键入 command:li
3、ne 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” /(
4、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”。 4. command调用参数中的空串(调用参数中的空串(”
5、)等效于键盘上)等效于键盘上按一次空格键。按一次空格键。如上例中画直线的程序最后要求以终止该命令的执行,即用(“”)。 空串亦可代表缺省值。例如: (command “text” “2.0,3.0 ” “” “” “example”) 标准表中二空串表示写文本时,其高度和旋转角采用缺省值。 5. command调用的参数,如数字、点常量亦可为调用的参数,如数字、点常量亦可为Auto LISP的其它表达式,但其求值结果的数据类型,要与的其它表达式,但其求值结果的数据类型,要与Auto CAD命令要求的数据类型一致。命令要求的数据类型一致。例如: (setq p1 (list 30.0 20.0)
6、 (command “line” p1 (list (+ (car p1) 50.0) (cadr p1) ”) 但但command函数的参数不能用函数的参数不能用get类函数,这是特别类函数,这是特别要注意的,否则将出错。要注意的,否则将出错。6. command可以不带任何参数,可以不带任何参数,即(即(command),),它等效于在键盘上按它等效于在键盘上按CTRLC键,即取消了键,即取消了Auto CAD命令。命令。例如: (command “dim” “hor” /(4 4) /(6 4) /(5 4) 10) (command) 相当于取消DIM命令并返回到命令提示。 (comm
7、and)也可以用“”代替,如上式可写成: (command “dim” “hor” /(4 4) /(6 4) /(5 4) 10) 4.1.2 功用及求值结果功用及求值结果 command函数的功用是在Auto LISP编程中直接调用Auto CAD命令,以编制绘图程序。求值器在遇到command函数时与对其它Auto LISP函数一样,也要对各参数求值。但不同的是它把各参数的求值结果交给Auto CAD去调用相应的Auto CAD命令,执行完Auto CAD命令后,又返回到Auto LISP。command函数求值结果总是返函数求值结果总是返回回nil。 command函数的实际应用有如下
8、几种情况: 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”
9、“0.0” “ABC” ) 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 (
10、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.1.3
11、注意注意 mand函数调用中的参数类型,个数与顺序应与函数调用中的参数类型,个数与顺序应与Auto CAD命令严格对应。命令严格对应。为防止出错,对于初学者建议在编写用command函数的Auto LISP程序之前,先用Auto CAD的命令提示状态下敲入命令,确定其输入命令、子命令及其数据后,再进行编程。 mand函数在调用象line,pline,layer等需要不定个数据的Auto CAD命令时,最后必须按一次空格键,以终止该命令的执行。即在command参数最后加一个(“”)。 mand函数中的参数不能用get族函数。 mand函数调用中的命令、子命令及其选项等字符串中不能含空格,因为空
12、格在字符串中也是有效的。例如: (command “line” “1” “2” “3 4” “”) ;非法命令 (command “line” “1,2” “3,4” “”) ;合法 5. command函数调用函数调用script命令时只能作为程序文件或函数定命令时只能作为程序文件或函数定义中的最后一个表达式,否则程序易于出现不正确的结果,这在开义中的最后一个表达式,否则程序易于出现不正确的结果,这在开发发CAD应用应用软件中特别出现要加以注意。 4.2图形处理函数图形处理函数 Auto LISP编写绘图程序时,常需要一些几何特征点、距离、角度等数据,如两点距离、两直线交点等。Auto LI
13、SP专门提供了一些解决这类问题的函数,即图形处理函数。利用这些函数,可使很多复杂问题的求解简化,充分利用这些函数,可使编程大大简化。 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
14、 /(2.4 1.2) /(5.0 1.2) 返回值 0 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) /(
15、2.4 1.2 5.1) 返回值返回值4.045990 1.调用格式调用格式 (polar 点 方向角 距离) 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.0
16、0000 10.464100) p1p2p3acb 在编制绘图程序时,已知一点求另一相关点时,常采用两个函数即List和polar。由于polar函数在很多情况下,使用起来更简便,应尽可能使用polar函数,例如: 已知p2点及三角形三个边长a,b,c,确定p1、p3点,用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) p3 (polar (+ (car p1) b) (cadr p1) ) 显
17、然,用polar函数确定相对坐标点是比较简单的。 图4.1p1p2p3图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
18、60) f4 (* 0.017453 90) f5 (* 0.017453 135) f6 (* 0.017453 225) ) 然后,将上面的函数放在绘图环境中,这样使用起来很方便。 4.2.4求二直线交点坐标的函数求二直线交点坐标的函数 INTERS 1.调用格式调用格式 (inters端点1端点2端点3端点4任选项) 2.功用及求值结果功用及求值结果 该函数求以端点1,端点2确定的一条直线和以端点端点3,端点4确定的另一直线的交点,并返回该交点。若不相交,则返回nil。 任选项提示是否求延长线交点。若任选项存在,且其值为nil,则提示可以求两条线上或其延长线上的交点。若任选项不存在或其值
19、为非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.2.5 目标捕捉函数目标捕捉函数OSNAP Auto LISP提供的OSN
20、AP函数所完成的功能与Auto CAD中的OSNAP命令完成的功能相似,即捕捉目标的特征点。 1.调用格式调用格式 (osnap 点 目标捕捉方式) 2.功用及求值结果功用及求值结果 该函数是用点先取屏幕图形目标,再根据目标捕捉方式求出该目标的特征点如(圆心、直线端点、切点、线段中点、交点等),并返回该特征点。若对给定点没有捕捉到目标,但找不到与指定捕捉方式相匹配的目标特征点。OSNAP则返回nil。 有关目标捕捉功能在Auto CAD的OSNAP命令已作介绍,下面对目标捕捉方式只作一简述: (1) NEA(Nearest)捕捉靶区中心点位置最近的线、弧线或圆上的点。 (2) ENDP(End
21、point)捕捉靶区中心点最近的线、弧线的端点。 (3) MID(Midpoint)捕捉线段或弧线的中点。 (4) CEN(Center)捕捉弧线或圆(可见部份)的圆心。 (5) NOD(Node)捕捉点元素,这些点应置于块定义的插入基点上,该块插入时的snap节点。 (6) QUA(Quadrand)捕捉圆或弧线上的象限点(可见的)-0o、90o、180o、270o的点,若圆或弧线是旋转后的块的一部份,其象限点也是随之转动 (7) INT(Interserction)捕捉两条线(或者一线与圆或弧,或者两个圆或弧)的交点。 (8) INS(Insert)捕捉一个形、文本、属性定义或块的插入点。
展开阅读全文