摘 要: 介绍在AutoCAD环境下创建和管理图形库的一种方案、开发环境、流程等。使用图标菜单和合适的对话框展示图文并茂的图形信息,展示了方法的良好效果。 WHpbQQX
Q kQd;y
一、前言 ;TW@{re
YK[O#V
AutoCAD软件具有相当优秀的开放型结构(Open architecture)和一个强大的内部编程语言(Autolisp语言,可以完成一些计算机工作和作图功能),可以方便地让用户随意地开发自己的命令、标准库文件和各种应用程序等。 KR522YW
j:sac*6m
图形管理是CAD应用的一个重要内容,是CAD应用中较为繁琐、较为困难的部分之一。用户在实际应用中总是为图形太多无法管理大伤脑筋。本文提供了一个图形库创建和管理的方法,其最终效果是展示一个方便快捷、图文并茂的直观的图形库。 U`8)rtYw
:nXBw%0x
二、 方案设计 "?S#vUS+ 2
0cS.|\ZTA
1、实现方案 _`D_0v(X
:YV!;dKJ
许多AutoCAD用户在图形库的创建和管理方面都使用一种较为简便的方法:将图形文件命名为能体现其图形内容的名称,然后将其分类存入特定的文件夹。这种方法的优点在于简便快捷,但其不方便、不直观的缺点却更为突出。 m=}kGzIY4
BM3)`40[]
针对上述的简便方法,本文提出的方案方便、直观且内置于AutoCAD中。该方案如下: i&bttSRNV
z+\>e~U6J}
●生成所有图形的幻灯片文件; 49kY]z|"w
hnY^Z_v!
●在AutoCAD初始化界面的下拉菜单区加入“图形库”菜单条,此菜单条包含“机械图库”和“电子图库”两个菜单项; !*\^-uvaK
A!^,QRkRN
●点击“机械图库”和“电子图库”两个菜单区弹出相应的图标菜单,在图标菜单中可以看到图形文件标识名和相应的图形(幻灯片); mV4} -
OVivJx
●在图标菜单中拾取图形弹出一幅对话框,该对话框给出图形的一些文字信息(如:作者, 图形内容, 绘图日期, 图号等)和图形的预览; `86b
Fvv6<E
●点击对话框的确定按钮即可打开拾取的图形文件。 Tw`l4S&
rB7(&(n>^
2、方案论证 W&yw5rt**
@ ?%"nK
该方案的关键在于图标菜单和对话框。 >5N}ZIN
nC*/?y*9
●图标菜单: ,Y5+UzE@
( Rf)&KN
图标菜单是AutoCAD菜单的一种。图标菜单以20个为一组显示幻灯片,并同时显示一个包含有幻灯片名或其他文字的滚动列表框。图标菜单的长度不受限制,如果一个图标菜单包含的幻灯片多于20个AutoCAD会提供换页按钮,以便让用户换页显示更多的幻灯片。因此,可以利用AutoCAD的开放型体系结构上的二次开发定制图标菜单来对图形库进行管理。 zf S<X
BF@VgozW
图标菜单也有不足之处。图标菜单的一个页面需显示20幅幻灯片,所以只能从中获得比较概略的图形信息(尤其是复杂图形)。所以,需要采取一定的辅助措施来对使用图标菜单的缺陷进行弥补。 k1cBMDSokO
X F40;urm
●对话框: +22[ h@
'"KK|]vJ
从用户观点来看,窗口操作环境是目前最先进最流行的一种人机交互界面。它能控制光栅扫描型显示器和以鼠标器为代表的输入设备, AV&ege
5_i&}c23Vn
向用户提供了图文并茂的可视化环境,是操作更为直观、自然、简便和快速。 0loC^\f
LS_QoS
AutoCAD R12以上版本提供了一种对话框语言(Dialog-box Control ']rh0?
Ri3m438
Language,缩写为DCL),允许用户设计并实现自己的对话框。因此, 可以使用对话框语言编程来对图标菜单中图形进行放大并提供图标菜单中不能提供的文字信息。 EfUo<E
8uu:e<PLv
三、 开发环境 hFjW.~B
r94BEC 2
●486以上微机 ,onv
`
E7D^6G&i
●win95或win98操作系统 >/n/n{{
5QT9
●AutoCAD R12以上版本(本文提供方案在R12、R13、R14中都能实现,但本文提供的开发步骤主要是在R14中实现) mR{0*<
:kUH>O
四、 开发步骤 LnL<WI*Pq
Ay_<?F+&
1、建立图形库文件夹 +u
Lu.-N
[v&_MQ
在AutoCAD目录下创建文件夹Storeroom,将需要进入图形库进行管理的图形文件存入该文件夹。 pp-Ur?PM
duqu}*Jw
2、制作幻灯片库(*.SLB) N ;hq
N" 8o0>
◆制作幻灯片文件(*.SLD) l&yR-FJ7KY
{P3,jY^
在当前视窗中打开图形文件,并将图形移到屏幕中央。然后在命令行键入MSLIDE命令并在“Creat slide f9rToH
B\mdOTLQ
file”框中键入幻灯片名(按下〈return〉键则将当前图形名作缺省幻灯片名接受)。为了创建幻灯片库,将所有幻灯片文件保存到AutoCAD目录下的support子目录中。 DUtpd|
(= \P|iv
◆创建幻灯片列表文件(*.txt) L%<1C\k
p\HXE4d'
假设有mach001.dwg~mach030.dwg共30个图形文件和对应的mach001.sld~mach030.sld共30个幻灯片文件,编辑如下文件(文件名为mach.txt): ^aC[ZP:
BkJcT
mach001.sld Vz,WPm$I
E=B9FIx~<
mach002.sld }I;W
Du{]r[[C
mach003.sld w9oiu$7),
emaNmpg
. vJ{\67tK
r9%W?fEBp
mach030.sld [DE8s[i-
6xOR,p>E
◆幻灯片库的建立 }Yt0VtLt
}FK6o
6
使用AutoCAD的support目录中的实用程序slidelib,将幻灯片文件按照文件列表构造成幻灯片库mach.slb: Zf"AqGP
5M(?_qj
slidelib mach qB&*"gf
EbW7Av
3、编写对话框文件(*.dcl) (&B &
V
x|Ei_hI-
对话框主要是展示一个图文并茂的图形库中的图形,在对话框中不仅要有图形预览,还要有该图形的一些文字说明。假设图形库中的mach001.dwg是一个绘制轴承的图形文件:图号为mach-001,则可编制如下对话框文件(文件名为mach001.dcl): #Q{6/{bM&J
oYF8:PYB
dcl_settings:default_dcl_settings{audit_level=0;} qle\c[UM5
<O*q;&9
accept_button:ok_button{ rd"]$_P8O
<ya3|ycnS
label="确定"; KW09qar
toCN{[
key="accept"; !9!Ns(vUM
$ey<8qzp
} D"o>\Q
z[';HJ0O;
can_button:cancel_button{ "&r1&StO
ve.4""\a
label="取消"; k/LV=e7
$nVTN.k
key="cancel"; YgDgd\
V`%m~#Me
} /Ly%-py-$
"qF&%r'
mach001:dialog{ eL(T
[qy@g5`
label="机械图库—mach001"; '*T7tl
qvt~wJf<
:row{ Ri,UHI4 W
C*KRu`t
:column{ x,>=X`T
We9mkwK7C
:text{ jeW0;Cz
J~
*R&g'y^d
label="图 号:mach-001"; <1@_MYo
E:i3
/Ep?
key="num"; B@F 1!8l
jem$R/4"
width=20; "_(o% \"7
weu'<C
fixed_width=true; 0zEn`rq&
@^P=jXi<
} w,l1&=d
9M7{.XR,
…… $EtZ5?qS
dJ|]W|q<
:image{ }FFW,x
f2d"b+H#
key="img"; X&McNO6"
2V
width=40; W0?yPP=.
o30PI
height=20; ~gV|_G
E7*]t_p"
} SKYS6b
ypml22)kz
} ]];7ozS)X
U%KoG-#
spacer_1; oACE:h9U
7?kvrIuY&
:row{
@P~u k
9(H8MUF0{
:text{ x
&\~4,TN
rL%xl,cn<
label=" "; ]`|bf2*eA
x^SE>dy ?z
} ."h;H^5
nGP>M#F
accept_button; gHm^@
#4|?;C)u\
can_button; :text{ 2x`#
f0[
V^f'4*~'
label=""; H%/$Rqg
`yxk
Sb
} } FS20OD
kp0>8rkF
} @c&)K^v8
paF2{C)4
4、编制对话框控制程序(*.lsp) 7gJ`G@y
CE?R/uNo{
下面给出对话框文件mach001.dcl的控制程序mach001.lsp: >Cf]uiR
PPmZ[N9(;
(defun mach001()
r_o2d 8
Y[pGaiN:
(setq dcl_id (load_dialog "mach001.dcl")) FS']3uJ/
+]AE}UXZoh
(if (not (new_dialog "mach001" dcl_id)) TX 12$p\
QXF>xZ~
(exit)) K J~f ~2;
OtnYv
(action_tile "accept" "(draw001)") Ot/Y?=j~
uT=sDWD:
(action_tile "cancel" "(done_dialog)") jCy2bE
#$#{QEh0}
(setq x (dimx_tile "img") MenI>gd?
rb9x||
y (dimy_tile "img")) ZL@7Mr!e
B\4SB
(start_image "img") #%x4^A9 q
} #$Y^ +UN
(fill_image 0 0 x y 0) 9}": }!
9m8`4%y=
(slide_image 0 0 x y "mach(mach001)") H,?AaM[V
esxU44
(end_image) zf^!Zqn[8z
AU)Qk$c
(start_dialog) AR)&W/S)7,
&&tQ,5H5
(unload_dialog dcl_id) *X,vu2(I-=
in%+)`'nH7
) YwKY3kL
f9#B(4Tgi
(defun draw001()command "open""mach001") <}B]f1zX
CjIkRa@!x
5、编制图标菜单 Kw'A%7^e
R`/nsou
本文通过修改AutoCAD主菜单acad.mnu来实现,其操作步骤如下: 8 v&5)0u
zQ7SiRt7*
●在AutoCAD主菜单acad.mnu中加入自己的图标菜单区 -V<i4X<|,+
d<#Xqc
AutoCAD主菜单acad.mnu中的“***IMAGE”表示图标菜单区,对应幻灯片库中的幻灯片、对话框和对话框的控制程序,在图标菜单区加入以下内容(本文给出的是机械图库的图标菜单,电子图库的图标菜单与此类似): G;,2cu
K
T 0Y=gn
***IMAGE o.sa?*
A*@!tz<
**mach .-nA#/2-
=#uXO<
[电子图库] !dmI}<@&k
BEu9gu
[mach(mach001,mach001)]^C^C(load "mach001");(mach001); CK.Z-_M
b7HS3NYk
[mach(mach002,mach002)]^C^C(load "mach002");(mach002); 3WaYeol`
pcL02W|J
JTdK\A>l
.XS rLb?
[mach(mach030,mach030)]^C^C(load "mach030");(mach030); utRvE(IbmV
wGw}a[a
●将图标菜单的加载放到AutoCAD下拉菜单区 NjL,0Bp
/&dC? bY
在菜单文件acad.mnu中的***POP10(下拉菜单第十区)前加入如下内容(同时将***POP10改为***POP11): g_.BJ>Uv
nuXaZRH
***POP10 ou@Dd4
wgI$'tI
[图形库] E]"ePdZZ/
[L9e.n1
ID-ELE[电子图库]$I=ACAD.ELE + 5P+3D{
]xV7)/b5G
$I=ACAD.* KXYq|w
?6~RGg
ID-MACH[机械图库]$I=ACAD.MACH + #y2="$V
/ptIxe
$I=ACAD.* <gJ|Wee
Y#C=ku
●将修改后的菜单文件用AutoCAD中的menu命令编译成acad.mns即可。 +5 @8't
>.~^(
五、 应用效果 O{LWQ"@y
Ma wio5
进入AutoCAD操作界面后,会发现在下拉菜单区出现了“图形库”菜单项。点击下拉菜单“图形库”菜单项,弹出相应的下拉菜单项,包括“机械图库”和“电子图库”。选择“机械图库”或“电子图库”菜单项(本文使用的是“机械图库”菜单项),弹出图1所示图标菜单。通过鼠标双击图标菜单左边的列表框中的列表项或右边的图标则可弹出图2所示的对话框,该对话框给出了一些与图形有关的信息。也可以先用鼠标拾取一个列表项或图标,再点击“ok”按钮弹出对话框。对话框给出了放大的幻灯片和该幻灯片的信息。点击“确定”按钮则打开图形文件。点击“取消”按钮则不打开图形文件并关闭对话框。 3u-j`7
4B!]%Mw;c
六、 结束语 mtmtOG_/=
u'LA%l-
图形管理是CAD应用的一个重要内容,是CAD应用中较为繁琐、较为困难的部分之一。不同的用户可以有不同的图形管理方案,本文提出的方案完全基于AutoCAD的开放体系结构提供的Autolisp语言和DCL语言,旨在利用AutoCAD提供的上述两种解释性语言,以使AutoCAD用户能方便地应用。