摘 要: 介绍在AutoCAD环境下创建和管理图形库的一种方案、开发环境、流程等。使用图标菜单和合适的对话框展示图文并茂的图形信息,展示了方法的良好效果。 ;rJ/Diz!g
:|E-Dx4F6H
一、前言 4.i< `'
Qj/.x#T
AutoCAD软件具有相当优秀的开放型结构(Open architecture)和一个强大的内部编程语言(Autolisp语言,可以完成一些计算机工作和作图功能),可以方便地让用户随意地开发自己的命令、标准库文件和各种应用程序等。 >{w"aJ" F
dW2Lvnh!>/
图形管理是CAD应用的一个重要内容,是CAD应用中较为繁琐、较为困难的部分之一。用户在实际应用中总是为图形太多无法管理大伤脑筋。本文提供了一个图形库创建和管理的方法,其最终效果是展示一个方便快捷、图文并茂的直观的图形库。 ZNTOI]P&
){ ,v&[
二、 方案设计 8>~\R=SC
:k7h"w
1、实现方案 *D$Hd">X
d^YM@>%
许多AutoCAD用户在图形库的创建和管理方面都使用一种较为简便的方法:将图形文件命名为能体现其图形内容的名称,然后将其分类存入特定的文件夹。这种方法的优点在于简便快捷,但其不方便、不直观的缺点却更为突出。 %oN5 jt
'hH3d"a^=
针对上述的简便方法,本文提出的方案方便、直观且内置于AutoCAD中。该方案如下: xO` O$ie
{qjw
S1v
●生成所有图形的幻灯片文件; A@k`$xevVj
J+20]jI
●在AutoCAD初始化界面的下拉菜单区加入“图形库”菜单条,此菜单条包含“机械图库”和“电子图库”两个菜单项; CLX!qw]@ +
dd@-9?6M
●点击“机械图库”和“电子图库”两个菜单区弹出相应的图标菜单,在图标菜单中可以看到图形文件标识名和相应的图形(幻灯片); ~xP4}gs1
M?zwXmTVW0
●在图标菜单中拾取图形弹出一幅对话框,该对话框给出图形的一些文字信息(如:作者, 图形内容, 绘图日期, 图号等)和图形的预览; K#<cuHGC
vd}Y$X
●点击对话框的确定按钮即可打开拾取的图形文件。 Dwp-*QK^G
n{v[mqm^
2、方案论证 c2fbqM~
j_2yTz"G-
该方案的关键在于图标菜单和对话框。 OKp0@A)8
f-/zR %s{
●图标菜单: 982n G-"
;`MKi5g
图标菜单是AutoCAD菜单的一种。图标菜单以20个为一组显示幻灯片,并同时显示一个包含有幻灯片名或其他文字的滚动列表框。图标菜单的长度不受限制,如果一个图标菜单包含的幻灯片多于20个AutoCAD会提供换页按钮,以便让用户换页显示更多的幻灯片。因此,可以利用AutoCAD的开放型体系结构上的二次开发定制图标菜单来对图形库进行管理。 Xeo2 < @[
5t&;>-A'?'
图标菜单也有不足之处。图标菜单的一个页面需显示20幅幻灯片,所以只能从中获得比较概略的图形信息(尤其是复杂图形)。所以,需要采取一定的辅助措施来对使用图标菜单的缺陷进行弥补。 BK16~Wl
E[N3`"
●对话框: @z1Yj"^Pm
)"Vd8*e
从用户观点来看,窗口操作环境是目前最先进最流行的一种人机交互界面。它能控制光栅扫描型显示器和以鼠标器为代表的输入设备, z&r@c-l@
iw==q:$
向用户提供了图文并茂的可视化环境,是操作更为直观、自然、简便和快速。 8LM 91
nd)bRB
AutoCAD R12以上版本提供了一种对话框语言(Dialog-box Control !uJDhC
+Tug.[A
Language,缩写为DCL),允许用户设计并实现自己的对话框。因此, 可以使用对话框语言编程来对图标菜单中图形进行放大并提供图标菜单中不能提供的文字信息。 g1TMyIUt[
b/eJEL
三、 开发环境 M@b:~mI[sw
[b<AQFh<c
●486以上微机 cK(S{|F
I "<ACM
●win95或win98操作系统
*[^[!'kT&
[Q5>4WY
●AutoCAD R12以上版本(本文提供方案在R12、R13、R14中都能实现,但本文提供的开发步骤主要是在R14中实现) _:0
`78:TU~5S
四、 开发步骤 k&h3"
-
P$mN6h
1、建立图形库文件夹 qz
.{[l
L)`SNN\ipR
在AutoCAD目录下创建文件夹Storeroom,将需要进入图形库进行管理的图形文件存入该文件夹。 8qY\T0
Z* Fxr;)d
2、制作幻灯片库(*.SLB) ,J3s1 ]~^
!jeoB
◆制作幻灯片文件(*.SLD) e
MT5bn
Nhnw'9
在当前视窗中打开图形文件,并将图形移到屏幕中央。然后在命令行键入MSLIDE命令并在“Creat slide KDODUohC
*$eMM*4
file”框中键入幻灯片名(按下〈return〉键则将当前图形名作缺省幻灯片名接受)。为了创建幻灯片库,将所有幻灯片文件保存到AutoCAD目录下的support子目录中。 }c$@0x;YQ
bm+
#OI
◆创建幻灯片列表文件(*.txt) 3+j!{tJ
z2
lS.&>{
假设有mach001.dwg~mach030.dwg共30个图形文件和对应的mach001.sld~mach030.sld共30个幻灯片文件,编辑如下文件(文件名为mach.txt): C;C= g1I}
I#m0n%-[
mach001.sld cn~M:LW23
M'
d ,TV[
mach002.sld CPto?=*A
0+]ol:i
mach003.sld V#Hg+\{d
B7^*xskH
. %xq/eC7
I|27%i
mach030.sld >8*J ;(:W
+l "z
◆幻灯片库的建立 X4"D Lt"
Q,.[y"m9Y.
使用AutoCAD的support目录中的实用程序slidelib,将幻灯片文件按照文件列表构造成幻灯片库mach.slb: Sl?@c/Ng
?=22@Q}g
slidelib mach <ETR6r
t3dvHU&Z:
3、编写对话框文件(*.dcl) Y30e7d* qr
cM= ?{W7~
对话框主要是展示一个图文并茂的图形库中的图形,在对话框中不仅要有图形预览,还要有该图形的一些文字说明。假设图形库中的mach001.dwg是一个绘制轴承的图形文件:图号为mach-001,则可编制如下对话框文件(文件名为mach001.dcl): aOj(=s
dZ1/w0<M2
dcl_settings:default_dcl_settings{audit_level=0;} [-*1M4D9
HX(Z(rcI
accept_button:ok_button{ _|!FhZ
}5 2]
label="确定"; M+mO4q6
nsRZy0@$t
key="accept"; \,b@^W6e>
)9.i'{{ 0
} _Py/,Ks.q
'DB4po.
can_button:cancel_button{ Q/y^ff]=
Ax9a5;5WM
label="取消"; zj ?^,\{A
ubpVrvu@
key="cancel"; 4!%TY4bJ
Q9UBxpDV:
} zi-;7lT
: " ([i"
mach001:dialog{ B_^ ~5_0:
7(q EHZEr
label="机械图库—mach001"; w4S0aR:yL
xS4B"/
:row{ Jj~c&LxrO
)<.BN
p
:column{ {iyO96YI[^
C;u8qVI
:text{ L=7U#Q/DE
m_
|:tU(t
label="图 号:mach-001"; dKOW5\H'
(&=<UGY(w
key="num"; ]/o0p
Ac0^`
width=20; i|@lUXBp
=`8%qh
fixed_width=true; `W3;LTPEb
V!sT2
} |
JmEI9n2
R::0.*FF
…… \Bg;^6U
-|?I'~[#(
:image{ Kc6p||<
5$v,%~$Xds
key="img"; peA}/Jc
Po%+:0oX
width=40; x>u \
i|z=q
height=20; ZB+N[VJs)
zL1*w@6
} <Ae1YHUY
7XZ5CX&
} ?,_$;g
8{m5P8w'
spacer_1; d)G'y
$.a4Og2
:row{ hdi/ k!9[\
eV?._-G
:text{ J 8/]&Ow
e?Pzhha
label=" "; >S3,_@C
GI&XL'K&
} E>/kNl
2D5S%27,
accept_button; B.wRZDEvc
@Axwj
can_button; :text{ Im
NTk
*,/ADtL
label=""; FME&vUh/
{uurM`f}:
} } q,#j
*
P/BWFN1
} 8"d0Su4r
uR|?5DK
4、编制对话框控制程序(*.lsp) r<Il;?S6
mN>7vJ
下面给出对话框文件mach001.dcl的控制程序mach001.lsp: th@a./h"
"bO\Wt#Mf
(defun mach001() %i7bkdcwk
yPgDb[V+
(setq dcl_id (load_dialog "mach001.dcl")) %J*z!Fe8s
D1&%N{
(if (not (new_dialog "mach001" dcl_id)) *O>OHX
pEc|h*p8
(exit)) `+IB;G1
JGP<'6"L$
(action_tile "accept" "(draw001)") 7Z-'@m
J 3oEN'8S
(action_tile "cancel" "(done_dialog)") #WBlEVx;Z
~m
,xG
(setq x (dimx_tile "img") '@Zau\xC
k4|9'V&1*6
y (dimy_tile "img")) Yx- 2ux
RC_w 1:h
(start_image "img") 111s%
k7rFbrLZ
(fill_image 0 0 x y 0) $T\W'WR>
~9&