一、引言
用户在使用AutoCAD时可能会发现这样现象,尽管图面实体比较简单,但绘图文件(DWG文件)却很大,这是什么原因呢?原因是使用AutoCAD过程中,绘图文件中的数据库将用户的每一步操作、所有曾经绘制的实体(含已删除的)、插入的图块、线型、图层等一一记录。而使用来说,这些中间数据是可有可无的,但是它们的存在却使文件变大,从而造成文件的调用、存盘和备份存档等工作的不便。虽然AutoCAD软件本身如(R14)提供了专门的清理命令Purge,它可以把多余的中间信息从文档数据库中彻底删除,使文件精简。但对一个较大AutoCAD应用单位来说,经常需要对成千上万个DWG文件的进行备份存档,因此对这些文件作精简处理是必要的,但如果通过系统管理员一一打开每个文件,再键入Purge命令来处理,工作量太大。如果能设计一个批处理程序对磁盘上的DWG文件进行自动批处理,将起到事半功倍的作用。
二、程序设计思想
首先通过VB来设计窗体,窗体包含磁盘列表框、目录列表框和文件列表框等控件,利用这些控件来在磁盘中选择要作精简处理的DWG文件;然后通过ActiveX Automation启动AutoCAD应用程序打开DWG文件进行处理。处理过程将用到如下几个函数。
l GetObject用于在系统已经加载AutoCAD时检索AutoCAD应用程序对象;
l CreateObject用于在未加载Autocad情况下创建AutoCAD应用程序对象;
l AcadDoc.Open函数用于打开指定路径下的DWG文件,acadDoc.Save保存所编辑的文件;
l AcadDoc.Activeviewport.Zoomall用于将全部图形缩放在视口中;
l AcadDoc.Purgeall用于从文档中删除所有不用的块、图层及线型等实体,相当于在AutoCAD环境下使用Purge命令并选择All并对purge everything?回答yes,重复使用该命令4~5次以确保删除干净。
l AcadApp.Quit用于对AutoCAD应用程序卸载。
三、程序详细设计
1.使用VB新建一个工程,并按下表实现窗体:
对象 |
属性 |
设置值 |
窗体 |
Name
Caption |
FilePurge
DWG文件清理 |
标签 |
Name
Caption |
Label1
驱动器 |
标签 |
Name
Caption |
Label2
目录 |
标签 |
Name
Caption |
Label3
要清理的文件 |
标签 |
Name
Caption |
Label4
处理前大小 |
标签 |
Name
Caption |
Label5
处理后大小 |
磁盘列表框 |
Name |
Driver1 |
目录列表框 |
Name |
Dir1 |
文件列表框 |
Name
MultiSelect
pattern |
File1
2-extend
*.dwg |
文本框 |
Name
Caption |
Text1
“” |
文本框 |
Name
Caption |
Text2
“” |
按钮 |
Name
Caption |
CmdSelall
全选 |
按钮 |
Name
Caption |
CmdDo
处理 |
按钮 |
Name
Caption |
CmdExit
退出 |
2.窗体的外观如下图所示:
3.在窗体的代码窗中添加如下代码:
Public path '定义路径公共变量
Private Sub CmdDo_Click()
Size = 0
On Error Resume Next
Set acadApp = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set acadApp = CreateObject("AutoCAD.Application")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
Set acadDoc = acadApp.ActiveDocument '设定文档对象
For i = 0 To File1.ListCount - 1 Step 1
If File1.Selected(i) Then '对当前文件列表框中的选中文件进行处理
a = path + File1.List(i) '获得文件名
File1.Selected(i) = False
acadDoc.open a
acadDoc.Activeviewport.zoomall
acadDoc.purgeall
acadDoc.purgeall
acadDoc.purgeall
acadDoc.purgeall
acadDoc.save
Size = Size + FileLen(a)
End If
Next i
Text2.Text = Str(Size) '显示所选文件处理后的大小(字节)
acadApp.quit
End Sub
Private Sub CmdExit_Click()'结束程序
End
End Sub
Private Sub CmdSelall_Click()'选择当前目录下的所有DWG文件
For i = 0 To File1.ListCount - 1 Step 1
File1.Selected(i) = True
Next i
Text1.Text = cal_size
End Sub
Private Sub Dir1_Change()
Text2.text= ""
End Sub
Private Sub Dir1_Click()
Dir1.path = Dir1.List(Dir1.ListIndex)
path = Dir1.path
If Right$(path, 1) <> "\" Then
path = path + "\"
End If
File1.path = path
Text1.Text = ""
Text2.Text = ""
End Sub
Private Sub Drive1_Change()
Dir1.path = Drive1.Drive
Dir1_Click
End Sub
Private Function cal_size() As String'计算当前目录下所中的DWG文件大小
Dim len1 As Long
len1 = 0
For i = 0 To File1.ListCount - 1 Step 1
If File1.Selected(i) Then
len1 = len1 + FileLen(path + File1.List(i))
End If
Next i
cal_size = Str(len1)
End Function
Private Sub File1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.Text = cal_size
End Sub
4.将工程编译成可执行文件,运行后将出现下图所示的清理界面:
四、结束语
通过编制上述的小程序,可方便地对磁盘中的DWG文件进行精简处理,从处理的效果看,对于一般在AutoCAD环境下未经Purge命令处理的文件,可将其大小缩小2至4倍,个别文件可“减肥”10倍以上。
|