Как перебирать объекты чертежа AutoCAD? - PullRequest
0 голосов
/ 08 апреля 2020

Я хочу автоматизировать обработку набора файлов AutoCAD, используя Python и интерфейс COM. Для этого мне нужно пройтись по сущностям каждого рисунка. До сих пор мне удавалось выполнить работу, используя 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>)}

1 Ответ

1 голос
/ 08 апреля 2020

Предполагая, что вы хотите перебирать объекты, находящиеся в пространстве моделей, вы можете попробовать что-то вроде следующего:

for obj in doc.Modelspace

Если вам нужно перебрать все объекты во всех слоях (не только в пространстве моделей) , вы можете использовать:

for lyt in doc.Layouts
    for obj in lyt.Block

Или, если вам нужно перебрать все объекты во всех макетах и ​​блоках (включая внешние ссылки), вы можете использовать:

for blk in doc.Blocks
    for obj in blk

Это конечно, не проверено и предполагает, что все эти свойства доступны для COM-интерфейса Win32.

Официальную ссылку AutoCAD ActiveX можно найти здесь .

...