• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

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

Автор maskedball, 16.11.21, 16:50:28

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

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

maskedball

Добрый день.
Помогите пожалуйста решить задачу.
Нужно получить ссылку на модель детали (или сборки) из чертежного вида (IView).
Используемая версия API - 7.
Приведу кусочек кода, чтобы лучше был понятен контекст:

var document2D = (IKompasDocument2D)document; // документ

var manager = (IViewsAndLayersManager)document2D.ViewsAndLayersManager; // менеджер видов и слоёв

var views = manager.Views
 .OfType<IView>()
 .Where(view => view.ViewType != LtViewType.vt_System)
 .ToList(); // список видов, за исключением системного вида

 if (views.Count > 0)
  {
    foreach (var view in views)
      {
          // как теперь получить ссылку на документ детали или сборки, на который ссылается данный вид?             
      }
  }

В пользовательском интерфейсе открыть модель можно при помощи команды, которая вызывается на конкретном виде. А как это сделать программно мне не ясно...

Михаил88

# -*- coding: utf-8 -*-
from win32com.client import Dispatch, gencache

#  Получи константы
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
# API7
kompas_api7_module = gencache.EnsureModule('{69AC2981-37C0-4379-84FD-5DD2F3C0A520}', 0, 1, 0)
application = Dispatch('Kompas.Application.7')

kompas_document = application.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)

iViewsAndLayersManager = kompas_document_2d.ViewsAndLayersManager
iViews = iViewsAndLayersManager.Views
view = iViews.View(1)
iAssociationView = kompas_api7_module.IAssociationView(view)
# Получаем путь файла источника
sourceFileName = iAssociationView.SourceFileName
embodiments_manager = kompas_api7_module.IEmbodimentsManager(iAssociationView)
# Получаем индекс исполнения
index = embodiments_manager.CurrentEmbodimentIndex
# Открываем модель
documents = application.Documents
kompas_dokument_m = documents.Open(sourceFileName, True, False)
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_dokument_m)
embodiments_manager = kompas_api7_module.IEmbodimentsManager(kompas_document_3d)
# Устанавливаем индекс исполнения
embodiments_manager.SetCurrentEmbodiment(index)


по индексу нужного вида получаем полное имя файла источника
и индекс исполнения
далее открываем модель по указанному файлу источнику и устанавливаем нужное исполнение
+ Благодарностей: 2

maskedball

Михаил, спасибо вам большое! Все получилось!

maskedball

У меня изначально была задача получить ссылку на документ из первого вида на чертеже. Приведу сюда код, вдруг кому-нибудь пригодится.

var document2D = (IKompasDocument2D)document;
var manager = (IViewsAndLayersManager)document2D.ViewsAndLayersManager;
var view = manager.Views
.OfType<IView>()
.Where(v => v.ViewType != LtViewType.vt_System)
.FirstOrDefault(v => v.Number.Equals(1));

if (!(view is IAssociationView associationView))
{
return;
}

var pathName = associationView.SourceFileName;

if (String.IsNullOrEmpty(pathName))
{
return;
}

if (!(app.Documents.OfType<IKompasDocument>()
.FirstOrDefault(kompasDocument => kompasDocument.PathName.Equals(pathName)) is null))
{
return;
}

var refDoc = app.Documents.Open(pathName, true, true);
app.ActiveDocument = document;

return refDoc;
+ Благодарностей: 1