访问autocad对象属性而无需通过VBA打开它

时间:2015-05-19 22:58:27

标签: vba autocad

我一直在使用VBA的文件夹浏览器,我可以粘贴它的代码,但底线是我得到的文件名作为字符串返回。 有没有办法在没有打开的情况下访问图纸属性(即布局数量)?

Public Sub TestFileDialog()
    dwgname = FileBrowseOpen("C:", "*", ".dwg", 1) 'dwgname is typeof string
End Sub

它只是第一步(使用FileBrowseOpen函数显示,但我也可以使用FolderBrowse并收集文件夹中的所有.dwg),实际上我想到将所选.dwgs的所有布局批量导出到currenty打开一个。有没有机会呢?

2 个答案:

答案 0 :(得分:2)

要有效阅读.dwg文件,您需要打开AutoCAD,否则无法访问该信息。某些属性可能是作者,但不是布局数量......

但您可以使用AutoCAD Console(accoreconsole.exe)运行无头AutoCAD并使用API​​读取您需要的任何信息。这对于阅读很多文件非常快,用户不会看到它正在运行(但无论如何都需要安装)。

http://aucache.autodesk.com/au2012/sessionsFiles/3338/3323/handout_3338_CP3338-Handout.pdf

答案 1 :(得分:1)

你可以留在VBA并使用ObjectDBX 它导致了与.NET中的accoreconsole.exe一样非常类似的方法,即你不会在UI中看到任何绘图,因为它适用于数据库本身 它需要将库参考(工具 - >参考)添加到“AutoCAD / ObjectDBX Common XX.Y类型库”,其中“XX.Y”是“19.0”用于AutoCAD 2014 最小功能代码是

Sub main()

Dim myAxDbDoc As AxDbDocument
Dim FullFileName As String

FullFileName = "C:\..\mydrawing.dwg"  '<== put here the full name of the file to be opened
Set myAxDbDoc = AxDb_SetDrawing(FullFileName)
MsgBox myAxDbDoc.Layers.Count

End Sub



Function AxDb_SetDrawing(FullFileName As String) As AxDbDocument
Dim DBXDoc As AxDbDocument

Set DBXDoc = Application.GetInterfaceObject("ObjectDBX.AxDbDocument.19") '<== place correct AutoCAD version numeber ("19" works for AutoCAD 2014)

On Error Resume Next
DBXDoc.Open FullFileName
If Err <> 0 Then
    MsgBox "Couldn't open" & vbCrLf & vbCrLf & FullFileName, vbOKOnly + vbCritical, "AxDB_SetDrawing"
Else
    Set AxDb_SetDrawing = DBXDoc
End If
On Error GoTo 0

End Function

但是,您必须运行一个AutoCAD会话才能运行此子程序!但是自从谈到“当前开放”的绘图以来你应该拥有它