Не срабатывает API-функция привязки чертежей к 3D-модели

Автор y0gurt, 28.10.24, 11:40:15

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

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

y0gurt

Приветствую!

Пишу приложение, используя API-интерфейс Компас. Столкнулся с проблемой - не удается выполнить команду, используя API-интерфейс, которая добавляет связанный чертеж к 3D-модели (меню "Управление связанными чертежами", "Управление связанными спецификациями"). При выполнении команды ничего не происходит.
Ниже приведен используемый код на C# (к компасу подключается, все нормально, другие функции тоже отлично отрабатывают).
Подскажите, пожалуйста, в чем может быть дело, код вроде бы правильный.
string modelPath = @"C:\Путь до модели\Модель.a3d";
string drawing = @"C:\Путь до чертежа\Чертеж.cdw";
IApplication _IApplication = (IApplication)Marshal.GetActiveObject("Kompas.Application.7");
IKompasDocument kompasDocument = _IApplication.Documents.Open(modelPath, true, false);
IKompasDocument3D ikompasDocument = (IKompasDocument3D)kompasDocument;
IPart7 topPart = (IPart7)ikompasDocument.TopPart;

if (topPart == null)
  return;
 if (!(ikompasDocument is IProductDataManager productDataManager))
  return;
productDataManager.set_ObjectAttachedDocuments((IPropertyKeeper)topPart, drawing);

//productDataManager.ObjectAttachedDocuments[(IPropertyKeeper)topPart] = drawing;
topPart.Update();
ikompasDocument.Save();

p3452

1. API Компас на простая "штука" и, для начала, не мешало бы разобраться в терминах и принципах работы...
2. set_ObjectAttachedDocuments() - ?
3. Какова конечная Ваша цель (простыми словами!)?

y0gurt

Цитата: p3452 от 28.10.24, 11:52:381. API Компас на простая "штука" и, для начала, не мешало бы разобраться в терминах и принципах работы...
2. set_ObjectAttachedDocuments() - ?
3. Какова конечная Ваша цель (простыми словами!)?

Простыми словами - нужно добавить ссылку на чертеж из 3D-модели. В компасе это меню называется "Управление связанными чертежами".
Получить список привязанных чертежей и спецификаций, используя get_ObjectAttachedDocuments() - никаких проблем - получаю его и работаю с ним:
var obj1 = productDataManager.get_ObjectAttachedDocuments((IPropertyKeeper)topPart);

А вот с добавлением в этот список другого чертежа или еще одного - возникли проблемы.
Опыт работы с API Компас есть, просто может быть изначально неудачно сформулировал вопрос.

feron

Цитата: y0gurt от 28.10.24, 11:40:15.GetActiveObject("Kompas.Application.7");

а разве не так должно быть ?

.GetActiveObject(,"Kompas.Application.7");
или я что то путаю..

p3452

Цитата: y0gurt от 28.10.24, 12:10:31А вот с добавлением в этот список другого чертежа или еще одного - возникли проблемы.
string psFile = "Имя и путь файла чертежа";
// подключение...
productDataMenager.ObjectAttachedDocuments[propertyKeeper] = psFile;

p/s: "Подключенный" не значит "связанный"!

y0gurt

Цитата: p3452 от 28.10.24, 13:25:37string psFile = "Имя и путь файла чертежа";
// подключение...
productDataMenager.ObjectAttachedDocuments[propertyKeeper] = psFile;
Так я тоже пробовал...Но результат аналогичный.

