Получение документов, подключенных к моделям 🤔

Автор ja49619, 04.01.25, 13:48:22

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

ja49619

Всем привет,
пытаюсь получить подключенные к 3Д модели документы, для детали это чертеж, для сборки это чертеж и спецификация.
нашел свойство, которое так и называется ObjectAttachedDocuments - Список подключенных к объекту документов

читаю модели, но получаю только спецификации без чертежей

кто знает в чем ошибка?

from win32com.client import Dispatch, gencache

API7 = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
IApplication = Dispatch("Kompas.Application.7")
IDocuments = IApplication.Documents

# пример для детали
IKompasDocument = IDocuments.Open("d:\\test6\\Деталь.m3d", False, False)
IKompasDocument3D = API7.IKompasDocument3D(IKompasDocument)
IPart7 = IKompasDocument3D.TopPart
IPropertyKeeper = API7.IPropertyKeeper(IPart7)
IProductDataManager = API7.IProductDataManager(IKompasDocument)
ObjectAttachedDocuments = IProductDataManager.ObjectAttachedDocuments(IPropertyKeeper)
print(f"{IPart7.FileName}: {ObjectAttachedDocuments}")

# пример для сборки
IKompasDocument = IDocuments.Open("d:\\test6\\Сборка.a3d", False, False)
IKompasDocument3D = API7.IKompasDocument3D(IKompasDocument)
IPart7 = IKompasDocument3D.TopPart
IPropertyKeeper = API7.IPropertyKeeper(IPart7)
IProductDataManager = API7.IProductDataManager(IKompasDocument)
ObjectAttachedDocuments = IProductDataManager.ObjectAttachedDocuments(IPropertyKeeper)
print(f"{IPart7.FileName} {ObjectAttachedDocuments}")

вывод, спецификация есть, чертежей нет:
d:\test6\Деталь.m3d None
d:\test6\Сборка.a3d - ('d:\\test6\\Спецификация сборки.spw',)
детали V22.rar

Lemieux

Получите PropertyKeeper от IKompasDocument3D.
Тут тема по соседству, что API КОМПАС 22 кривое. Впрочем как и у всех КОМПАС  :-)))

UU

Цитата: Lemieux от 04.01.25, 14:01:06Получите PropertyKeeper от IKompasDocument3D.
Тут тема по соседству, что API КОМПАС 22 кривое. Впрочем как и у всех КОМПАС  :-)))
Компас v22, IPropertyKeeper от IPart7 и от IKompasDocument3D.


ja49619

#3
в общем получил чертежи через парсинг IPropertyKeeper.Properties, не знаю насколько это правильный подход или костыль, но результат есть

           
ProductObjects = IProductDataManager.ProductObjects(1)
if isinstance(ProductObjects, tuple):
    for obj in ProductObjects:
        if type(obj).__name__ == "IPropertyKeeper":
            metadata = obj.Properties
            match = re.search(r'<property [^>]*value="([^"]+)"', metadata)
            if match:
                value = match.group(1)
                if value.lower().endswith('.cdw'):
                    print(f"К модели {IPart7.FileName} прикреплен чертеж: {value}")


вывод:
К модели d:\test6\Деталь.m3d прикреплен чертеж: D:\test6\Чертеж детали2.cdw
К модели d:\test6\Деталь.m3d прикреплен чертеж: d:\test6\Чертеж детали.cdw     
К модели d:\test6\Сборка.a3d прикреплен чертеж: d:\test6\Чертеж сборки.cdw

Toptotal

Цитата: ja49619 от 04.01.25, 15:05:26в общем получил чертежи через парсинг
Интересно какая модель к чертежу прикреплена.. наоборот важно найти. Особенно имя файла и путь..

antiflamberg

Цитата: ja49619 от 04.01.25, 13:48:22Всем привет,
пытаюсь получить подключенные к 3Д модели документы, для детали это чертеж, для сборки это чертеж и спецификация.
нашел свойство, которое так и называется ObjectAttachedDocuments - Список подключенных к объекту документов

читаю модели, но получаю только спецификации без чертежей

кто знает в чем ошибка?

from win32com.client import Dispatch, gencache

API7 = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
IApplication = Dispatch("Kompas.Application.7")
IDocuments = IApplication.Documents

# пример для детали
IKompasDocument = IDocuments.Open("d:\\test6\\Деталь.m3d", False, False)
IKompasDocument3D = API7.IKompasDocument3D(IKompasDocument)
IPart7 = IKompasDocument3D.TopPart
IPropertyKeeper = API7.IPropertyKeeper(IPart7)
IProductDataManager = API7.IProductDataManager(IKompasDocument)
ObjectAttachedDocuments = IProductDataManager.ObjectAttachedDocuments(IPropertyKeeper)
print(f"{IPart7.FileName}: {ObjectAttachedDocuments}")

# пример для сборки
IKompasDocument = IDocuments.Open("d:\\test6\\Сборка.a3d", False, False)
IKompasDocument3D = API7.IKompasDocument3D(IKompasDocument)
IPart7 = IKompasDocument3D.TopPart
IPropertyKeeper = API7.IPropertyKeeper(IPart7)
IProductDataManager = API7.IProductDataManager(IKompasDocument)
ObjectAttachedDocuments = IProductDataManager.ObjectAttachedDocuments(IPropertyKeeper)
print(f"{IPart7.FileName} {ObjectAttachedDocuments}")

вывод, спецификация есть, чертежей нет:
d:\test6\Деталь.m3d None
d:\test6\Сборка.a3d - ('d:\\test6\\Спецификация сборки.spw',)
детали V22.rar

В СД написал, обещали в ближайшее время поправить патчем.
Парсить метаданные можно, а вот прикрепить мне никак не удалось чертеж, даже вручную (через файл метаданных).
Пока что массово пересохраняю в 20 версию, там прикрепляю чертеж и открываю 22 снова. Неудобно, но что поделать.

ja49619


antiflamberg

Цитата: antiflamberg от 09.01.25, 10:25:07В СД написал, обещали в ближайшее время поправить патчем.
Парсить метаданные можно, а вот прикрепить мне никак не удалось чертеж, даже вручную (через файл метаданных).
Пока что массово пересохраняю в 20 версию, там прикрепляю чертеж и открываю 22 снова. Неудобно, но что поделать.
Проверил, не работает такой подход.
Присоединенные чертежи, которые видны в 20 версии при открытии в 22 компасе не видны.