Замена ссылки на модель в чертеже

Автор Sova2004, 14.02.21, 21:21:44

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

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

Sova2004

Здравствуйте. Подскажите пожалуйста, как заменить ссылку на модель в чертеже. Есть параметризированная модель с внешними переменными + чертеж сделанный по этой модели. Программно меняю переменные и сохраняю в новый файл. Потом копирую чертеж и хочу в чертеже заменить ссылку на новую модель. Не могу найти и заменить ссылку.
Компас 16.0
VisualStudio 2019


KompasAPI7.IKompasDocument docDraw_ = Kompas.ko7_Iapp.Documents.Open(nDrawing);
KompasAPI7.DrawingDocument docDraw = (KompasAPI7.DrawingDocument)docDraw_;

foreach (KompasAPI7.IView view in docDraw.ViewsAndLayersManager.Views)
{
    KompasAPI7.IDrawingContainer drawCont = (KompasAPI7.IDrawingContainer)view;

    foreach (KompasAPI7.OleDrawingObject odo in drawCont.OleDrawingObjects){
         /// drawCont.OleDrawingObjects - пустое
         /// по ходу не туда пришел
         odo.FileName = nModel;
    }
}

KrissKross

Добрый день!

Вам нужно Вид (KompasAPI7.IView view)
привести к  IAssociationView (Интерфейс ассоциативного вида графического документа.)
Обычно это первый вид в дереве:
Цитата из справки - SDK.chm
Цитата: undefinedПримечание:

1. Данный интерфейс можно получить следующими способами:

– через коллекцию видов IViews,

– с помощью метода IUnknown QueryInterface от интерфейса IView.
и у него переопределить свойство
SourceFileName - Полное имя файла-источника

Sova2004

Спасибо большое!
Сырой но рабочий код:

///Объект документа
KompasAPI7.IKompasDocument docDraw_ = Kompas.ko7_Iapp.Documents.Open(nDrawing);

///Объект документа 2D
KompasAPI7.DrawingDocument docDraw = (KompasAPI7.DrawingDocument)docDraw_;

///для каждого вида, так как возможно в чертеже нескольких отдельных вставок
foreach (KompasAPI7.IView view in docDraw.ViewsAndLayersManager.Views)
{
   try
      {
      ///через try так как некоторые виды могут быть не ассоциативные (разрушенные/разрезы/проекционные ....)
      KompasAPI7.IAssociationView asView = (KompasAPI7.IAssociationView)view;

      ///Замена пути. Если в документе вставки из разных моделей, следует проверить путь
      asView.SourceFileName = nModel;

      ///нужно обновить, иначе изменения не вступят в силу
      asView.Update();

      }
      catch
      {
         continue;
      }
}

/// перестроим документ
KompasAPI7.IKompasDocument2D1 doc2D = (KompasAPI7.IKompasDocument2D1)docDraw_;
doc2D.RebuildDocument();

///сохраним документ
docDraw_.Close(Kompas6Constants.DocumentCloseOptions.kdSaveChanges);