Некорректная работа API-функции чтения подключенных документов 3д модели

Автор teochet, 07.11.25, 18:03:59

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

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

teochet

Коллеги, приветствую.
Пишу приложение, которое должно получать список свойств для каждого исполнения модели. Дошел до получения списка подключенных документов, который получаю через ObjectAttachedDocuments.
Код вроде работает, но есть проблема. Если сборочная единица содержит исполнения и делаю групповую спецификацию, то через ObjectAttachedDocuments получаю только чертеж, групповая спецификация туда не попадает.
При этом, если у исполнения удалить подключенную спецификацию и привязать заново вручную, она начинает отображаться. Для тестов сделал простую сборку, спецификация создана автоматически, но у второго исполнения была вручную удалена и добавлена снова.
Получается такая картина:
--- Получение исполнений ---
[DocumentEmbodiments] Количество исполнений: 2

--- Исполнение 1 ---
\Сборка для теста\001.0010 СБ_Подсборка Сборочный чертеж.cdw

--- Исполнение 2 ---
\Сборка для теста\001.0010-10 СБ_Подсборка Сборочный чертеж.cdw
\Desktop\Сборка для теста\001.0010_Подсборка.spw
Хотя при этом и в одном и в другом исполнении спецификация есть.
Я не могу понять, это я где-то недоработал или это баг функции.
Часть тестового кода:
public static void ProcessDocumentEmbodiments(string filePath)
{
    ConnectToKompas();
    IDocuments documents = application.Documents;
    documents.Open(filePath, true, true);
    IKompasDocument kompasDocument = application.ActiveDocument;
    if (kompasDocument == null)
    {
        Console.WriteLine("[DocumentEmbodiments] Ошибка: Объект IKompasDocument не инициализирован.");
        return;
    }
    IKompasDocument3D document3D = kompasDocument as IKompasDocument3D;
    if (document3D != null)
    {
        IEmbodimentsManager embodimentsManager = (IEmbodimentsManager)document3D;
        int quantity = embodimentsManager.EmbodimentCount;
        Console.WriteLine($"[DocumentEmbodiments] Количество исполнений: {quantity}");

        for (int i = 0; i < quantity; i++)
        {
            embodimentsManager.SetCurrentEmbodiment(i);

            Console.WriteLine($"\n--- Исполнение {i + 1} ---");

            document3D = application.ActiveDocument as IKompasDocument3D;
            IPart7 part7 = (IPart7)document3D.TopPart;
            IProductDataManager productDataManager = document3D as IProductDataManager;
            var docs = productDataManager.ObjectAttachedDocuments[(IPropertyKeeper)part7];
            foreach (var doc in docs)
            {
                Console.WriteLine(doc);
            }
        }
    }
    else
    {
   
    }
}
Метод принимает путь к файлу, через ConnectToKompas(), запускается/переключается на окно компаса. Компас версии v22.
Пишу на форуме первый раз, если что не так, прошу прощения. Если нужны будут еще какие-то данные, поделюсь