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


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

Страницы: 1
Получить путь связанного объекта(файла) из Структуры изделия
 
vite, спасибо Вам большое, как всегда выручили!!!
Получить путь связанного объекта(файла) из Структуры изделия
 
vite, подскажите пожалуйста какую ссылку вы используете для определения "SchemeId"?
Ошибка такая: " 'TFlex.Model.ProductStructure' does not contain a definition for 'SchemeId' and no extension method 'SchemeId' accepting a first argument of type 'TFlex.Model.ProductStructure' could be found (are you missing a using directive or an assembly reference?) "
Получить путь связанного объекта(файла) из Структуры изделия
 

Добрый день!

Я работаю с режимом "Структура изделия", все позиции которые есть в структуре изделия выгружаю в pdm систему, но чтобы это сделать нужно открыть каждую деталь и сохранить ее, для этого нужен путь файла. Путь файла искала в режиме 3D модель, обозначение файла брала из структуры изделия и искала соответствие в дереве построения. Но столкнулась с вариантом когда, в дереве построения и в структуре изделия обозначения отличаются, но при этом если в структуре становлюсь на какую-то позицию, то в дереве она подсвечивается. Столкнулась с тем, что могу вытащить путь связанного объекта и отдельно Обозначение и Наименование, но связать их между собой не получается.

На входе имею см. рисунок1.

Далее использую код, который бегает по структуре изделия и считывает Обозначение, Наименование, Путь(расположение связанных объектов) и записывает в таблицу.

Если я использую код:

[CODE] //создаем столбцы в Data Table
          System.Data.DataTable dt = new System.Data.DataTable();
          dt.Columns.Add("NOTE_SPEC", typeof(string));
          dt.Columns.Add("NAME_SPEC", typeof(string));
          dt.Columns.Add("CHECK_POS", typeof(Boolean));
          dt.Columns.Add("Path", typeof(string));
          document = TFlex.Application.ActiveDocument;
          //получаем объекты дерева построения            
          //1-параметр - ссылка на текущую сборку
          //2-параметр - указывает нужно ли, кроме ссылок на grb, возвращать ссылки на картинки, БД.
          //3-параметр - указывает нужно ли возвращать ссылки на библиотечные фрагменты
          //последний параметр - позволяет задать уровень вложенности,
          //для которого нужно получить ссылки(false - 1 уровень вложенности, true - поиск на всю глубину сборки)
          string[] filePaths = TFlex.Application.GetDocumentExternalFileLinks(document.FileName, false, false, false);

          //бегаем по спецификации T-flex
          foreach (var ps in document.GetProductStructures())
          {
              //перебор всех элементов/записей
              foreach (var elem in ps.GetAllRowElements())
              {
                  var includeInReport = (bool)elem.IncludeInDoc.Value; //true/false если стоит галочка включать в спецификацию
                  d = elem.SourceFragmentPath; //расположение (путь) связанного объекта

                  if (d != null)
                  {
                      //перебор групп(разделов) "главного" представления:
                      foreach (var group in ps.GetRowElementGroups())
                      {
                          string groupName = group.Name;

                          if ((groupName == "Документация") || (groupName == "Сборочные единицы") || (groupName == "Детали") || (groupName == "Прочие изделия"))
                          {
                              foreach (var item in group.Items)
                              {
                                  //Значения элемента
                                  dynamic mainElem = item.MergedElements.First();
                                  string paramValue = mainElem[new Guid("ee9a8bc0-c016-4915-9baa-69b2d8c28786")].ValueAsString; //обозначение
                                  string paramValue1 = mainElem[new Guid("44bb724a-de07-4fd3-9882-ced1c8425057")].ValueAsString; //наименование

                                  if ((groupName == "Документация") || (groupName == "Детали") || (groupName == "Сборочные единицы") || (groupName == "Прочие изделия"))
                                  {
                                      //добавляем строку в Data Table и запоняем ее
                                      DataRow newRow = dt.Rows.Add();
                                      newRow.SetField("NOTE_SPEC", paramValue);
                                      newRow.SetField("NAME_SPEC", paramValue1);
                                      newRow.SetField("CHECK_POS", true);
                                      count_row = Convert.ToInt16(dt.Rows.Count.ToString());

                                      if (paramValue.Contains(" СБ") == true)
                                      {
                                          string paths = document.FileName.ToString();
                                          newRow.SetField("path", paths); //заполняем строку
                                      }
                                      else
                                      {
                                          newRow.SetField("path", d); //заполняем строку
                                      }
                                  }
                              }
                          }
                      }
                  }
              }  
          }
          gridContrl.DataSource = null;
          gridContrl.DataSource = dt;

