Последние сообщения

Последние сообщения

Страницы: 1 2 [3] 4 5 ... 10
21
... шли 3 сутки - сгенерировано 19 500 000 объектов... скрипт продолжает работу..

в общем есть объекты "паразиты" ['ActiveDimStyle','Application', 'ActiveLayer', 'Database', 'ActiveLayout']
22
Но есть но, код очень медленный из за проверок что уже 2 час а он все собирает список.

23
В общем сделал проверку на уникальность str(type(obj)) в строке объектов - тут есть риск что часть полей объектов -> пропущено.

Больше не вижу вариантов.
25
Ау, вы что же там прячетесь ?
26
Добрый день!

сам код:

Код - Python [Выбрать]
  1. from win32com.client import Dispatch, gencache
  2. import inspect
  3.  
  4. def filtr_obj(obj):
  5.     """Возвращает список имён COM-объектов, в которые можно зайти."""
  6.     tmp = []
  7.    
  8.     # получаем тип объекта
  9.     type_obj = str(type(obj))
  10.    
  11.     # если это com объект а не штатная функция
  12.     if "win32com" in type_obj and not inspect.isbuiltin(obj) and not inspect.isfunction(obj):
  13.        
  14.         listNames = dir(obj)
  15.         for iName in listNames:
  16.             if not iName.startswith("_") or not iName.endswith("_"):
  17.                 tmp.append(iName)
  18.    
  19.     return tmp
  20.  
  21. def explore(obj, path, depth, max_depth, results, visited):
  22.     """Рекурсивно обходит дерево объектов COM API."""
  23.     if depth > max_depth:
  24.         return
  25.  
  26.     for name in filtr_obj(obj):
  27.         full_path = f"{path}.{name}" if path else name
  28.  
  29.         try:
  30.             value = getattr(obj, name)
  31.         except Exception:
  32.             # Если не удаётся получить атрибут — просто записываем путь и идём дальше
  33.             results.append(full_path)
  34.             continue
  35.  
  36.         results.append(full_path)
  37.  
  38.         # Чтобы избежать зацикливания (одни и те же объекты в разных местах)
  39.         if id(value) not in visited:
  40.             visited.add(id(value))
  41.             explore(value, full_path, depth + 1, max_depth, results, visited)
  42.  
  43. # ------------------- Запуск -------------------
  44. AcadAPI = gencache.EnsureModule('{5B3245BE-661C-4324-BB55-3AD94EBBFDD7}', 0, 1, 0)
  45. AcadObject = Dispatch('AutoCAD.Application.21', None, AcadAPI.IAcadApplication.CLSID)
  46.  
  47. results = []
  48. visited = set()
  49. explore(AcadObject, AcadObject.__class__.__name__, 1, max_depth=30, results=results, visited=visited)
  50.  
  51. with open("acad_object_tree.txt", "w", encoding="utf-8") as f:
  52.     f.write("\n".join(results))
  53.  
  54. print(f"Объектов собрано: {len(results)}")
  55.  

столкнулся с проблемой зацикливания - вот пример:

IAcadApplication.ActiveDocument.ActiveDimStyle.Application.ActiveDocument.ActiveDimStyle.Application.ActiveDocument.Application. и так далее

в коде можно понять что идентификаторы объектов:
IAcadApplication.ActiveDocument
и
IAcadApplication.ActiveDocument.ActiveDimStyle.Application.ActiveDocument
разные! не пойму почему так выходит. в общем не как не могу выйти из замкнутого круга..
27
2025?
На 2024 как и во всех остальных.
На 2025 теперь net 8.0 там переделывать практически всё.
28
AutoCAD .NET API / Re: AutoCAD 2025 - переползаю на Net8
« Последний ответ от izhgtumekhanik 13-08-2025, 13:19:12 »
KISS

Во во, Python - прост как пареная репа. У меня сложилось исторически - скоростная сборка (вижу цель - не вижу преград), один из постулатов который - "а лучшие ли ты выбрал инструменты для этого?"

А по сути вопроса - горячая перезагрузка - попробовал -> прикольная штука.
29
AutoCAD .NET API / Re: AutoCAD 2025 - переползаю на Net8
« Последний ответ от Алексей Кулик 13-08-2025, 12:50:15 »
азделять ответственность - эти слова да обществу в уши!
SOLID, KISS, DRY, "Банда четырех"... Все уже придумано до нас ))
30
AutoCAD .NET API / Re: AutoCAD 2025 - переползаю на Net8
« Последний ответ от izhgtumekhanik 13-08-2025, 11:52:13 »
нет конечно. если работает горячая перезагрузка, то можно переименовывать все
не помню что так можно было или не знал.. загуглил и увидел дату - 2021 год тогда я точно не знаю про это.

И у нас тут форум "AutoCAD .NET API", а не про python.
Только для сравнения. Следить за трендами в языках дабы облегчить необлегченное.
Страницы: 1 2 [3] 4 5 ... 10