ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:59.14KB ,
资源ID:4461674      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4461674.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第6章AutoCAD二次开发 1.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第6章AutoCAD二次开发 1.docx

1、第6章AutoCAD二次开发 1AutoCAD二次开发基础讲义AutoCAD荣登全球绘图软件的龙头宝座,主要是因为它具有开放的体系结构。它允许用户和开发者采用高级编程语言对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求。AutoCAD第一版于1982年11月由AutoDESK公司推出,目前大家广泛使用的是AutoCAD 2000或2002,最新版本是AutoCAD 2004,其二次开发语言及工具也在不断地涌现。1 AutoLISPAutoLISP的全名是LIST Processing Language,她出现于1985年推出的AutoCAD R2.18中,是一种嵌入在AutoCA

2、D内部的编程语言,是LISP原版的一个子集,她一直是低版本AutoCAD的首选编程语言。它是一种表处理语言,是被解释执行的,任何一个语句键入后就能马上执行,它对于交互式的程序开发非常方便。其缺点是继承了LISP语言的编程规则而导致繁多的括号。3 ADSADS的全名是AutoCAD Development System,它是AutoCAD的C语言开发系统,ADS本质上是一组可以用C语言编写AutoCAD应用程序的头文件和目标库,它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可以在AutoCAD环境中直接运行的可执行文件叫做ADS应用程序。

3、ADS由于其速度快,又采用结构化的编程体系,因而很适合于高强度的数据处理,如二次开发的机械设计CAD、工程分析CAD、建筑结构CAD、土木工程CAD、化学工程CAD、电气工程CAD等。4 ObjectARXObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C+为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的Auto CAD应用程序。ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARX for AutoCAD 2000,它能够对AutoCAD的所

4、有事务进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。ObjectARX从本质上讲,是一种特定的C+编程环境,她包括一组动态链接库(DLL),这些库与AutoCAD在同一地址空间运行并能直接利用AutoCAD核心数据结构和代码,库中包含一组通用工具,使得二次开发者可以充分利用AutoCAD的开放结构,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创建能全面享受AutoCAD固有命令的新命令。ObjectARX的核心是两组关键的API,即AcDb(Auto CAD数据库)和AcEd(A

5、uto CAD编译器),另外还有其它的一些重要库组件,如AcRX(Auto CAD实时扩展)、AcGi(Auto CAD图形接口)、AcGe(Auto CAD几何库)、ADSRX(Auto CAD开发系统实时扩展)。ObjectARX 还可以按需要加载应用程序;使用ObjectARX进行应用开发还可以在同一水平上与Windows系统集成,并与其它Windows应用程序实现交互操作。5 VisualLISP VisualLISP已经被完整地集成到AutoCAD 2000中,她为开发者提供了崭新的、增强的集成开发环境,一改过去在AutoCAD中内嵌AtuoLISP运行引擎的机制,这样开发者可以直接

6、使用AutoCAD中的对象和反应器,进行更底层的开发。其特点为自身是AutoCAD 2000中默认的代码编辑工具;用它开发AutoLISP程序的时间被大大地缩短,原始代码能被保密,以防盗版和被更改;能帮助大家使用ActiveX对象及其事件;使用了流行的有色代码编辑器和完善的调试工具,使大家很容易创建和分析LISP程序的运行情况。在VisualLISP中新增了一些函数:如基于AutoLISP的ActiveX/COM自动化操作接口;用于执行基于Auto CAD内部事件的LISP程序的对象反应器;新增了能够对操作系统文件进行操作的函数。6 VBAVBA 即Mcrosoft office中的Visua

7、l Basic for Applications,它被集成到AutoCAD 2000中。VBA为开发者提供了一种新的选择,也为用户访问AutoCAD 2000中丰富的技术框架打开一新的通道。VBA和AutoCAD 2000中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。通过VBA,我们可以操作AutoCAD,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动第一部分AutoLISP语法基础一.AutoLISP的程序结构1.程序结构(函数 参数 )如:(setq x 25.0) (setq y 12.2) ( + (* x y) x )Aut

