Вопрос знатокам работы с 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.
Самое интересное, что для первого уровня вложенности (т.е. для переменных заданных у "Фрагмент") значения считываются корректные.
Иными словами, как сделать обход всех вложенных фрагментов и подфрагментов активного документа и получить значения переменных заданных в текущем документе для них?
Я пробовал так:
Ваши идеи, знатоки!
имеется:
файл (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); } } |