如何使用 .NET 获取所有打开的 AutoCad 文档(图纸)

Posted

技术标签:

【中文标题】如何使用 .NET 获取所有打开的 AutoCad 文档(图纸)【英文标题】:How to Get all opened AutoCad documents(drawings) using .NET 【发布时间】:2012-06-02 18:00:44 【问题描述】:

我正在使用 AutoCAD 2012 和 .NET API。有人可以帮我如何遍历所有打开文档的文档对象吗?我正在尝试执行以下代码之类的操作..我在 Autodesk 论坛上也有这个问题..但不确定它的活跃程度:)

public void GetDocNames()
        
            DocumentCollection docs = Application.DocumentManager;

            for (int i = 0; i < docs.Count; i++)
            
                AcadDocument doc = docs[i];
                Debug.Print(doc.Name);
            
        

【问题讨论】:

【参考方案1】:

VB.NET 版本:

Private Sub getAcadDocNames()
    'collection of all opened documents
    Dim AcadDocs As DocumentCollection = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager 

    For Each doc As Document In AcadDocs
        Debug.Print(doc.Name)
    Next doc
End Sub

请注意,如果您还导入了 System.Windows.Forms(也有一个 Application 命名空间),您可能希望完全限定 DocumentManager 属性的路径(就像我在这里所做的那样)。

【讨论】:

【参考方案2】:

您已经标记了 C# 和 VB.NET。 C#版本如下:

public void GetDocNames()

  DocumentCollection docs = Application.DocumentManager;

  foreach (Document doc in docs)
  
    Application.ShowAlertDialog(doc.Name);
  

【讨论】:

所以如果我想激活第三个文档,我必须在这个 foreach 循环中循环所有文档?在 VBA 时代,我们可以使用 Documents(2).Activate @vinayan 我不知道从集合中间提取单个文档的方法。也许您可以提供有关您正在执行的操作的更多详细信息?如果您只在一个文档上执行它,那么您可以在 AutoCAD 中选择它并使用DocumentCollection.MdiActiveDocument 从集合中返回正确的文档。 我试图让用户从一张图纸中选择一个实体..然后程序将自动切换到另一张图纸并提示用户从该图纸中选择一个实体..几何第一个对象将被第二个对象替换..感谢您的回答..我认为我仍然可以通过循环来做到这一点.. 为此使用 Linq:Document document = Application.DocumentManager.OfType&lt;Document&gt;().ToArray()[2];

以上是关于如何使用 .NET 获取所有打开的 AutoCad 文档(图纸)的主要内容,如果未能解决你的问题,请参考以下文章

AutoCAD.Net/C#.Net QQ群:193522571 C#判断文件夹是否已经打开

如何使用 C# 在 Autocad 文件中获取标签名称

AutoCAD二次开发-使用ObjectARX向导创建应用程序(HelloWorld例子)

如何在不打开CAD文件的情况下,获取该文件中起作用的标注样式中的全局比例和图形范围。

在 VB.NET 中导入 Autodesk.AutoCAD

如何使用 C# 关闭 Autocad 中的文件以保持 acad.exe 运行?