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


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

Страницы: 1
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
[QUOTE]Vite написал:
 -=LEXX=- -=LEXX=- , если речь об этом (  [URL=http://tflex.ru/forum/index.php?PAGE_NAME=message&FID=14&TID=2388&TITLE_SEO=2388-peremennye-vo-vlozhennykh-fragmentakh&MID=30288#message30288]#17[/URL] )? ответ: никак. да, и смысл теряется в такой схеме. зачем вам промежуточное звено "sborka_1.grb", если управление выполняется с уровня "detail_1.grb"
[/QUOTE]
Просто sborka_1.grb может входить и в другие детали, в каждой из которых при необходимости надо задать значения переменных у вложенных фрагментов. А делать это удобно на самом верхнем уровне (в файле самой детали) в одном месте.
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
В последнем приложенном примере в файле detail_1.grb у вложенных фрагментов "3D фрагмент_2" и "3D фрагмент_3" переменные P1 и P2 фактически опять же используют данные (переменные P1_asm2 и P2_asm2), которые заданы в другом файле, но не в текущем. Идея же использовать данные, заданные именно в текущем файле (чтобы не надо было открывать другие файлы для изменения значений вложенных фрагментов).
Однако спасибо за пояснение
GetFragmentDocument(true) // получает значение переменной на уровне сборки
GetFragmentDocument(false, true) // получает значение переменной на уровне фрагмента
и за идею с переменными в качестве выражения в других переменных - попробую с ними поэкспериментировать!
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
Vite,Очень конкретно написано выше и в комментариях файла, который я приложил ранее.
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
[QUOTE]Vite написал:
[QUOTE] -=LEXX=- -=LEXX=- написал:
У меня в коде так и сделано. Я же говорю - не работает так! %) Считываются значения, заданные в другом файле, но не те что заданы в текущем и которые мне нужны...[/QUOTE]
проблема на вашей стороне. данный пример вполне рабочий.[/QUOTE]
Я вам уже несколько раз сказал - ваши ответы не соответствуют контексту вопроса - вы с самого первого ответа перепечатываете по сути одно и тоже, то что у меня в примерах. Если ваши примеры рабочие - это не значит, что они выдают то, что нужно )) Вы хотя бы смотрели, приложенный мной пример? Суть-то поняли?
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
[QUOTE]Vite написал:
[QUOTE] -=LEXX=- -=LEXX=- написал:
Я же пытаюсь добраться до переменных заданных в текущем документе, но для вложенных фрагментов.[/QUOTE]
[CODE] using System.Windows.Forms;
using TFlex.Model;
using TFlex.Model.Model3D;

namespace Test
{
   public class TestMacro
   {
       public static void Run()
       {
           Document document = TFlex.Application.ActiveDocument;

           foreach (var i in document.GetFragments3D())
           {
               if (i.FilePath == "asm_2.grb")
               {
                   MessageBox.Show(i.GetFragmentDocument(true).FindVariable("P1").RealValue.ToString(), "Variable value");
               }
           }
       }
   }
}
[/CODE][/QUOTE]
У меня в коде так и сделано. Я же говорю - не работает так! %) Считываются значения, заданные в другом файле, но не те что заданы в текущем и которые мне нужны...
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
Vite, в вашем файле поиск переменных на первом уровне вложенности. Он да проходит успешно. Я же пытаюсь добраться до переменных заданных в текущем документе, но для вложенных фрагментов. Вот посмотрите, пожалуйста, в приложенном файле:
- как обычно скопируйте мою версию макроса Test Macro.grb в C:\Program Files\T-FLEX CAD 15 x64\Program\Macros
- откройте файл detail_1.grb
- запустите макрос
- кнопка "Старт"
в итоге P1 будет равна 51 и 52 для двух вложенных фрагментов. Но я в текущем файле задал ей значения 151 и 152. И не могу их получить!
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
[QUOTE]Vite написал:
[QUOTE] -=LEXX=- -=LEXX=- написал:
Это фактически то же, что написано выше у меня. Так не работает: выводит значения переменных более низкого уровня, но не те, что заданы в активном файле.[/QUOTE]
точно, я не правильно вас понял. можно было проще сформулировать вопрос: как получить значение переменной активного документа?
[CODE] document.FindVariable("$Порядковый_номер").TextValue;
[/CODE][/QUOTE]
Доброго времени! К сожалению и FindVariable() тоже находит для вложенных фрагментов лишь значение, которое задано у этих фрагментов в другом файле, но не в текущем (
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
[QUOTE]Vite написал:
 -=LEXX=- -=LEXX=- ,
[CODE] using System.Windows.Forms;
using TFlex.Model;
using TFlex.Model.Model3D;

namespace Test
{
   public class Class15
   {
       public static void Run()
       {
           Document document = TFlex.Application.ActiveDocument; // asm_1.grb

           foreach (var i in document.GetFragments3D())
           {
               if (i.FilePath == "asm_2.grb") // 1 level
               {
                   foreach (var j in i.GetFragmentDocument(true).GetFragments3D())
                   {
                       if (j.FilePath == "part_1.grb") // 2 level
                       {
                           MessageBox.Show(j.GetVariableValue("P1", false).RealValue.Value.ToString(), "Variable value");
                           break;
                       }
                   }
               }
           }
       }
   }
}
[/CODE][/QUOTE]
Это фактически то же, что написано выше у меня. Так не работает: выводит значения переменных более низкого уровня, но не те, что заданы в активном файле.
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
Вопрос знатокам работы с 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.
Самое интересное, что для первого уровня вложенности (т.е. для переменных заданных у "Фрагмент") значения считываются корректные.
Иными словами, как сделать обход всех вложенных фрагментов и подфрагментов активного документа и получить значения переменных заданных в текущем документе для них?

Я пробовал так:[CODE]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);
                       }
}[/CODE]Ваши идеи, знатоки!
Страницы: 1