8、oLISP程序由一个或一系列按顺序排列的标准表组成。2. AutoLISP书写格式的特点:(1)左右括号匹配;(2)从左到右读程序;(3)函数放在第一个元素的位置;(4)一表可占多行,一行可写多表;(5)用分号“;”作注释;二.AutoLISP的变量与类型1.整形常量Int整数由数字组成,不包含小数点。AutoLISP 的整数是 32 位带符号的数,取值范围从 +2,147,483,647 到 -2,147,483,6482.实数常量Real实数是带有小数点的数。以双精度浮点格式存储的,可以提供至少 14 位精度。可以用科学记数法表示。如数字 3.1、0.23、-56.123 和 21,000

9、,000.0 都是有效的 AutoLISP 实数3.字符串常量 Str字符串是在双引号中的一组字符。如“string 1”和“nEnter first point:”都是有效的字符串。 4. 表 ListAutoLISP 的表是在括号中以空格分隔的一组相关值。表提供了一种存储大量相关值的有效方法。AutoCAD 将三维点表示为三个实数组成的表。(1.0 1.0 0.0)、(this that the other) 和 (1 ONE) 都是有效的表5. 其它Sym(符号和变量),Select(选择集),Entity(实体名),filepointer(文件描述符),VLA对像(Visual LIS

10、P ActiveX)。三.数值函数1.计算函数 (1)+、-、*、/AutoLISP 中,所有运算符号均采用前缀方式。一般格式为:(运算符 数字 数字)。(+ a b);(- a b);(* a b);(/ a b);如:(* a b c)即为a*b*c (+ a (- b (* c d))即为a+(b-c*d) command:(+ 4.7 2) 6.7command:(/ 8 5) 1command:(* 2 5 6) 60(2)最大数,最小数(max num1 num2 )(min num1 num2 )如:command:(max 4.7 2) 4.7 command:(min 3.2

11、 -1) -1(3)平方根,绝对值平方根:(sqrt num)绝对值:(abs num)如:command:(sqrt 4) 2 command:(abs -1) 1(4)三角函数反正切(atan a)或(atan a1 a2)正弦 (sin angle);余弦 (cos angle); 注:angle用弧度制如:command:(atan 1.5) 0.982794 command:(atan 3.0 2.0) 0.982794 command:(sin 1) 0.841471 command:(cos pi) 1.02.逻辑运算(and a b );(or a b ); (not a );

12、-其中a,b为逻辑表达式。 如:command:(and nil 10) nilcommand: (or nil 1) Tcommand: (not 10) nil3.关系运算 ( = a b ) -条件为真返回T,否则返回nil如:command:( 3 5) T command: ( 3 5 4 2) nil command: ( 2 3 4 5) T四几何实用函数1.angle函数(angle pt1 pt2) 说明:pt1、pt2为两点的坐标,计算这两点连线与x轴的夹角(按逆时针计算),返回弧度值。 如:command:( angle (0 0) (100 100) 0.7853982

13、.distance函数(distance pt1 pt2)如:command:(distance (0 0) (100 0) 1003.polar函数(polar pt angle distance)如:command:(polar (0 0) 0.78 100) (71.0914 70.3279)五.表处理函数1.表长函数(length list)如:command:(length (a b c) 3 command: (length (a (b c) 22.表颠倒函数 (reverse list)如:command:(reverse ( 3 5) (5 3) command: (rever

14、se (3 5 4 2) (2 4 5 3)3.返回表中元素(cad list) (cdr list) (cadr list)如:command:(cad (a b c) a command: (cdr (a b c) b command: (cadr (a b c) c command: (cdr (a (b c) (b c)六.赋值函数(setq sym1 expr1 sym2 expr2 sym3 expr3 )如:command:(setq d (a b c) (A B C) command: (setq a 10 b 12.5 c 23) 23 command: !a 10 comm

15、and: !c 23七.用户输入函数1.getint、getreal、getstring函数(get )如:command:(setq d (getint “Enter a number:n”) Enter a number:12 12 command:(setq s (getstring “Enter a string:”) Enter a string:autolisp autolisp2.getpoint函数(getpoint )如:command:(setq d (getpoint “Enter a point:”) Enter a number:鼠标点取 (100,100)八.com

16、mand函数(comment )如:(command circle (200 200) 20) (command circle 2p (100 100) (80 150)说明: 1.本函数用于执行一条AutoCAD命令,即向AutoCAD的“command:”提示直接发送AutoCAD命令; 2.变元表示要求AutoCAD执行的命令及该命令所需的参数,这些参数必须与命令对应的参数需求相适应,且顺序一致;3.空字符串(“ ”)等效于回车;4.调用AutoCAD内部的参数要加“ ”,自定义的参数不加“ ”;mand 函数中需要的参数必需执行在command函数前定义,command函数中不能使用g

17、et等函数。实例: command:(setq p1 (getpoint) (300.572 245.05 0.0) command:(setq r1 (getint) 50 command:(command circle p1 r1) command:(setq a (entlast) command:(command hatch u 45 10 a )九. 函数的定义(defun sym(全局变量/局部变量)如:(defun plus (/ ans) (setq ans (+ 2 3);令ans=2+3 )运行:加载输入“(plus)”或在AutoCAD命令中输入“(plus)”?问题:p

18、lus不是AutoCAD的内部函数,如何使得plus函数数能像AutoCAD内部函数那样被调用?(defun c: sym (全局变量/局部变量) 如:(defun c:plus (/ ans) (setq ans (+ 2 3) ;令ans=2+3 )运行:加载输入“(c:plus)”或在AutoCAD命令中输入“(c:plus)或“plus”十实例1(defun c:ring() (setq r1 2.5 r2 4.0 r3 5.5 r 1.0) (setq pc (getpointn输入圆心) (command circle pc r1 circle pc r2 circle pc r3

19、) (command circle (polar pc 0 r2) r) (command array L p pc 8 360 N) )实例2(defun c:akey (/ d h w bp ag p1 p2) (setq d (/ (getint n d=? ) 2.0) h (getint n h=?) w ( / (getint n w=? ) 2.0) bp (getpointn center=?) ag (atan ( / w (sqrt(- (* d d) (* w w) ) (commandpline (setq p1 (polar bp (- ag) d) (setq p2

20、 (list(+(car bp)(- d h) (cadr p1) (polar p2 ( / pi 2.0)(* w 2) (polar bp ag d) a ce bp p1 )(setq ss (entlast)(command hatch u 45 10 ss )第二部分 AutoCAD菜单开发一.菜单文件MNU 原始菜单文件,文本格式。MNS 加载.MNU后产生,文本格式。MNC 将.MNS编译为二进制格式。MNR 二进制文件,包含由菜单使用的位图。MNL 与菜单配套的 AutoLISP 程序。这些文件包含由菜单文 式件使用的 AutoLISP 表达式。当加载同名的菜单文件 时,这些

21、文件也载入内存。二.菜单文件结构1.段标题常用段标题 菜单区域*POPN 下拉/快捷菜单区域 *TOOLBARS 工具栏定义*IMAGE 图像控件菜单区域*SCREEN 屏幕菜单区域*MENUGROUP 菜单文件组名2.菜单项菜单项由下列元素组成:(名称标记)、标签和菜单宏。3.菜单宏CC 可确保不存在尚未完成的命令。这与在键盘上连续按两次 ESC 一样。并 从 DIM 命令返回命令提示。说明:(1)注释用 /;(2)程序最后要回车。三.下拉菜单1.段标题 *popN (N:1499)2.子菜单标题 *+子菜单名(可省略)3.菜单项 菜单项名下拉菜单总标题 菜单项1 菜单项24.菜单宏菜单项n

22、cc(load “源程序文件名”)(函数名)例:*pop1关键零件法兰cc(load ring.lsp)(c:ring)键槽 cc(load key.lsp)(c:akey)四图像菜单1.菜单组名 menugroup=菜单组名2.下拉菜单段 *popN 菜单项名下拉菜单总标题 图像菜单项n$I=菜单组名.图像菜单子菜单名 $I=*(其中,第一个$I为查找图像菜单。第二个$I为了显示当前加载的图像菜单。)3.图像菜单项 *image *+图像菜单子菜单名(不可省略) 图像菜单标题 幻灯片1,菜单项1 cc(load “源程序文件名”)(函数名) 幻灯片2,菜单项2 cc(load “源程序文件名

23、”)(函数名)例:*menugroup=part*pop1关键零件主要零配件$I=part.image_part $I=*image*image_part主要零配件ring,法兰cc(load ring.lsp)(c:ring)key,键槽cc(load key.lsp)(c:akey)第三部分 AutoCAD对话框设计一.DCL基本语言在VisualLISP中,对话框的格式以对话框控制语言(DCL)定义在.dcl文件中。1.语法格式对话框名称:dialog label=标题名; :组件1 key=value1; label=value2; attribute=value; :组件2 key=

24、value1; label=value2; attribute2=value2; ok_cancel 2.说明(1)属性定义语句后用“;”结尾;(2)注释符用“/”;(3)对话框显示预览:VisualLISP编辑器工具界面工具预览编辑器中的DCL。3.实例dcl:dialoglabel=我的对话框;ok_cancel;二.对话框常用组件的定义1.编辑框(edit_box)radia:dialoglabel=半径值;:edit_boxlabel=请输入圆的半径r1;key=a1;:edit_boxlabel=请输入圆的半径r2;key=a2;ok_cancel;2.图像框(image)ring:

25、dialoglabel=法兰幻灯片;:imagekey=ringslide; height=20; width=50; color=-3; ok_cancel;3.下拉列表框(popup_list)season:dialoglabel=季节;:popup_listkey=season;label=一年四季;list=春n夏n秋n冬;ok_cancel;4.列表框(list_box)season:dialoglabel=季节;:list_boxkey=season;label=一年四季;list=春n夏n秋n冬;ok_cancel;5.对话框区域定义 boxed_column(列);boxed_

26、row(行):boxed_rowlabel=第一组半径值;:edit_boxlabel=r1;key=a1;:edit_boxlabel=r2;key=a2;:boxed_columnlabel=第二组半径值;:edit_boxlabel=r3;key=a3;:edit_boxlabel=r ;key=a;ok_cancel;三.对话框管理1.调用 load_dialog 来加载 DCL 文件 格式: (load_dialog dclfile) 为便于后面的管理,给对话框文件一个文件识别码,则格式改为: (setq dcl_id (load_dialog dclfile) 注:dcl_id文件

27、识别码2.调用 new_dialog 来显示特定的对话框。 格式:(new_dialog dlgname dcl_id) 如须检查 new_dialog 的返回值,则格式改为: (if (not (new_dialog dlgname dcl_id)(exit)3.通过设置控件值、列表和图像来初始化对话框。(1)action_tile函数 格式:(action_tile key action-expression) 例:(action_tile “edit1” “(setq a1 $value) $value引用控件的当前值(2)图像框处理函数 a.获取图像框尺寸 (dimx_tile key

28、) 如:(setq width (dimx_tile key) (dimy_tile key) 如:(setq heigth (dimy_tile key) b.激活图像框 (start_image key) c.显示幻灯片图像 (slide_image x y width heigth sldname) x,y图像与图像框左上角偏移量(3)done_dialog函数,用于结束对话框 格式:(done_dialog status) status 默认值:1,表示用户按下“ok”按钮; 0,表示用户按下“cancel”按钮;4. 调用 start_dialog 将控制权转交给对话框,以便用户进行

29、输入 格式:(start_dialog)5.调用 unload_dialog 来卸载该 DCL 文件。 格式:(unload_dialog dcl_id)第四部分 AutoCAD二次开发综合实例(defun c:ring() (setq dcl_id(load_dialog ring.dcl) (if (not (new_dialog ringdcl_id) (exit) (setq x (dimx_tile ring_image) (setq y (dimy_tile ring_image) (start_image ring_image) (slide_image 0 0 x y ring) (end_image) (action_tile a1 (setq r1 $value) (action_ti

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1