第6章AutoCAD二次开发 1Word文件下载.docx
- 文档编号:17389951
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:17
- 大小:59.14KB
第6章AutoCAD二次开发 1Word文件下载.docx
《第6章AutoCAD二次开发 1Word文件下载.docx》由会员分享,可在线阅读,更多相关《第6章AutoCAD二次开发 1Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
(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
(/85)1
(*256)60
(2)最大数,最小数
(maxnum1num2……)
(minnum1num2……)
(max4.72)4.7
command:
(min3.2-1)-1
(3)平方根,绝对值
平方根:
(sqrtnum)
绝对值:
(absnum)
(sqrt4)2
(abs-1)1
(4)三角函数
反正切(atana)或(atana1a2)
正弦(sinangle);
余弦(cosangle);
注:
angle用弧度制
(atan1.5)0.982794
(atan3.02.0)0.982794
(sin1)0.841471
(cospi)1.0
2.逻辑运算
(andab);
(orab);
(nota);
-----其中a,b为逻辑表达式。
command:
(andnil10)nil
(ornil1)T
(not10)nil
3.关系运算
(<
ab);
(/=ab);
(>
=ab)-----条件为真返回T,否则返回nil
35)T
command:
(<
3542)nil
2345)T
四.几何实用函数
1.angle函数
(anglept1pt2)
说明:
pt1、pt2为两点的坐标,计算这两点连线与x轴的夹角(按逆时针计算),返回弧度值。
(angle’(00)’(100100))0.785398
2.distance函数
(distancept1pt2)
(distance’(00)’(1000))100
3.polar函数
(polarptangledistance)
(polar'
(00)0.78100))
(71.091470.3279)
五.表处理函数
1.表长函数
(lengthlist)
(length’(abc))3
(length’(a(bc)))2
2.表颠倒函数
(reverselist)
(reverse’(35))(53)
(reverse’(3542))(2453)
3.返回表中元素
(cadlist)(cdrlist)(cadrlist)
(cad’(abc))a
(cdr’(abc))b
(cadr’(abc))c
(cdr’(a(bc)))(bc)
六.赋值函数
(setqsym1expr1sym2expr2sym3expr3……)
(setqd’(abc))(ABC)
(setqa10b12.5c23)23
!
a10
c23
七.用户输入函数
1.getint、getreal、getstring函数
(get×
×
<
prompt>
)
(setqd(getint“Enteranumber:
\n”))
Enteranumber:
1212
(setqs(getstring“Enterastring:
”))
Enterastring:
autolispautolisp
2.getpoint函数
(getpoint<
(setqd(getpoint“Enterapoint:
鼠标点取(100,100)
八.command函数
(comment<
argument>
(command"
circle"
'
(200200)20)
(command"
2p"
(100100)'
(80150))
说明:
1.本函数用于执行一条AutoCAD命令,即向AutoCAD的“command:
”提示直接发送AutoCAD命令;
2.变元<
表示要求AutoCAD执行的命令及该命令所需的参数,这些参数必须与命令对应的参数需求相适应,且顺序一致;
3.空字符串(“”)等效于回车;
4.调用AutoCAD内部的参数要加“”,自定义的参数不加“”;
mand函数中需要的参数必需执行在command函数前定义,command函数中不能使用get×
等函数。
实例:
(setqp1(getpoint))(300.572245.050.0)
(setqr1(getint))50
p1r1)
(setqa(entlast))
hatch"
u"
4510"
"
a"
九.函数的定义
(defunsym(全局变量/局部变量))
(defunplus(/ans)
(setqans(+23));
令ans=2+3
)
运行:
加载→输入“(plus)”或在AutoCAD命令中输入“(plus)”
?
问题:
plus不是AutoCAD的内部函数,如何使得plus函数数能像AutoCAD内部函数那样被调用?
(defunc:
sym(全局变量/局部变量))
plus(/ans)
(setqans(+23));
加载→输入“(c:
plus)”或在AutoCAD命令中输入“(c:
plus)或“plus”
十.实例1
ring()
(setqr12.5r24.0r35.5r1.0)
(setqpc(getpoint"
\n输入圆心"
))
pcr1
pcr2
pcr3)
(polarpc0r2)r)
array"
L"
p"
pc8360"
N"
实例2
akey(/dhwbpagp1p2)
(setqd(/(getint"
\nd=?
)2.0)
h(getint"
\nh=?
w(/(getint"
\nw=?
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))
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)程序最后要回车。
三.下拉菜单
***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"
akey)
四.图像菜单
1.菜单组名
menugroup=菜单组名
2.下拉菜单段
***popN
[菜单项名]——下拉菜单总标题
[图像菜单项n]$I=菜单组名.图像菜单子菜单名$I=*
(其中,第一个$I为查找图像菜单。
第二个$I为了显示当前加载的图像菜单。
3.图像菜单项
***image
**+图像菜单子菜单名(不可省略)
[图像菜单标题]
[幻灯片1,菜单项1]^c^c(load“源程序文件名”)(函数名)
[幻灯片2,菜单项2]^c^c(load“源程序文件名”)(函数名)
***menugroup=part
[主要零配件]$I=part.image_part$I=*
***image
**image_part
[主要零配件]
[ring,法兰]^c^c(load"
ring)
[key,键槽]^c^c(load"
第三部分AutoCAD对话框设计
一.DCL基本语言
在VisualLISP中,对话框的格式以对话框控制语言(DCL)定义在.dcl文件中。
1.语法格式
对话框名称:
dialog
{label=标题名;
{:
组件1
key=value1;
label=value2;
attribute=value;
}
{:
组件2
attribute2=value2;
}
ok_cancel}
2.说明
(1)属性定义语句后用“;
”结尾;
(2)注释符用“//”;
(3)对话框显示预览:
VisualLISP编辑器→工具→界面工具→预览编辑器中的DCL。
3.实例
dcl:
{label="
我的对话框"
;
ok_cancel;
二.对话框常用组件的定义
1.编辑框(edit_box)
radia:
半径值"
:
edit_box
请输入圆的半径r1"
key="
a1"
请输入圆的半径r2"
a2"
2.图像框(image)
ring:
法兰幻灯片"
image
{key="
ringslide"
height=20;
width=50;
color=-3;
ok_cancel;
3.下拉列表框(popup_list)
season:
季节"
popup_list
season"
label="
一年四季"
list="
春\n夏\n秋\n冬"
4.列表框(list_box)
list_box
5.对话框区域定义boxed_column(列);
boxed_row(行)
boxed_row
第一组半径值"
r1"
r2"
boxed_column
第二组半径值"
r3"
a3"
r"
三.对话框管理
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二次开发综合实例
(setqdcl_id(load_dialog"
ring.dcl"
ring"
dcl_id))(exit))
(setqx(dimx_tile"
ring_image"
(setqy(dimy_tile"
(start_image"
(slide_image00xy"
(end_image)
(action_tile"
(setqr1$value)"
(action_ti
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第6章AutoCAD二次开发 AutoCAD 二次开发