Официальный форум российского программного комплекса T-FLEX PLM


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Получить текущий состав (структуру) сборки ProductStructure
 
У документа T-Flex есть метод GetProductStructures, который позволяет получить коллекцию всех его структур (составов), т. е. коллекцию объектов ProductStructure.
Можно ли как-то получить текущую структуру (т. е. выбранную в окне состава изделия в самом T-Flex) в этой коллекции?
 
ainis, класс "ProductStructure" содержит свойство "IsShownInProductStructureWindow", но оно будет работать только при открытом окне "Состав изделия". По большому счету не важно, какая схема является активной в окне "Состав изделия". Вы можете определить целевую колонку по идентификатору. И если колонка существует, то можно получить данные. Например,
Код
foreach (var ps in document.GetProductStructures())
{
    var schemeId = new Guid("0971322f-b6bb-46ae-891e-1abb26e0a252"); // идентификатор схемы по умолчанию
    if (schemeId != ps.SchemeId)
        continue;

    var scheme = ps.GetScheme();
    var paramId = new Guid("65a997a7-d897-45f8-9723-501243b4ecf7"); // целевой идентификатор пользовательского параметра
    var descriptor = scheme.GetParameterDescriptor(paramId);
    if (descriptor == null)
        continue;

    // последующая обработка данных ...
}

Идентификатор параметра создается автоматически на момент добавления колонки. Получить его можно после выгрузки схемы. Для этого нужно нажать в левой области окна "Параметры состава изделия" на кнопку "Сохранить свойства как тип". Обратите внимание, привязка параметра к переменной модели осуществляется на уровне детали. Выгруженная схема должна быть включена как на уровне детали, так и на уровне сборки (дополнительную информацию см. в разделе Состав изделия, отчеты, спецификация).
T-FLEX CAD 17.1.21.0
 
Прошу прощения за мою позднюю реакцию. И спасибо за ответ.
Дело в том, что мне нужно получить текущий состав, а потом уже добираться до нужной колонки в этом текущем составе. Идентификатор текущего состава я не знаю.
 
ainis, для этого есть свойство IsShownInProductStructureWindow
T-FLEX CAD 17.1.21.0
 
Цитата
написал:
ainis, для этого есть свойство IsShownInProductStructureWindow
У меня почему-то для всех составов это свойство - False.
Открываю документ командой
Код
TFlex.Application.OpenDocument(FilePath)
, где FilePath - путь к файлу документа.
Изменено: ainis - 06.05.2023 06:28:04
 
Цитата
ainis написал:
У меня почему-то для всех составов это свойство - False.
Я уже писал об этом ранее,
Цитата

класс "ProductStructure" содержит свойство "IsShownInProductStructureWindow", но оно будет работать только при открытом окне "Состав изделия"
Нужно писать в техподдержку по этому вопросу. Скорее всего это баг API.
---
Ещё в API есть статический метод ProductStructure.GetActiveProductStructure, который, по идее, должен возвращать ссылку на объект ProductStructure, но к сожалению и тут засада... :-) метод всегда возвращает null...
Изменено: vite - 06.05.2023 07:35:33
T-FLEX CAD 17.1.21.0
 
Цитата
написал:
Цитата
ainis написал:
У меня почему-то для всех составов это свойство - False.
Я уже писал об этом ранее,
Цитата

класс "ProductStructure" содержит свойство "IsShownInProductStructureWindow", но оно будет работать только при открытом окне "Состав изделия"
Нужно писать в техподдержку по этому вопросу. Скорее всего это баг API.
Как сделать так, чтобы это окно было открыто, не подскажете? Попытался по-разному открывать документ, например, так:
Код
TFlex.Application.OpenDocument(FilePath, New TFlex.OpenDocumentOptions With {.ForceNewObject = True, .Visible = True})
но документ не отображается.
 
Цитата
ainis написал:
Как сделать так, чтобы это окно было открыто, не подскажете?
ну, это не очень хорошая идея... нужно писать в техподдержку, и прикрепить ссылку на эту тему...
T-FLEX CAD 17.1.21.0
 
Благодарю
Тогда другой вопрос: как подключиться к уже запущенному T-Flex'у и получить активный документ?
Просмотрел эти темы:
https://www.tflex.ru/forum/index.php?PAGE_NAME=message&FID=14&TID=2290&TITLE...
https://www.tflex.ru/forum/index.php?PAGE_NAME=message&FID=14&TID=2240&TITLE...
https://www.tflex.ru/forum/index.php?PAGE_NAME=read&FID=14&TID=4864&TITLE_SE...

Запускал приложенные в темах проекты, и везде запускался еще один экземпляр T-Flex.

Попробовал у себя сделать то же самое.
Создал процедуру для открытия соединения:
Код
Public Sub OpenTFlexConnection()'Открываем соединение
    Try
      New TFlex.CAD.Server.Connection.Open()
    Catch ex As Exception
      Exit Sub
    End Try
  End Sub
Затем запустил открытие соединения в новом потоке:
Код
System.Threading.Tasks.Task.Factory.StartNew(Sub() OpenTFlexConnection())
Запустился новый экземпляр T-Flex. Т. е. подключение к уже запущенному T-Flex'у не произошло.

Если использовать TFlex.Application.ActiveDocument, предварительно открыв сессию
Код
Dim TFSetup As New TFlex.ApplicationSessionSetup With {
        .ReadOnly = False,
        .Enable3D = True,
        .EnableMacros = True}
TFlex.Application.InitSession(TFSetup)
то всегда возвращается Nothing (при этом сессия инициализируется).
 
Цитата
ainis написал:
как подключиться к уже запущенному T-Flex'у и получить активный документ?
Скачайте проект ServerTest (см. ReadMe.txt в архиве).
T-FLEX CAD 17.1.21.0
 
Цитата
написал:
Цитата
ainis написал:
как подключиться к уже запущенному T-Flex'у и получить активный документ?
Скачайте проект ServerTest (см. ReadMe.txt в архиве).
Спасибо, получилось.

Функция GetActiveDocument возвращает TFlex.CAD.Server.Model.Document. Можно ли как-то получить TFlex.Model.Document?
 
Цитата
ainis написал:
Можно ли как-то получить TFlex.Model.Document?
Нет, этот API предоставляет независимую объектную модель (ограниченную в плане управления документом). По сути, компонент TFlex.CAD.Server.DLL обеспечивает доступ к серверной части T-FLEX CAD для работы с документом в асинхронном режиме. В отличии от приложения, построенного на базе TFlexAPI.DLL, серверный компонент позволяет обрабатывать запросы от нескольких клиентов одновременно. То есть, принципиальное отличие в том, что документ не блокируется на запись, если он (документ) уже открыт по запросу другого клиента.
T-FLEX CAD 17.1.21.0
 
Добрый день!
Подскажите пожалуйста следующий код:
необходимо из активной сборки получить текущий состав изделия и открыть фрагмент с названием "корпус 00.00.004".
Спасибо!
Изменено: Roman - 21.05.2023 12:00:08
Страницы: 1