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


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
Вопрос знатокам работы с API (использую TFlex v.15):
имеется:
файл (detail.grb) с 3D-деталью "Деталь_1", содержащей в себе:
|--- вложенный 3D-фрагмент "Фрагмент" (фактически реализован в файле fragment.grb), который в свою очередь состоит из:
......... |---- другого 3D-фрагмента - "Подфрагмент" (который фактически реализован в файле subfragment.grb).

В файле fragment.grb у "Подфрагмента" изначально задана внешняя переменная "$Порядковый_номер" = "00000".
В файле detail.grb у этого же "Подфрагмента" внешней переменной вручную задано новое значение: "$Порядковый_номер" = "12345".

Задача: с помощью API получить значение переменной "$Порядковый_номер" у "Подфрагмента"(а именно, добраться до значения "12345").
Проблема в том, что обход переменных из документа detail.grb в подфрагментах возвращает значение "$Порядковый_номер" = "00000" т.е. то, которое задано в файле fragment.grb, но не то, что мы задали в файле detail.grb.
Самое интересное, что для первого уровня вложенности (т.е. для переменных заданных у "Фрагмент") значения считываются корректные.
Иными словами, как сделать обход всех вложенных фрагментов и подфрагментов активного документа и получить значения переменных заданных в текущем документе для них?

Я пробовал так:
Код
Document doc = TFlex.Application.ActiveDocument;

// Обрабатываем все фрагменты активного документа:
foreach(Fragment3D frag in doc.GetFragments3D())
       {
        this.ProcessFragment3D(frag);
       }
...

private void ProcessFragment3D(Fragment3D fragment)
{
 // Получаем значения всех переменных:
 foreach(FragmentVariableValue var in fragment.GetVariables())
        {
    var type  = var.IsReal;
    var value = var.TextValue;
    if (type == true) value = var.RealValue.Value.ToString();
         // Отображаем имена переменных и их значения:
         this.textBox1.Text += String.Format("Variable {0}: {1} \r\n", var.Name, value );
        }
 
 // Пытаемся получить подфрагменты текущего фрагмента (видимо, здесь надо как-то подругому?)
 Document subdoc = fragment.GetFragmentDocument(true);
 foreach(Fragment3D frag in subdoc.GetFragments3D())
              {// рекурсивно выводим и переменные вложенных подфрагментов:
                 this.ProcessFragment3D(frag);
                        }
}
Ваши идеи, знатоки!
Страницы: Пред. 1 2
Ответы
 
Sila Musli, вывод значений завасит от параметров метода "GetFragmentDocument", например:
Код
GetFragmentDocument(true) // получает значение переменной на уровне сборки
GetFragmentDocument(false, true) // получает значение переменной на уровне фрагмента
T-FLEX CAD 16.0.65.0
 
В последнем приложенном примере в файле detail_1.grb у вложенных фрагментов "3D фрагмент_2" и "3D фрагмент_3" переменные P1 и P2 фактически опять же используют данные (переменные P1_asm2 и P2_asm2), которые заданы в другом файле, но не в текущем. Идея же использовать данные, заданные именно в текущем файле (чтобы не надо было открывать другие файлы для изменения значений вложенных фрагментов).
Однако спасибо за пояснение
GetFragmentDocument(true) // получает значение переменной на уровне сборки
GetFragmentDocument(false, true) // получает значение переменной на уровне фрагмента
и за идею с переменными в качестве выражения в других переменных - попробую с ними поэкспериментировать!
 
-=LEXX=- -=LEXX=-, если речь об этом ( #17 )? ответ: никак. да, и смысл теряется в такой схеме. зачем вам промежуточное звено "sborka_1.grb", если управление выполняется с уровня "detail_1.grb"?
Изменено: Vite - 12.10.2017 11:54:50
T-FLEX CAD 16.0.65.0
 
Цитата
Vite написал:
-=LEXX=- -=LEXX=- , если речь об этом ( #17 )? ответ: никак. да, и смысл теряется в такой схеме. зачем вам промежуточное звено "sborka_1.grb", если управление выполняется с уровня "detail_1.grb"
Просто sborka_1.grb может входить и в другие детали, в каждой из которых при необходимости надо задать значения переменных у вложенных фрагментов. А делать это удобно на самом верхнем уровне (в файле самой детали) в одном месте.
 
-=LEXX=- -=LEXX=-, обратитесь в техподдержку, интересно что ответят по данному вопросу.
T-FLEX CAD 16.0.65.0
Страницы: Пред. 1 2