[/CODE]
то на выходе получаю (см.рисунок2). Обратите внимание, что колонки Обозначение и Расположение файла не соответствуют.

Если использую код, который вытаскивает правильно Обозначение, то не могу получить Расположение файла, так как SourceFragmentPath есть только в GetAllRowElements. (см. рисунок3)[CODE]//создаем столбцы в Data Table
           System.Data.DataTable dt = new System.Data.DataTable();
           dt.Columns.Add("NOTE_SPEC", typeof(string));
           dt.Columns.Add("NAME_SPEC", typeof(string));
           dt.Columns.Add("CHECK_POS", typeof(Boolean));
           dt.Columns.Add("Path", typeof(string));
           document = TFlex.Application.ActiveDocument;
           //получаем объекты дерева построения            
           //1-параметр - ссылка на текущую сборку
           //2-параметр - указывает нужно ли, кроме ссылок на grb, возвращать ссылки на картинки, БД.
           //3-параметр - указывает нужно ли возвращать ссылки на библиотечные фрагменты
           //последний параметр - позволяет задать уровень вложенности,
           //для которого нужно получить ссылки(false - 1 уровень вложенности, true - поиск на всю глубину сборки)
           string[] filePaths = TFlex.Application.GetDocumentExternalFileLinks(document.FileName, false, false, false);

           //бегаем по спецификации T-flex
           foreach (var ps in document.GetProductStructures())
           {
               //перебор всех элементов/записей
               foreach (var elem in ps.GetAllRowElements())
               {
                   var includeInReport = (bool)elem.IncludeInDoc.Value; //true/false если стоит галочка включать в спецификацию
                   d = elem.SourceFragmentPath; //расположение (путь) связанного объекта
               }
                   if (d != null)
                   {
                       //перебор групп(разделов) "главного" представления:
                       foreach (var group in ps.GetRowElementGroups())
                       {
                           string groupName = group.Name;

                           if ((groupName == "Документация") || (groupName == "Сборочные единицы") || (groupName == "Детали") || (groupName == "Прочие изделия"))
                           {
                               foreach (var item in group.Items)
                               {
                                   //Значения элемента
                                   dynamic mainElem = item.MergedElements.First();
                                   string paramValue = mainElem[new Guid("ee9a8bc0-c016-4915-9baa-69b2d8c28786")].ValueAsString; //обозначение
                                   string paramValue1 = mainElem[new Guid("44bb724a-de07-4fd3-9882-ced1c8425057")].ValueAsString; //наименование

                                   if ((groupName == "Документация") || (groupName == "Детали") || (groupName == "Сборочные единицы") || (groupName == "Прочие изделия"))
                                   {
                                       //добавляем строку в Data Table и запоняем ее
                                       DataRow newRow = dt.Rows.Add();
                                       newRow.SetField("NOTE_SPEC", paramValue);
                                       newRow.SetField("NAME_SPEC", paramValue1);
                                       newRow.SetField("CHECK_POS", true);
                                       count_row = Convert.ToInt16(dt.Rows.Count.ToString());

                                       if (paramValue.Contains(" СБ") == true)
                                       {
                                           string paths = document.FileName.ToString();
                                           newRow.SetField("path", paths); //заполняем строку
                                       }
                                       else
                                       {
                                           newRow.SetField("path", d); //заполняем строку
                                       }
                                   }
                               }
                           }
                       }
                   }
               //}  
           }
           gridContrl.DataSource = null;
           gridContrl.DataSource = dt;[/CODE]

Получается я могу получить либо только расположение файлов, либо реальные обозначение и наименование деталей.

Подскажите пожалуйста, как получить и Расположение связанных объектов, и Обозначение, и Наименование, при этом сохранив все условия из кода?

Сайт и Форум, Замечания и предложения по сайту и форуму
 
Здравствуйте! Больше месяца на форуме не работает Поиск. Если в поисковой строке написать "document" и выбрать раздел поиска "[URL=http://www.tflex.ru/forum/index.php?PAGE_NAME=list&FID=14]Программирование приложений, T-FLEX OPEN API[/URL]", то поиск осуществляется только с 23.02.2019 года.
Для примера тема "Получить все сборки, детали, стандартные изделия входящие в 3D модель", которая не попала в результат поиска, на самом деле таких тем очень много.
20.02.2019 в техподдержку отправила письмо с этой проблемой , но они молчат.
Создание меню после открытия документа
 
Ответили из техподдержки:

