在我之前的文章中,我讨论了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 对象包含的 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 自动化帖子的链接列表:
- 链接: AutoCAD pyautocad 模块的 Python
- 链接: pyautocad 中的 add() 方法
- 链接: 已解决的调用被 pythoncom 中的被调用者拒绝
- 链接: 使用 Python 的 AutoCAD 对象的树数据结构
- 链接: 在 AutoCAD 中使用 Python 中的 pyautocad 扩展对象
- 链接: 使用 Python 列表和字典通过 pyautocad 处理 AutoCAD 对象
- 链接: 在 AutoCAD 模板上使用 Python 中的 pywin32 孵化对象
- 链接: AutoCAD 中的光栅图像对象与 Python 中的 pyautocad
- 链接: 在 AutoCAD 中使用 Python 中的 pyautocad 处理 3D 网格对象
- 链接: 在 Python 中使用 pywin32 创建双构造函数
- 链接: 在 Python 中使用 pywin32 创建点方法
- 链接: 使用 pywin32 和 win32com 与 AutoCAD 集成 Python
- 链接: 在 Python 中使用 pyautocad 和 pywin32 删除 AutoCAD 模板中的对象
- 链接: 在 Python 中使用 pyautocad 在 2D 平面上镜像对象
- 链接: 在 Python 中使用 pyautocad 在 Autocad 中处理文本
- 链接: 在 AutoCAD 中使用 Python 中的 pyautocad 中的极坐标数组
- 链接: 在 AutoCAD 中使用 Python 中的 pyautocad 中的矩形数组
- 链接: 在 Python 中使用 pyautocad 对 AutoCAD 对象进行操作
- 链接: 在 AutoCAD 中使用 Python 中的 pyautocad 中的实体对象
- 链接: 在 AutoCAD 中使用 Python 中的 pyautocad 处理螺旋
- 链接: 在 AutoCAD 中使用 Python 中的 pyautocad 绘制样条线
- 链接: pyautocad 中的折线,用于在 Python 中绘制 AutoCAD 多边形
- 链接: 在 AutoCAD 中使用 Python 中的 pyautocad 绘制椭圆弧
- 链接: 在 AutoCAD 中使用 Python 中的 pyautocad 绘制圆弧
- 链接: 使用 Promodel AutoCAD 版本几乎同时进行工厂设计和流程优化
- 链接: AutoCAD pyautocad 模块的 Python
- 链接: 使用 Python 的 AutoCAD 中的区域对象
- 链接:Python 中的 AutoCAD 应用程序对象类
Leave a Reply