如何遍历AutoCAD图形的图元?

2024-10-01 22:42:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望使用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没有任何类似于ObjectEntities或任何可能有助于解决我的问题的属性:

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>)}

Tags: import实体clientobj图形withfolderat
1条回答
网友
1楼 · 发布于 2024-10-01 22:42:44

假设您希望迭代驻留在Modelspace中的对象,可以尝试以下方法:

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中找到

相关问题 更多 >

    热门问题