"В настоящий момент создание меню для плагинов вне метода OnCreateTools() не предусмотрено.
Все действия по созданию меню и подменю выполняются внутри тела метода OnCreateTools()."
Создание меню после открытия документа
 
vite, спасибо, так и сделаю.
Создание меню после открытия документа
 
vite, переменную submenu делала глобальной, но результат тот же. Я правильно поняла, что нельзя создать меню и подменю после открытия документа?
Создание меню после открытия документа
 
vite, переменную submenu я делала глобальной, но ошибка таже.
Я правильно понимаю что после открытия документа не получится создать подменю?
Создание меню после открытия документа
 
Добрый день!

На основе примера StarPlagin в разделе Сервис создала меню, оно появляется при запуске программы и все прекрасно работает.[CODE]protected override void OnCreateTools()
       {

           RegisterCommand((int)Commands.Create, "Создание документа в TechnologiCS", LoadIconResource("testObjectIcon"), LoadIconResource("testObjectIcon")); // Регистрируем команду создания
           //-----------------------------------------------------------------------------------

           TFlex.Menu submenu = new TFlex.Menu();

           submenu.CreatePopup();

           submenu.Append((int)Commands.Create, "&Создание документа в TechnologiCS", this);

           TFlex.Application.ActiveMainWindow.InsertPluginSubMenu("Technologics", submenu, MainWindow.InsertMenuPosition.BeginOfTools, this);
       }
[/CODE]
Теперь необходимо, чтобы после открытия документа появлялось подменю в созданном меню.
[CODE]protected override void DocumentOpenEventHandler(DocumentEventArgs args)
       {
           //Событие приходит после открытия документа

           MessageBox.Show("Документ открыт");

           TFlex.Menu submenu2 = null;

           RegisterCommand(4, "Привет", null, null);

           submenu2 = submenu.AppendSubMenu("&Привет");
       }
[/CODE]
Но вместо этого появляется ошибка. см вложение

[IMG WIDTH=336 HEIGHT=156]data:image/png;base64,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[/IMG]

Может быть кто-то сталкивался с подобной задачей и знает решение, ну или мысли какие-то есть?
Изменено: Анна - 25.03.2019 08:42:47
Обработка меню и подменю созданные в разделе Сервис
 
[QUOTE]Sila Musli написал:
[QUOTE][URL=/forum/index.php?PAGE_NAME=profile_view&UID=76194&dispatch=categories.view&category_id=1646]Анна[/URL] написал:
интеграцию T-flex CAD с нашей программой[/QUOTE]
Так у них интеграции с Флексом нет. Будете сами писать этот модуль? Не проще ли у них заказать? Или не городить огород и перейти на Докс?)) Родная интеграция не тоже самое, что через атрибуты, Докс с кадом дружит через переменные. И не понятно, почему подписание должно быть в каде, этож чистый пдм?[/QUOTE]
Sila Musli, да, мы сами пишем свое приложение. Переходить на докс нет смысла и платить за написание приложения тоже, так как все меняется на ходу.
Обработка меню и подменю созданные в разделе Сервис
 
vite, спасибо большое!
Обработка меню и подменю созданные в разделе Сервис
 
[QUOTE]Sila Musli написал:
Хотите написать свой DOCs???[/QUOTE]
На предприятии давно установлена система PLM (TechnologiCS), поэтому нужно осуществить интеграцию T-flex CAD с нашей программой.
Обработка меню и подменю созданные в разделе Сервис
 
Добрый день!

На основе примера StarsPlugin, создала меню с выпадающим списком (см.вложение), который строится динамически на основе sql запроса. Человек который будет пользоваться этим меню, может выбрать любой пункт подменю.
Как определить какой пункт подменю выбрал пользователь, т.е. нажал левой клавишей мышки по одной из строк сформированных динамически?
Перебор страниц в документе
 
Ответили с техподдержки:
[CODE]using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using TFlex.Model;
using TFlex.Model.Model2D;
using TFlex.Model.Model3D;

namespace NewMacroNamespace
{
public class NewMacroClass
{
private static readonly string changeName = "Активировать 2D вид";

public static void Run()
       {
           Document document = TFlex.Application.ActiveDocument;
           if (document == null)
               return;
           try
           {
               document.BeginChanges(changeName);
               Activate2DView(document);
               document.EndChanges();
           }
           catch (Exception msg)
           {
               MessageBox.Show(msg.ToString());
           }
       }

