pyautocad 中的 AutoCAD 文档对象

在我之前的文章中,我讨论了AutoCAD 应用程序对象类。任何AutoCAD应用程序中最重要的部分是 Document 对象。这是因为用户在此 Document 对象上执行所有操作。因此,我正在撰写这篇新博文,涵盖 AutoCAD 文档对象类。

pyautcad 模块及其替代品

首先,让我提一下我将要使用的模块以及其他可用的选项。

正如您可能从本文的标题中猜到的那样,我在本教程中使用了 pyautocad 模块。此外,为了能够访问文档本身,我使用的是 acad.doc。您将在下面的代码中看到这一点:

from pyautocad import Autocad, APoint, aDouble

acad = Autocad(create_if_not_exists=True)

print(acad.doc.Name)

O/p:
Drawing1.dwg

但是,我也可以使用通信模块。也就是pyautocad以外的其他模块。在下面的示例中,我使用 pythoncom 和win32com(所谓的通信模块)来访问 AutoCAD Document 对象类。

from win32com.client import *
import pythoncom
import win32com

acad1 = win32com.client.Dispatch("AutoCAD.Application")
print(acad1.ActiveDocument.Name)

O/p:
Drawing1.dwg

AutoCAD 文档对象类的属性

在开始本主题之前,我将介绍 AutoCAD 文档对象的一些重要属性。我发现这些属性很重要,因为它们可以用于各种自动化目的。

例如,AutoCAD 一次处理一个文档。AutoCAD 文档对象包含许多对象,例如图层、布局、标注样式、视口、UCS 和其他对象类型。在这些对象中,只有一个可以在任何给定时间点处于活动状态。

例如,一个 Document 对象可以包含 n 个层。但是,一次只能激活这些层中的一个。

要检查存在的文档是否实际上是当前活动的文档,我可以使用 Active 方法。此方法返回一个布尔值。您可以在下面的示例中看到这一点:

# determine if the document is the active document
print(acad.doc.Active)

O/p:
True

同样,要检查其他 Active 子对象,我可以使用 Active<ObjectName> 格式的方法名称的方法。一些示例可能是 ActiveLayout、ActiveLayer、ActiveViewport 等。

下面列出了可以使用的对象名称:

  • 昏暗风格
  • 布局
  • 线型
  • 材料
  • 视口
  • 选择集
  • 空间
  • 文本样式
  • 统一通信系统
  • 视口

我将展示如何使用其中一些对象。

print(acad.doc.ActiveDimStyle.Name)
print(acad.doc.ActiveLayer.Name)
print(acad.doc.ActiveLayout.Name)

O/p:
ISO-25
0
Model
AutoCAD Document 对象类文档,图 1.1:ActiveDimStyle
ActiveDimStyle
AutoCAD Document对象类文档,图1.2:ActiveLayer
活动层
AutoCAD Document 对象类文档,图 1.3:ActiveLayout
主动布局

同样,我也可以使用其他属性。这些属性返回可以进一步处理的相应对象。以后我会发布更详细的文章来讨论这个问题。

访问 AutoCAD 文档对象块属性

继续前进,要获取 Document 对象包含的 Blocks 对象,我可以使用 Blocks 属性。这将返回 AutoCAD 文档对象中存在的各种 AutoCAD 块对象的集合。

print(acad.doc.Blocks)
for i in (acad.doc.Blocks):
    print(i.Name)

O/p:
<comtypes.client.lazybind.Dispatch object at 0x00000209E60C1D60>
*Model_Space
*Paper_Space
*Paper_Space

如果我想返回对象所属的数据库,我可以使用 Database 对象。简单地说,这将返回数据库对象。它没有任何名称属性。

acad.doc.Database

O/p:

<comtypes.client.lazybind.Dispatch object at 0x0000024FA64175B0>

AutoCAD 文档对象包含的子对象

前面我讨论过 AutoCAD 文档对象包含多个子对象。这些对象以它们自己特定类型的对象的形式存在,例如图层、材质、线型等。

为了指出这些集合,我可以简单地使用带有它们名称的方法。如果我想访问集合中存在的每个对象,那么我可以对其进行迭代。就像我在 Blocks 中所做的那样。

对象集合列表如下:

  • 字典
  • 暗淡风格
  • 图层
  • 布局
  • 线型
  • 材料
  • 模型空间
  • 纸空间
  • 绘图配置
  • 注册申请
  • 选择集
  • 文本样式
  • 用户坐标系统
  • 视口
  • 意见

现在我已经列出了所有的对象集合,让我举一个例子来说明如何使用这些方法。

print(acad.doc.DimStyles)
for i in (acad.doc.DimStyles):
    print(i.Name)

O/p:
<comtypes.client.lazybind.Dispatch object at 0x00000209F4F11D00>
Standard
Annotative
ISO-25

同样,也可以获取其他重要属性,如下面的代码所示。

# height of document window
print(acad.doc.Height)

# width of document window
print(acad.doc.Width)

# lower Left to Upper Right Limits
print(acad.doc.Limits)

# return a boolean value for ObjectSnapMode to check if it is on/off
print(acad.doc.ObjectSnapMode)

# path of Document
print(acad.doc.Path)

# return if Document is ReadOnly/Read-Write using boolean value
print(acad.doc.ReadOnly)

# check if document contains any unsaved changes using boolean value
print(acad.doc.Saved)

# returns SummaryInfo objects which contains document metadata (Title, subject, author, keywords)
print(acad.doc.SummaryInfo)

# returns if window is Minimized, Maximized or in a Normal state
print(acad.doc.WindowState)

# returns the document title
print(acad.doc.WindowTitle)

O/p:

818
1517
(0.0, 0.0, 420.0, 297.0)
False
C:\Users\91998\OneDrive\Documents
False
False
<comtypes.client.lazybind.Dispatch object at 0x000001C227C460D0>
3
Drawing1.dwg

AutoCAD中Document对象类的方法

既然我已经介绍了 AutoCAD Document 对象的各种属性,我将继续讨论 AutoCAD Document 类的一些重要方法。

事实上,我所说的第一个方法是 Activate() 方法。要激活任何文档,我可以使用此方法。

acad.doc.Activate

此后,为了评估任何绘图的完整性,我可以使用 AuditInfo() 方法。在这里,我可以将 true 或 false 作为参数传递给我是否希望 AutoCAD 修复它遇到的问题。

acad.doc.AuditInfo(True)

当然,也有一些再生、保存和关闭的方法。

# regenerate drawing
acad.doc.Regen

# save drawing
acad.doc.Save

# while closing pass boolean to save changes or not followed by drawing name
acad.doc.Close(False, "Drawing2.dwg")3

最后,要从文档中删除未使用的命名引用,如块或层,我可以使用 PurgeAll 命令。

acad.doc.PurgeAll

总结和结束语

最后,我得出以下结论:使用本文中介绍的 AutoCAD Document 类方法,我可以自动执行不同的 Document 对象相关任务。这可用于自动化和优化与 AutoCAD 相关的工作流程。

最后,如有任何疑问,请随时在评论部分下方发表评论。我也愿意接受技术咨询,您可以使用我们的联系表与我联系。请查看我的其他博客,其中涵盖了用于AutoCAD 自动化的 pyautocad 和pywin32 Python 模块的各个方面。

相关 AutoCAD 自动化文档的参考

现在,我在此博客上发布的各种AutoCAD 自动化帖子的链接列表:

You May Also Like

Leave a Reply

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据