Цитата: p3452 от 28.10.24, 13:25:37p/s: "Подключенный" не значит "связанный"!
А можно ли как-то сделать, чтобы чертеж появился в списке связанных документов? Может быть какая-то другая команда используется?
Просто если потом опять запрашивать список подключенных документов, то этого документа не будет в списке.
Даже на всякий случай в самом чертеже ссылку на модель меняю, но этого видимо недостаточно(.

p3452

Цитата: y0gurt от 28.10.24, 13:44:36Так я тоже пробовал...Но результат аналогичный.
Должно (!) работать на всех версиях от v18 и старше...
+ Благодарностей: 1

Михаил88

Тоже считаю, что должно работать. У меня на python работает. Есть тема даже этому посвящённая здесь на форуме.

https://forum.ascon.ru/index.php?topic=35498.msg294498#msg294498

Спросите у KrissKross, может он Вам поможет.

p3452

Ошибка может быть и ЗДЕСЬ:
if (!(ikompasDocument is IProductDataManager productDataManager))
  return;
...

Lemieux

Цитата: y0gurt от 28.10.24, 11:40:15Приветствую!

Пишу приложение, используя API-интерфейс Компас. Столкнулся с проблемой - не удается выполнить команду, используя API-интерфейс, которая добавляет связанный чертеж к 3D-модели (меню "Управление связанными чертежами", "Управление связанными спецификациями"). При выполнении команды ничего не происходит.
Ниже приведен используемый код на C# (к компасу подключается, все нормально, другие функции тоже отлично отрабатывают).
Подскажите, пожалуйста, в чем может быть дело, код вроде бы правильный.
string modelPath = @"C:\Путь до модели\Модель.a3d";
string drawing = @"C:\Путь до чертежа\Чертеж.cdw";
IApplication _IApplication = (IApplication)Marshal.GetActiveObject("Kompas.Application.7");
IKompasDocument kompasDocument = _IApplication.Documents.Open(modelPath, true, false);
IKompasDocument3D ikompasDocument = (IKompasDocument3D)kompasDocument;
IPart7 topPart = (IPart7)ikompasDocument.TopPart;

if (topPart == null)
  return;
 if (!(ikompasDocument is IProductDataManager productDataManager))
  return;
productDataManager.set_ObjectAttachedDocuments((IPropertyKeeper)topPart, drawing);

//productDataManager.ObjectAttachedDocuments[(IPropertyKeeper)topPart] = drawing;
topPart.Update();
ikompasDocument.Save();

Вы случайно бекэндом не занимаетесь?

y0gurt

В общем, опытным путем вычислил причину.
Если кому интересно, свойство работает только в версиях Компаса 18,19,20.
В версиях 21 и выше уже не работает. Вот такая беда(.
Не знаю, есть ли шанс получить от техподдержки какой-то ответ.

Михаил88

Цитата: y0gurt от 29.10.24, 07:59:02В версиях 21 и выше уже не работает.

Я сейчас проверил. Работает и на 21 версии. Проверял на python.

Lemieux

Цитата: y0gurt от 29.10.24, 07:59:02В общем, опытным путем вычислил причину.
Если кому интересно, свойство работает только в версиях Компаса 18,19,20.
В версиях 21 и выше уже не работает. Вот такая беда(.
Не знаю, есть ли шанс получить от техподдержки какой-то ответ.
Сегодня проверю на 21 и 23 версии.

Lemieux

Начинаю тестить в 23 версии. У меня к сборке подключен чертёж и спецификация. В итоге, при отладке, получаю 2 спецификации. Начинаю копать и получаю вот это. КАК ТЕБЕ ТАКОЕ ИЛОН МАСК? Компас УГ.
Screenshot 2024-10-29 093854.png

p3452

Цитата: y0gurt от 29.10.24, 07:59:02В общем, опытным путем вычислил причину.
Если кому интересно, свойство работает только в версиях Компаса 18,19,20.
В версиях 21 и выше уже не работает. Вот такая беда(.

Похоже, ТС - "сказочник"...
Как писал Михаил88:
Цитата: Михаил88 от 29.10.24, 08:51:15Я сейчас проверил. Работает и на 21 версии. Проверял на python.

Только что проверил на v22 - работает!
(причем, работает и код компилированный с библиотеками v20, и перекомпилированный с библиотеками v22)


UU

У кого не работает, пусть проверит реестр, есть ли там эти записи?

Lemieux

Цитата: p3452 от 30.10.24, 10:53:33Только что проверил на v22 - работает!
По свойству ObjectAttachedDocuments получаете прикреплённые документы? - Чертёж и спецификацию?

Lemieux

Цитата: UU от 30.10.24, 11:18:46У кого не работает, пусть проверит реестр, есть ли там эти записи?

На что они влияют? 

UU

На получение интерфейса API7, в какой-то версии сталкивался с таким, что не хочет сразу получать API7 и ошибок не выдаёт.
По этому, когда пишу exe то получаю API5, а от него API7.

Lemieux

Цитата: UU от 30.10.24, 12:46:40На получение интерфейса API7, в какой-то версии сталкивался с таким, что не хочет сразу получать API7 и ошибок не выдаёт.
По этому, когда пишу exe то получаю API5, а от него API7.
Автор в первом сообщении написал, что у него всё нормально работает, кроме менеджера документов.