       public static void Activate2DView(Document document)
       {
           View2D view2D = document.ActiveView as View2D;
           if (view2D == null)
               view2D = document.Views.Select(v => v as View2D).Where(v => v != null).FirstOrDefault();
           if (view2D == null)
               view2D = document.Open2DView() as View2D;
           if (view2D == null)
return;
//закрыть 3D вид(отображается только 2D вид)
   Close3DView(document);

           document.Activate();
           view2D.Activate();
           document.Save();
       }

private static void Close3DView(Document document)
       {
           var views3D = document.Views.Select(v => v as View3D).Where(v => v != null);
           if (views3D != null)
           {
               foreach (var view3D in views3D)
               {
                   view3D.Close();
               }
           }
       }
}
}
[/CODE]
Перебор страниц в документе
 
Написали в техподдержке:
[CODE]using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using TFlex.Model;
using TFlex.Model.Model2D;
using TFlex.Model.Model3D;

namespace NewMacroNamespace
{
public class NewMacroClass
{
private static readonly string changeName = "Работа со страницами документа";
       private static readonly string page1Name = "Страница 1";
       private static readonly string page2Name = "Страница 2";
       private static readonly string specPageName = "Спецификация";
private static readonly string pageNotFoundMsg = "Не найдена страница: ";
       private static readonly string viewNotFoundMsg = "Не найден 2D вид";

       public static void Run()
       {
           Document document = TFlex.Application.ActiveDocument;
           if (document == null)
               return;
           try
           {
               document.BeginChanges(changeName);
               RunPageOperations(document);
               document.EndChanges();
           }
           catch (Exception msg)
           {
               MessageBox.Show(msg.ToString());
           }
       }

       private static void RunPageOperations(Document document)
       {
           View2D view2D = GetView2D(document);
           if (view2D != null)
           {
               //работа со страницей 2
               Page page2 = GetPageByName(document, page2Name);
               if (page2 != null)
               {
                   SetActivePage(document, view2D, page2);

                   //действия со страницей2
                   //...
               }
else
               {
                   MessageBox.Show(string.Format(pageNotFoundMsg + page2Name));
               }

               //работа со страницей спецификация
               Page specificationPage = GetPageByName(document, specPageName);
               if (specificationPage != null)
               {
                   SetActivePage(document, view2D, specificationPage);

                   //действия со страницей2
                   //...
               }
else
               {
                   MessageBox.Show(string.Format(pageNotFoundMsg + specPageName));
               }

               //возврат к исходной странице
               Page page1 = GetPageByName(document, page1Name);
               if (page1 != null)
               {
                   SetActivePage(document, view2D, page1);
               }
else
               {
                   MessageBox.Show(string.Format(pageNotFoundMsg + page1Name));
               }
           }
           else
           {
               MessageBox.Show(viewNotFoundMsg);
           }
       }

private static void SetActivePage(Document document, View2D view2D, Page page2)
       {
           view2D.Page = page2;
           document.Activate();
           view2D.Activate();
           //document.Save();
       }

       private static View2D GetView2D(Document document)
       {
           View2D view2D = document.ActiveView as View2D;
           if (view2D == null)
               view2D = document.Views.Select(v => v as View2D).Where(v => v != null).FirstOrDefault();
           if (view2D == null)
               view2D = document.Open2DView() as View2D;
           if (view2D == null)
               return null;
           return view2D;
       }

       private static Page GetPageByName(Document sourceDocument, string receivePageName)
       {
           return sourceDocument.GetPages().Where(page => page.Name == receivePageName).FirstOrDefault();
       }
}
}
[/CODE]
Получить все сборки, детали, стандартные изделия входящие в 3D модель
 
vite, Благодарю, все работает!
Получить все сборки, детали, стандартные изделия входящие в 3D модель
 
Здравствуйте! Подскажите пожалуйста, как макросом пробежаться по дереву построения 3D модели сборки и получить имена, пути входящих деталей, сборок и т.д.? T-flex 15.1.70.0
Написала в техподдержку, но они молчат  :(
Перебор страниц в документе
 
vite, спасибо большое! Все работает!

Единственно заменила          [CODE]switch (g.PageType) // определение типа страницы
[/CODE]на[CODE]PageType p_type = g.PageType;
switch (p_type) // определение типа страницы
[/CODE]так как C# ругался на тип "g.PageType".
Перебор страниц в документе
 
Здравствуйте! В документе есть несколько  страниц (Страница1, Страница2, Спецификация), Страница1 активная. Подскажите пожалуйста, как макросом можно перебрать все страницы документа и сделать Страницу2 активной, выполнить определенные действия, сделать Срецификацию активной, выполнить определенный действия и вернуться к Странице1?
Страницы: 1