C# вставка в Assembly из ContentCenter

Автор Тема: C# вставка в Assembly из ContentCenter  (Прочитано 3454 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн slavnov07Автор темы

  • ADN OPEN
  • Сообщений: 11
  • Карма: 1
Всем привет! :)

за мой "говнокод" прошу строго не судить)

Если вдруг кому понадобится вставка (в данном случае мне надо было выгрузить всю библиотеку) вот код:

Код - C# [Выбрать]
  1. string ChilDNodes_1 = "Крепежные изделия";
  2.             string ChilDNodes_2 = "Болты  Винты";
  3.             string ChilDNodes_3 = "С шестигранной головкой";
  4.             string ChilDNodes_4 = "Болт ГОСТ 7798";
  5.             string NameColumn = "DESIGNATION";

тут есть отличие от vb.net, в том что у vb.net идет:
 
Код - vb.net [Выбрать]
  1. oContentNode = oContentCenter.TreeViewTopNode.ChildNodes.Item["Имя узла"]

у c# идет:
Код - C# [Выбрать]
  1. oContentNode = oContentCenter.TreeViewTopNode.ChildNodes["Имя узла"]
  в общем некоторое время я сидел и недоумевал как же так, в одном языке есть .Item в другом его нет...

//функция принимает ссылку на открытый inventor, открытую сборку, имена узлов и имя столбца в библиотеке(designation)
Код - C# [Выбрать]
  1. private void PasteInInventor(Inventor.Application InvApp, Inventor.AssemblyDocument OpenAssemblyDoc, string ChilDNodes_1, string ChilDNodes_2, string ChilDNodes_3, string ChilDNodes_4, string NameColumn)
  2.         {
  3.                  
  4.             Inventor.ContentCenter oContentCenter = InvApp.ContentCenter; //получаем ссылку на ContentCenter
  5.             Inventor.ContentTreeViewNode oContentNode = default;
  6.  
  7.             oContentNode = oContentCenter.TreeViewTopNode.ChildNodes[ChilDNodes_1].ChildNodes[ChilDNodes_2].ChildNodes[ChilDNodes_3];
  8.  
  9.             long AllPoint, NowPoint;    //этими переменными реализован счётчик количества строк в библиотеке
  10.             NowPoint = 0;
  11.  
  12.             foreach (Inventor.ContentFamily oFamily in oContentNode.Families)//тут бегаем по семействам в папке/подпапке узла
  13.             {
  14.                 AllPoint = oFamily.TableRows.Count;
  15.                 if (oFamily.DisplayName == ChilDNodes_4)
  16.                 {
  17.                     foreach (Inventor.ContentTableRow ContTableRow in oFamily.TableRows)//тут бегаем по строкам таблицы
  18.                     {
  19.                         NowPoint += 1;
  20.                         var ContTableRow_Designation = ContTableRow.GetCellValue(NameColumn);
  21.                         Inventor.MemberManagerErrorsEnum failureCM = default;
  22.                         string MessageProbl = "You_have_a_Problem";
  23.                         var CreateMem = oFamily.CreateMember(ContTableRow, out failureCM, out MessageProbl);
  24.                         Inventor.TransientGeometry transientGeometry = InvApp.TransientGeometry;
  25.                         var OpenDoc = OpenAssemblyDoc.ComponentDefinition.Occurrences.Add(CreateMem, transientGeometry.CreateMatrix());//создание вхождения
  26.                         string txt = $"{NowPoint} из {AllPoint}";
  27.                         EventArgs E = new EventArgs();
  28.                         label1_Click(txt, E);//тут просто выводится счётчик
  29.                     }
  30.                 }
  31.             }
  32.  
  33.         }


если необходимо расшарить какие узлы есть в другом узле:

Код - C# [Выбрать]
  1. private void GetNodes (Inventor.Application InvApp, Inventor.AssemblyDocument OpenAssemblyDoc, string ChilDNodes_1, string ChilDNodes_2, string ChilDNodes_3, string ChilDNodes_4, string NameColumn)
  2.         {
  3.             Inventor.ContentCenter oContentCenter = InvApp.ContentCenter; //получаем ссылку на ContentCenter
  4.             Inventor.ContentTreeViewNode oContentNode = default;
  5.  
  6.             oContentNode = oContentCenter.TreeViewTopNode.ChildNodes[ChilDNodes_1];//тут в зависимости от вложенности можно добавить ChilDNodes_2 и тд.
  7.  
  8.             long AllPoint, NowPoint;
  9.             NowPoint = 0;          
  10.             EventArgs E1 = new EventArgs();
  11.             string txt = $"{oContentNode.FullTreeViewPath} количество семейств {oContentNode.ChildNodes.Count}";
  12.            
  13.  
  14.             foreach (Inventor.ContentTreeViewNode item in oContentNode.ChildNodes)
  15.             {
  16.                 txt = (string)item.DisplayName;//выводим имя узла
  17.                 ChildNodes_Click(txt, E1);
  18.             }
  19.  
  20.         }




Оффлайн R.I.Chernov

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: C# вставка в Assembly из ContentCenter
« Ответ #1 : 17-02-2021, 21:17:28 »
//функция принимает ссылку на открытый inventor, открытую сборку, имена узлов и имя столбца в библиотеке(designation)
Ссылку на приложение можно получить из ссылки на сборку. Так можно избавиться от одного лишнего параметра в методе:
Код - C# [Выбрать]
  1. Inventor.Application oApp = (Inventor.Application) oDoc.ComponentDefinition.Application;
В программировании я новичок...но ненадолго! ;)

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: C# вставка в Assembly из ContentCenter
« Ответ #2 : 18-02-2021, 05:25:33 »
в общем некоторое время я сидел и недоумевал как же так, в одном языке есть .Item в другом его нет...
Ну это не единственное различие. Работа с событиями синтаксически различается в C# и VB.NET. На VB.NET работы с указателями нет, хотя к счастью указатели в NET языках при работе через не особо нужны.

Оффлайн slavnov07Автор темы

  • ADN OPEN
  • Сообщений: 11
  • Карма: 1
Re: C# вставка в Assembly из ContentCenter
« Ответ #3 : 18-02-2021, 12:46:45 »
Ссылку на приложение можно получить из ссылки на сборку
у меня там сначала проверка идет открыт ли inventor если нет то открывает его, это не addin, просто стороннее приложение

Оффлайн R.I.Chernov

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: C# вставка в Assembly из ContentCenter
« Ответ #4 : 18-02-2021, 21:21:42 »
у меня там сначала проверка идет открыт ли inventor
Я советую вам вынести проверку из данного метода в отдельный.
В программировании я новичок...но ненадолго! ;)