如何遍历 AutoCAD 绘图的实体?
How to iterate through the entities of an AutoCAD drawing?
我想使用 Python 和 COM 接口自动处理一组 AutoCAD 文件。为此,我需要遍历每个绘图的实体。到目前为止,我已经能够通过使用 pyautocad
来完成工作。
import win32com.client
from pyautocad import Autocad
import os
folder = r'C:\path\to\my\folder'
filename = 'my_file.dwg'
drawing_file = os.path.join(folder, filename)
acad32 = win32com.client.dynamic.Dispatch("AutoCAD.Application")
doc = acad32.Documents.Open(drawing_file)
acadpy = Autocad()
entities = [acadpy.best_interface(obj) for obj in acadpy.iter_objects()]
有没有什么方法可以在不使用 pyautocad
的情况下遍历绘图实体?更具体地说,我正在寻找这样的东西:
entities = [obj for obj in acad32.Objects]
显然 acad32
没有任何类似于 Object
、Entities
或任何可能对解决我的问题有用的属性:
In [239]: doc.__dict__
Out[239]:
{'_oleobj_': <PyIDispatch at 0x00000281D7C162E0 with obj at 0x00000281D79D9298>,
'_username_': 'Open',
'_olerepr_': <win32com.client.build.LazyDispatchItem at 0x281da18f1d0>,
'_mapCachedItems_': {},
'_builtMethods_': {},
'_enum_': None,
'_unicode_to_string_': None,
'_lazydata_': (<PyITypeInfo at 0x00000281D7C16580 with obj at 0x00000281D7C08648>,
<PyITypeComp at 0x00000281D7C16310 with obj at 0x00000281D7C08808>)}
假设您想遍历驻留在模型空间中的对象,您可以尝试以下几行:
for obj in doc.Modelspace
如果您需要遍历所有布局(不仅仅是模型空间)中的所有对象,您可以使用:
for lyt in doc.Layouts
for obj in lyt.Block
或者,如果您需要遍历所有布局和块(包括外部引用)中的所有对象,您可以使用:
for blk in doc.Blocks
for obj in blk
这当然是未经测试的,并且假设所有这些属性都暴露给 Win32 COM 接口。
可以找到官方 AutoCAD ActiveX 参考 here。
我想使用 Python 和 COM 接口自动处理一组 AutoCAD 文件。为此,我需要遍历每个绘图的实体。到目前为止,我已经能够通过使用 pyautocad
来完成工作。
import win32com.client
from pyautocad import Autocad
import os
folder = r'C:\path\to\my\folder'
filename = 'my_file.dwg'
drawing_file = os.path.join(folder, filename)
acad32 = win32com.client.dynamic.Dispatch("AutoCAD.Application")
doc = acad32.Documents.Open(drawing_file)
acadpy = Autocad()
entities = [acadpy.best_interface(obj) for obj in acadpy.iter_objects()]
有没有什么方法可以在不使用 pyautocad
的情况下遍历绘图实体?更具体地说,我正在寻找这样的东西:
entities = [obj for obj in acad32.Objects]
显然 acad32
没有任何类似于 Object
、Entities
或任何可能对解决我的问题有用的属性:
In [239]: doc.__dict__
Out[239]:
{'_oleobj_': <PyIDispatch at 0x00000281D7C162E0 with obj at 0x00000281D79D9298>,
'_username_': 'Open',
'_olerepr_': <win32com.client.build.LazyDispatchItem at 0x281da18f1d0>,
'_mapCachedItems_': {},
'_builtMethods_': {},
'_enum_': None,
'_unicode_to_string_': None,
'_lazydata_': (<PyITypeInfo at 0x00000281D7C16580 with obj at 0x00000281D7C08648>,
<PyITypeComp at 0x00000281D7C16310 with obj at 0x00000281D7C08808>)}
假设您想遍历驻留在模型空间中的对象,您可以尝试以下几行:
for obj in doc.Modelspace
如果您需要遍历所有布局(不仅仅是模型空间)中的所有对象,您可以使用:
for lyt in doc.Layouts
for obj in lyt.Block
或者,如果您需要遍历所有布局和块(包括外部引用)中的所有对象,您可以使用:
for blk in doc.Blocks
for obj in blk
这当然是未经测试的,并且假设所有这些属性都暴露给 Win32 COM 接口。
可以找到官方 AutoCAD ActiveX 参考 here。