第6章AutoCAD二次开发 1.docx
- 文档编号:4461674
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:17
- 大小:59.14KB
第6章AutoCAD二次开发 1.docx
《第6章AutoCAD二次开发 1.docx》由会员分享,可在线阅读,更多相关《第6章AutoCAD二次开发 1.docx(17页珍藏版)》请在冰豆网上搜索。
第6章AutoCAD二次开发1
AutoCAD二次开发基础讲义
AutoCAD荣登全球绘图软件的龙头宝座,主要是因为它具有开放的体系结构。
它允许用户和开发者采用高级编程语言对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求。
AutoCAD第一版于1982年11月由AutoDESK公司推出,目前大家广泛使用的是AutoCAD2000或2002,最新版本是AutoCAD2004,其二次开发语言及工具也在不断地涌现。
1AutoLISP
AutoLISP的全名是LISTProcessingLanguage,她出现于1985年推出的AutoCADR2.18中,是一种嵌入在AutoCAD内部的编程语言,是LISP原版的一个子集,她一直是低版本AutoCAD的首选编程语言。
它是一种表处理语言,是被解释执行的,任何一个语句键入后就能马上执行,它对于交互式的程序开发非常方便。
其缺点是继承了LISP语言的编程规则而导致繁多的括号。
3ADS
ADS的全名是AutoCADDevelopmentSystem,它是AutoCAD的C语言开发系统,ADS本质上是一组可以用C语言编写AutoCAD应用程序的头文件和目标库,它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可以在AutoCAD环境中直接运行的可执行文件叫做ADS应用程序。
ADS由于其速度快,又采用结构化的编程体系,因而很适合于高强度的数据处理,如二次开发的机械设计CAD、工程分析CAD、建筑结构CAD、土木工程CAD、化学工程CAD、电气工程CAD等。
4ObjectARX
ObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C++为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的AutoCAD应用程序。
ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARXforAutoCAD2000,它能够对AutoCAD的所有事务进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。
ObjectARX从本质上讲,是一种特定的C++编程环境,她包括一组动态链接库(DLL),这些库与AutoCAD在同一地址空间运行并能直接利用AutoCAD核心数据结构和代码,库中包含一组通用工具,使得二次开发者可以充分利用AutoCAD的开放结构,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创建能全面享受AutoCAD固有命令的新命令。
ObjectARX的核心是两组关键的API,即AcDb(AutoCAD数据库)和AcEd(AutoCAD编译器),另外还有其它的一些重要库组件,如AcRX(AutoCAD实时扩展)、AcGi(AutoCAD图形接口)、AcGe(AutoCAD几何库)、ADSRX(AutoCAD开发系统实时扩展)。
ObjectARX还可以按需要加载应用程序;使用ObjectARX进行应用开发还可以在同一水平上与Windows系统集成,并与其它Windows应用程序实现交互操作。
5VisualLISP
VisualLISP已经被完整地集成到AutoCAD2000中,她为开发者提供了崭新的、增强的集成开发环境,一改过去在AutoCAD中内嵌AtuoLISP运行引擎的机制,这样开发者可以直接使用AutoCAD中的对象和反应器,进行更底层的开发。
其特点为自身是AutoCAD2000中默认的代码编辑工具;用它开发AutoLISP程序的时间被大大地缩短,原始代码能被保密,以防盗版和被更改;能帮助大家使用ActiveX对象及其事件;使用了流行的有色代码编辑器和完善的调试工具,使大家很容易创建和分析LISP程序的运行情况。
在VisualLISP中新增了一些函数:
如基于AutoLISP的ActiveX/COM自动化操作接口;用于执行基于AutoCAD内部事件的LISP程序的对象反应器;新增了能够对操作系统文件进行操作的函数。
6VBA
VBA即Mcrosoftoffice中的VisualBasicforApplications,它被集成到AutoCAD2000中。
VBA为开发者提供了一种新的选择,也为用户访问AutoCAD2000中丰富的技术框架打开一新的通道。
VBA和AutoCAD2000中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。
通过VBA,我们可以操作AutoCAD,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动
第一部分AutoLISP语法基础
一.AutoLISP的程序结构
1.程序结构
(函数参数……)
如:
(setqx25.0)
(setqy12.2)
(+(*xy)x)
AutoLISP程序由一个或一系列按顺序排列的标准表组成。
2.AutoLISP书写格式的特点:
(1)左右括号匹配;
(2)从左到右读程序;
(3)函数放在第一个元素的位置;
(4)一表可占多行,一行可写多表;
(5)用分号“;”作注释;
二.AutoLISP的变量与类型
1.整形常量Int
整数由数字组成,不包含小数点。
AutoLISP的整数是32位带符号的数,取值范围从+2,147,483,647到-2,147,483,648
2.实数常量Real
实数是带有小数点的数。
以双精度浮点格式存储的,可以提供至少14位精度。
可以用科学记数法表示。
如数字3.1、0.23、-56.123和21,000,000.0都是有效的AutoLISP实数
3.字符串常量Str
字符串是在双引号中的一组字符。
如“string1”和“\nEnterfirstpoint:
”都是有效的字符串。
4.表
ListAutoLISP的表是在括号中以空格分隔的一组相关值。
表提供了一种存储大量相关值的有效方法。
AutoCAD将三维点表示为三个实数组成的表。
(1.01.00.0)、("this""that""theother")和(1"ONE")都是有效的表
5.其它
Sym(符号和变量),Select(选择集),Entity(实体名),filepointer(文件描述符),VLA对像(VisualLISPActiveX)。
三.数值函数
1.计算函数
(1)+、-、*、/
AutoLISP中,所有运算符号均采用前缀方式。
一般格式为:
(运算符数字数字……)。
(+ab);(-ab);(*ab);(/ab);
如:
(*abc)即为a*b*c
(+a(-b(*cd)))即为a+(b-c*d)
command:
(+4.72)6.7
command:
(/85)1
command:
(*256)60
(2)最大数,最小数
(maxnum1num2……)
(minnum1num2……)
如:
command:
(max4.72)4.7
command:
(min3.2-1)-1
(3)平方根,绝对值
平方根:
(sqrtnum)
绝对值:
(absnum)
如:
command:
(sqrt4)2
command:
(abs-1)1
(4)三角函数
反正切(atana)或(atana1a2)
正弦(sinangle);
余弦(cosangle);
注:
angle用弧度制
如:
command:
(atan1.5)0.982794
command:
(atan3.02.0)0.982794
command:
(sin1)0.841471
command:
(cospi)1.0
2.逻辑运算
(andab);(orab);(nota);-----其中a,b为逻辑表达式。
如:
command:
(andnil10)nil
command:
(ornil1)T
command:
(not10)nil
3.关系运算
(
如:
command:
(<35)T
command:
(<3542)nil
command:
(<2345)T
四.几何实用函数
1.angle函数
(anglept1pt2)
说明:
pt1、pt2为两点的坐标,计算这两点连线与x轴的夹角(按逆时针计算),返回弧度值。
如:
command:
(angle’(00)’(100100))0.785398
2.distance函数
(distancept1pt2)
如:
command:
(distance’(00)’(1000))100
3.polar函数
(polarptangledistance)
如:
command:
(polar'(00)0.78100))
(71.091470.3279)
五.表处理函数
1.表长函数
(lengthlist)
如:
command:
(length’(abc))3
command:
(length’(a(bc)))2
2.表颠倒函数
(reverselist)
如:
command:
(reverse’(35))(53)
command:
(reverse’(3542))(2453)
3.返回表中元素
(cadlist)(cdrlist)(cadrlist)
如:
command:
(cad’(abc))a
command:
(cdr’(abc))b
command:
(cadr’(abc))c
command:
(cdr’(a(bc)))(bc)
六.赋值函数
(setqsym1expr1sym2expr2sym3expr3……)
如:
command:
(setqd’(abc))(ABC)
command:
(setqa10b12.5c23)23
command:
!
a10
command:
!
c23
七.用户输入函数
1.getint、getreal、getstring函数
(get×××
如:
command:
(setqd(getint“Enteranumber:
\n”))
Enteranumber:
1212
command:
(setqs(getstring“Enterastring:
”))
Enterastring:
autolispautolisp
2.getpoint函数
(getpoint
如:
command:
(setqd(getpoint“Enterapoint:
”))
Enteranumber:
鼠标点取(100,100)
八.command函数
(comment
如:
(command"circle"'(200200)20)
(command"circle""2p"'(100100)'(80150))
说明:
1.本函数用于执行一条AutoCAD命令,即向AutoCAD的“command:
”提示直接发送AutoCAD命令;
2.变元
3.空字符串(“”)等效于回车;
4.调用AutoCAD内部的参数要加“”,自定义的参数不加“”;
mand函数中需要的参数必需执行在command函数前定义,command函数中不能使用get×××等函数。
实例:
command:
(setqp1(getpoint))(300.572245.050.0)
command:
(setqr1(getint))50
command:
(command"circle"p1r1)
command:
(setqa(entlast))
command:
(command"hatch""u"4510""a"")
九.函数的定义
(defunsym(全局变量/局部变量))
如:
(defunplus(/ans)
(setqans(+23));令ans=2+3
)
运行:
加载→输入“(plus)”或在AutoCAD命令中输入“(plus)”
?
问题:
plus不是AutoCAD的内部函数,如何使得plus函数数能像AutoCAD内部函数那样被调用?
(defunc:
sym(全局变量/局部变量))
如:
(defunc:
plus(/ans)
(setqans(+23));令ans=2+3
)
运行:
加载→输入“(c:
plus)”或在AutoCAD命令中输入“(c:
plus)或“plus”
十.实例1
(defunc:
ring()
(setqr12.5r24.0r35.5r1.0)
(setqpc(getpoint"\n输入圆心"))
(command"circle"pcr1
"circle"pcr2
"circle"pcr3)
(command"circle"(polarpc0r2)r)
(command"array""L""""p"pc8360"N")
)
实例2
(defunc:
akey(/dhwbpagp1p2)
(setqd(/(getint"\nd=?
")2.0)
h(getint"\nh=?
")
w(/(getint"\nw=?
")2.0)
bp(getpoint"\ncenter=?
")
ag(atan(/w(sqrt(-(*dd)(*ww)))))
)
(command"pline"
(setqp1(polarbp(-ag)d))
(setqp2(list(+(carbp)(-dh))(cadrp1)))
(polarp2(/pi2.0)(*w2))
(polarbpagd)
"a""ce"bpp1""
)
(setqss(entlast))
(command"hatch""u"4510""ss"")
)
第二部分AutoCAD菜单开发
一.菜单文件
MNU原始菜单文件,文本格式。
MNS加载.MNU后产生,文本格式。
MNC将.MNS编译为二进制格式。
MNR二进制文件,包含由菜单使用的位图。
MNL与菜单配套的AutoLISP程序。
这些文件包含由菜单文式件使用的AutoLISP表达式。
当加载同名的菜单文件时,这些文件也载入内存。
二.菜单文件结构
1.段标题
常用段标题菜单区域
***POPN下拉/快捷菜单区域
***TOOLBARS工具栏定义
***IMAGE图像控件菜单区域
***SCREEN屏幕菜单区域
***MENUGROUP菜单文件组名
2.菜单项
菜单项由下列元素组成:
(名称标记)、标签和菜单宏。
3.菜单宏
^C^C可确保不存在尚未完成的命令。
这与在键盘上连续按两次ESC一样。
并从DIM命令返回命令提示。
说明:
(1)注释用//;
(2)程序最后要回车。
三.下拉菜单
1.段标题
***popN(N:
1~499)
2.子菜单标题
**+子菜单名(可省略)
3.菜单项
[菜单项名]—下拉菜单总标题
[菜单项1]
[菜单项2]
4.菜单宏
[菜单项n]^c^c(load“源程序文件名”)(函数名)
例:
***pop1
[关键零件]
[法兰]^c^c((load"ring.lsp")(c:
ring))
[键槽]^c^c(load"key.lsp")(c:
akey)
四.图像菜单
1.菜单组名
menugroup=菜单组名
2.下拉菜单段
***popN
[菜单项名]——下拉菜单总标题
[图像菜单项n]$I=菜单组名.图像菜单子菜单名$I=*
(其中,第一个$I为查找图像菜单。
第二个$I为了显示当前加载的图像菜单。
)
3.图像菜单项
***image
**+图像菜单子菜单名(不可省略)
[图像菜单标题]
[幻灯片1,菜单项1]^c^c(load“源程序文件名”)(函数名)
[幻灯片2,菜单项2]^c^c(load“源程序文件名”)(函数名)
例:
***menugroup=part
***pop1
[关键零件]
[主要零配件]$I=part.image_part$I=*
***image
**image_part
[主要零配件]
[ring,法兰]^c^c(load"ring.lsp")(c:
ring)
[key,键槽]^c^c(load"key.lsp")(c:
akey)
第三部分AutoCAD对话框设计
一.DCL基本语言
在VisualLISP中,对话框的格式以对话框控制语言(DCL)定义在.dcl文件中。
1.语法格式
对话框名称:
dialog
{label=标题名;
{:
组件1
key=value1;
label=value2;
attribute=value;}
{:
组件2
key=value1;
label=value2;
attribute2=value2;}
ok_cancel}
2.说明
(1)属性定义语句后用“;”结尾;
(2)注释符用“//”;
(3)对话框显示预览:
VisualLISP编辑器→工具→界面工具→预览编辑器中的DCL。
3.实例
dcl:
dialog
{label="我的对话框";
ok_cancel;
}
二.对话框常用组件的定义
1.编辑框(edit_box)
radia:
dialog
{label="半径值";
:
edit_box
{label="请输入圆的半径r1";
key="a1";}
:
edit_box
{label="请输入圆的半径r2";
key="a2";}
ok_cancel;
}
2.图像框(image)
ring:
dialog
{label="法兰幻灯片";
:
image
{key="ringslide";
height=20;
width=50;
color=-3;}
ok_cancel;
}
}
3.下拉列表框(popup_list)
season:
dialog
{label="季节";
:
popup_list
{key="season";
label="一年四季";
list="春\n夏\n秋\n冬";}
ok_cancel;
}
4.列表框(list_box)
season:
dialog
{label="季节";
:
list_box
{key="season";
label="一年四季";
list="春\n夏\n秋\n冬";}
ok_cancel;
}
5.对话框区域定义boxed_column(列);boxed_row(行)
:
boxed_row
{label="第一组半径值";
:
edit_box
{label="r1";
key="a1";}
:
edit_box
{label="r2";
key="a2";}
}
:
boxed_column
{label="第二组半径值";
:
edit_box
{label="r3";
key="a3";}
:
edit_box
{label="r";
key="a";}
}
ok_cancel;
}
三.对话框管理
1.调用load_dialog来加载DCL文件
格式:
(load_dialogdclfile)
为便于后面的管理,给对话框文件一个文件识别码,则格式改为:
(setqdcl_id(load_dialogdclfile))
注:
dcl_id文件识别码
2.调用new_dialog来显示特定的对话框。
格式:
(new_dialogdlgnamedcl_id)
如须检查new_dialog的返回值,则格式改为:
(if(not(new_dialog"dlgname"dcl_id))(exit))
3.通过设置控件值、列表和图像来初始化对话框。
(1)action_tile函数
格式:
(action_tilekeyaction-expression)
例:
(action_tile“edit1”“(setqa1$value)")
$value—引用控件的当前值
(2)图像框处理函数
a.获取图像框尺寸
(dimx_tilekey)如:
(setqwidth(dimx_tilekey)
(dimy_tilekey)如:
(setqheigth(dimy_tilekey)
b.激活图像框
(start_imagekey)
c.显示幻灯片图像
(slide_imagexywidthheigthsldname)
x,y—图像与图像框左上角偏移量
(3)done_dialog函数,用于结束对话框
格式:
(done_dialog[status])
status默认值:
1,表示用户按下“ok”按钮;
0,表示用户按下“cancel”按钮;
4.调用start_dialog将控制权转交给对话框,以便用户进行输入
格式:
(start_dialog)
5.调用unload_dialog来卸载该DCL文件。
格式:
(unload_dialogdcl_id)
第四部分AutoCAD二次开发综合实例
(defunc:
ring()
(setqdcl_id(load_dialog"ring.dcl"))
(if(not(new_dialog"ring"dcl_id))(exit))
(setqx(dimx_tile"ring_image"))
(setqy(dimy_tile"ring_image"))
(start_image"ring_image")
(slide_image00xy"ring")
(end_image)
(action_tile"a1""(setqr1$value)")
(action_ti
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第6章AutoCAD二次开发 AutoCAD 二次开发
![提示](https://static.bdocx.com/images/bang_tan.gif)