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


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Конфигурации модели
 
Можно ли с помощью API для конфигураций модели изменить набор значений переменных? Конфигурации уже созданы, требуется только изменить значения переменных для них (как это делается вручную на вкладке "Конфигурации модели").
Связать значение текстовой переменной с конфигурацией (исполнением), Необходимо программно связать значения из списка текстовой переменной с соответствующей конфигурацией (исполнением)
 
Во вложении деталь, в которой создана внешняя переменная [B]$List[/B], содержащая список значений.
Как создать с помощью API такую переменную, более-менее понятно.
А вот как программно связать значения этой переменной с конфигурациями (исполнениями), непонятно (во вложенной детали с каждой конфигурацией связано одно из значений переменной [B]$List[/B]).
Надеюсь на подсказку. Заранее спасибо.
Получить текущий состав (структуру) сборки ProductStructure
 
[QUOTE] написал:
[QUOTE][URL=/forum/index.php?PAGE_NAME=profile_view&UID=4015]ainis[/URL] написал:
как подключиться к уже запущенному T-Flex'у и получить активный документ?[/QUOTE]
Скачайте проект  [URL=https://disk.yandex.ru/d/jqSsw0pGU6YByw]ServerTest[/URL] (см. ReadMe.txt в архиве).[/QUOTE]
Спасибо, получилось.

Функция [B]GetActiveDocument [/B]возвращает [B]TFlex.CAD.Server.Model.Document[/B]. Можно ли как-то получить [B]TFlex.Model.Document[/B]?
Получить текущий состав (структуру) сборки ProductStructure
 
Благодарю
Тогда другой вопрос: как подключиться к уже запущенному T-Flex'у и получить активный документ?
Просмотрел эти темы:
[URL=https://www.tflex.ru/forum/index.php?PAGE_NAME=message&FID=14&TID=2290&TITLE_SEO=2290-tflex-cad-15-i-visual-studio-2015&MID=26082&tags=&q=ActiveDocument&FORUM_ID%5B0%5D=0&DATE_CHANGE=0&order=relevance&s=%CD%E0%E9%F2%E8#message26082]https://www.tflex.ru/forum/index.php?PAGE_NAME=message&FID=14&TID=2290&TITLE...[/URL]
[URL=https://www.tflex.ru/forum/index.php?PAGE_NAME=message&FID=14&TID=2240&TITLE_SEO=2240-podklyuchenie-k-tekushchemu-seansu-tflex-iz-vneshnego-exe-prilozheniya&MID=23282&tags=&q=ActiveDocument&FORUM_ID%5B0%5D=0&DATE_CHANGE=0&order=relevance&s=%CD%E0%E9%F2%E8#message23282]https://www.tflex.ru/forum/index.php?PAGE_NAME=message&FID=14&TID=2240&TITLE...[/URL]
[URL=https://www.tflex.ru/forum/index.php?PAGE_NAME=read&FID=14&TID=4864&TITLE_SEO=4864-zapusk-t_flex-cad-iz-vneshnego-prilozheniya&%25253Bgid=6]https://www.tflex.ru/forum/index.php?PAGE_NAME=read&FID=14&TID=4864&TITLE_SE...[/URL]

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

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

Если использовать TFlex.Application.ActiveDocument, предварительно открыв сессию [CODE]Dim TFSetup As New TFlex.ApplicationSessionSetup With {
       .ReadOnly = False,
       .Enable3D = True,
       .EnableMacros = True}
TFlex.Application.InitSession(TFSetup)
[/CODE]то всегда возвращается Nothing (при этом сессия инициализируется).
Получить текущий состав (структуру) сборки ProductStructure
 
[QUOTE] написал:
[QUOTE][URL=/forum/index.php?PAGE_NAME=profile_view&UID=4015]ainis[/URL] написал:
У меня почему-то для всех составов это свойство - False.[/QUOTE]
Я уже писал об этом ранее,
[QUOTE]
класс "ProductStructure" содержит свойство "IsShownInProductStructureWindow", но оно будет работать  только при открытом окне  "Состав изделия"[/QUOTE]
Нужно писать в техподдержку по этому вопросу. Скорее всего это баг API.[/QUOTE]
Как сделать так, чтобы это окно было открыто, не подскажете? Попытался по-разному открывать документ, например, так:[CODE]TFlex.Application.OpenDocument(FilePath, New TFlex.OpenDocumentOptions With {.ForceNewObject = True, .Visible = True})[/CODE]но документ не отображается.
Получить текущий состав (структуру) сборки ProductStructure
 
[QUOTE] написал:
[URL=/forum/index.php?PAGE_NAME=profile_view&UID=4015]ainis[/URL], для этого есть свойство IsShownInProductStructureWindow [/QUOTE]
У меня почему-то для всех составов это свойство - False.
Открываю документ командой [CODE]TFlex.Application.OpenDocument(FilePath)[/CODE], где [B]FilePath [/B]- путь к файлу документа.
Изменено: ainis - 06.05.2023 06:28:04
Получить ячейку состава изделия, Как добраться до ячейки состава изделия
 
А можно как-нибудь добраться до ячейки с помощью дескриптора ParameterDescriptor, не задавая его GUID? Я пробовал задавать только имя (Name) или SynonymName для дескриптора, однако не вышло получить ячейку, точнее, ее текстовое значение.
Получить текущий состав (структуру) сборки ProductStructure
 
Прошу прощения за мою позднюю реакцию. И спасибо за ответ.
Дело в том, что мне нужно получить текущий состав, а потом уже добираться до нужной колонки в этом текущем составе. Идентификатор текущего состава я не знаю.
Получить текущий состав (структуру) сборки ProductStructure
 
У документа T-Flex есть метод GetProductStructures, который позволяет получить коллекцию всех его структур (составов), т. е. коллекцию объектов ProductStructure.
Можно ли как-то получить текущую структуру (т. е. выбранную в окне состава изделия в самом T-Flex) в этой коллекции?
Получить документ TFlex.Model.Document стандартного 3D-фрагмента, Не удается получить правильный путь к стандартным компонентам
 
Установлен T-FLEX CAD 17.0.65 и библиотека Стандартные элементы 17 (для T-FLEX CAD 17.0.60).
В 3D сборку добавлено несколько стандартных компонентов (болтов, винтов) из библиотеки стандартных изделий.
Попытка получить эти стандартные компоненты программным путем ни к чему не приводит  (документ Doc ниже в коде заранее получен):

Dim Fragms3D As ICollection(Of TFlex.Model.Model3D.Fragment3D) = TFlex.Model.Model3D.Document3D.GetFragments3D(Doc)
For Each Fragm3D As TFlex.Model.Model3D.Fragment3D In Fragms3D' фрагмент Fragm3D стандартного компонента нормально считывается

'Далее с помощью метода Fragm3D.FullFilePath пытаемся получить путь к стандартному фрагменту (чтобы потом открыть документ фрагмента), но путь возвращается неправильный, например:
'  Fragm3D.FullFilePath = "D:\Тестовая сборка\Болт ГОСТ Р 52854.grb", хотя на самом деле компонент находится по пути "C:\Program Files (x86)\T-FLEX\Стандартные элементы 17\Стандартные изделия 17\Болты\Болты со звездообразной головкой\Болт ГОСТ Р 52854.grb"

Next

Попытка получить документ фрагмента в помощью метода GetFragmentDocument тоже ни чему не приводит, возвращается пустая ссылка (Nothing).

Можно ли как-то получить правильный путь стандартного компонента?
Заранее благодарен за подсказки.
Получить ячейку состава изделия, Как добраться до ячейки состава изделия
 
[QUOTE]vite написал:
[URL=/forum/index.php?PAGE_NAME=profile_view&UID=4015]ainis[/URL], по умолчанию "Состав изделия" создается из файла, который расположен в ( C:\Program Files\T-FLEX CAD 17\Program\ProductStructs\Default product structure.xml ). Все колонки имею атрибут "ID", по которому можно извлекать данные ячейки, например:
[CODE] var columnId = new Guid("44bb724a-de07-4fd3-9882-ced1c8425057"); // идентификатор колонки: Наименование

foreach (var row in ps.GetAllRowElements())
{
   var cell = row[columnId];
   // ...
}
[/CODE] [/QUOTE]
Огромное спасибо!
Получить ячейку состава изделия, Как добраться до ячейки состава изделия
 
Необходимо с помощью API добраться до определенной ячейки состава изделия в документе (например, с заданным именем).
Элемент структуры RowElement из документа получить легко, но непонятно, как добраться до определенной ячейки в строке. Метод GetCell требует или указать идентификатор, который неизвестен, или задать дескриптор ParameterDescriptor. Для дескриптора разные параметры пробовал задавать, но добраться до ячейки так и не смог.
Может, кто решал подобную задачу? Буду благодарен, если подскажете.
Как получить параметры текста определенной записи в спецификации?, Нужно узнать, подчеркнут ли текст
 
Можно ли как-то получить параметры текста записи спецификации? Нужно узнать, подчеркнут ли текст в графе "Наименование".
По записям спецификации перемещаюсь в пом. методов MoveToFrontRecord и MoveToNextRecord объекта BOMObject.
Вроде как при этом должен перемещаться курсор, однако метод RT.CursorPosition (здесь RT - RichText, полученный из BOMObject) возвращает каждый раз одну и ту же позицию.

Заранее спасибо за подсказки.
Получение технических требований, Как получить техтребования документа и на чертеже.
 
Я использую такой метод:


[CODE] Public Function GetTechDemFromTFlexDoc(ByRef Doc As TFlex.Model.Document, ByRef TechDem As ArrayList) As Integer
     'Получить тех. требования из документа T-Flex.
     'Возвращается 1, если все прошло успешно, иначе - 0.
     'Если отсут. необход. данные, возвращается 2.
     '===========================================================­======================
     TechDem.Clear() 'массив типа ArrayList, куда будем помещать техтребования
     Try
       If Doc Is Nothing Then Return 2
       Dim Ts As ICollection(Of TFlex.Model.Model2D.Text) = Doc.GetTexts
       If Ts IsNot Nothing AndAlso Ts.Count > 0 Then
         Dim TDs As String = "" 'строка со всеми техтребованиями
         For Each T As TFlex.Model.Model2D.Text In Ts
           If T.Name Like "DrawingNotes" And T.SubType = TFlex.Model.Model2D.TextType.ParagraphText Then
             Dim PT As TFlex.Model.Model2D.ParagraphText = CType(T, TFlex.Model.Model2D.ParagraphText)
             Doc.BeginChanges("")
             PT.BeginEdit()
             TDs = PT.TextValue
             PT.EndEdit()
             Doc.CancelChanges()
             Exit For
           End If
         Next
         If Not TDs Like "" Then
           Dim Lines() As String = TDs.Split(vbLf)
           If Lines IsNot Nothing AndAlso Lines.Count > 0 Then
             Dim I As Integer = 1 'счетчик строк, нужен для того, чтобы убрать номера строк техтребований (его можно не использовать)
             For Each TD As String In Lines
               If TD.Trim.ToLower Like "технические требования" Then GoTo metka 'в некоторых случаях допускается писать заголовок "Технические требования", его мы не будет учитывать
               Dim Str As String = TD.Replace(CStr(I) + ".", "")
               Str = ConvertTFlexSpecSymbolsToTxt(Str) 'ConvertTFlexSpecSymbolsToTxt - метод, конвертирующий спецсимволы в текст
               Str = Str.Trim
               If Not Str Like "" Then TechDem.Add(Str)
               I = I + 1
metka:
             Next
           Else
             Return 2
           End If
         Else
           Return 2
         End If
       Else
         Return 2
       End If
       Return 1
     Catch ex As Exception
       TechDem.Clear()
       Return 0
     End Try
   End Function
[/CODE]Можно на основе этого метода сделать свой, покомпактнее.
Получение технических требований, Как получить техтребования документа и на чертеже.
 
C техтребованиями на чертеже разобрался. Но как получить доступ к техтребованиям документа?
Получение технических требований, Как получить техтребования документа и на чертеже.
 
Подскажите, пожалуйста, как программным путем получить техтребования документа и техтребования на чертеже? Приведите пример кода, если можно.
Заранее спасибо.
Не удалось загрузить файл или сборку TFlexAPI, Не удается получить документ T-Flex
 
Ты оказался прав, Дмитрий: надо использовать OpenDocument, только не вместе с ActiveDocument, а вместо ActiveDocument. Спасибо за подсказку.
Не удалось загрузить файл или сборку TFlexAPI, Не удается получить документ T-Flex
 
Надо получить информацию (всякие там обозначения, массы и проч.) об изделии (изделиях) из активного чертежа, детали, сборки или спецификации. Причем именно из открытого документа.
Не удалось загрузить файл или сборку TFlexAPI, Не удается получить документ T-Flex
 
Я пробовал использовать процедуру OpenDocument (чисто для проверки работает ли она), вроде как удалось получить ссылку на открытый документ (к сожалению, я уже удалил тот вариант кода). Но мне нужно получить именно активный документ, который УЖЕ открыт в T-Flex'е.
Не удалось загрузить файл или сборку TFlexAPI, Не удается получить документ T-Flex
 
Код в модуле.
[CODE][/CODE][CODE]Imports TFlex [/CODE][CODE]Sub Main()
   Dim TFSetup As New TFlex.ApplicationSessionSetup()
   TFSetup.ReadOnly = False
   TFSetup.Enable3D = True
   TFSetup.EnableMacros = True
   Dim Res As Boolean = TFlex.Application.InitSession(TFSetup)
   MainWindow.ShowDialog()
 End Sub[/CODE]Процедура Main является автоматически запускаемым объектом.

Нажатие кнопки в окне "MainWindow" дает команду на получение активного документа:
[CODE]Dim Doc As TFlex.Model.Document = TFlex.Application.ActiveDocument[/CODE]Doc всегда Nothing - независимо от того, открыт ли документ в T-Flex или нет.
Изменено: ainis - 23.04.2014 19:02:39
Страницы: 1 2 След.