Сообщество программистов Autodesk в СНГ

ADN Club => Inventor API => Тема начата: R.I.Chernov от 16-02-2021, 00:27:36

Название: Ошибка при сохранении.
Отправлено: R.I.Chernov от 16-02-2021, 00:27:36
Доброго времени суток, уважаемые форумчане! Ищу вашей помощи в решении такой вот проблемы:

Мне необходимо пересохранить открытую сборку (сделать аналог команде "сохранить как"), чтобы проводить с ней манипуляции без вреда для оригинала.
Написал такой вот метод:

Код - C# [Выбрать]
  1. internal static Inventor.AssemblyDocument CreateTempAssembly (Inventor.AssemblyDocument oDoc)
  2. {
  3.     Inventor.Application oApp = (Inventor.Application) oDoc.ComponentDefinition.Application;
  4.     oApp.SilentOperation = true;
  5.     oDoc.SaveAs(@"D:\temp.iam", false);
  6.     oApp.SilentOperation = false;
  7.     return oDoc;
  8. }

И вроде все работает и сохраняет, но всплыла такая вот штуковина: если в момент копирования, открыта материнская сборка, которой данная сборка приходится вхождением, то в материнской сборке ссылки меняются на копию. При проделывании такой же операции руками. проблемы нет. Не могу разобраться. это баг, или я не понимаю чего-то?
Буду благодарен за любой совет!

Название: Re: Ошибка при сохранении.
Отправлено: mikazakov от 16-02-2021, 18:18:48
Ну да работа пользовательского интерфейса отличается от работы через АПИ. Может глюк в пользовательском интерфейсе, хотя воркфлоу на пользовательский интерфейс никто из не читал.
Название: Re: Ошибка при сохранении.
Отправлено: R.I.Chernov от 17-02-2021, 21:13:24
Ну да работа пользовательского интерфейса отличается от работы через АПИ. Может глюк в пользовательском интерфейсе, хотя воркфлоу на пользовательский интерфейс никто из не читал.

Спасибо. Тоже для себя решил, считать это глюком и сделать по-другому. В итоге код получился такой вот, может пригодится кому:

Код - C# [Выбрать]
  1. internal static Inventor.AssemblyDocument CreateTempAssembly (Inventor.AssemblyDocument oDoc)
  2. {
  3.     Inventor.Application oApp = (Inventor.Application) oDoc.ComponentDefinition.Application;
  4.     oApp.SilentOperation = true;
  5.     oDoc.SaveAs(@"D:\temp.iam", true);
  6.     Inventor.AssemblyDocument oDocNew = (Inventor.AssemblyDocument) oApp.Documents.Open(@"D:\temp.iam");
  7.     oDoc.Close();
  8.     oApp.SilentOperation = false;
  9.     return oDocNew;
  10. }

 Только в него надо добавить еще считывание текущего уровня детализации и видового представления и установки этих значений в новой сборке.