Всем привет!
за мой "говнокод" прошу строго не судить)
Если вдруг кому понадобится вставка (в данном случае мне надо было выгрузить всю библиотеку) вот код:
string ChilDNodes_1 = "Крепежные изделия";
string ChilDNodes_2 = "Болты Винты";
string ChilDNodes_3 = "С шестигранной головкой";
string ChilDNodes_4 = "Болт ГОСТ 7798";
string NameColumn = "DESIGNATION";
тут есть отличие от vb.net, в том что у vb.net идет:
oContentNode = oContentCenter.TreeViewTopNode.ChildNodes.Item["Имя узла"]
у c# идет:
oContentNode = oContentCenter.TreeViewTopNode.ChildNodes["Имя узла"]
в общем некоторое время я сидел и недоумевал как же так, в одном языке есть .Item в другом его нет...
//функция принимает ссылку на открытый inventor, открытую сборку, имена узлов и имя столбца в библиотеке(designation)
private void PasteInInventor(Inventor.Application InvApp, Inventor.AssemblyDocument OpenAssemblyDoc, string ChilDNodes_1, string ChilDNodes_2, string ChilDNodes_3, string ChilDNodes_4, string NameColumn)
{
Inventor.ContentCenter oContentCenter = InvApp.ContentCenter; //получаем ссылку на ContentCenter
Inventor.ContentTreeViewNode oContentNode = default;
oContentNode = oContentCenter.TreeViewTopNode.ChildNodes[ChilDNodes_1].ChildNodes[ChilDNodes_2].ChildNodes[ChilDNodes_3];
long AllPoint, NowPoint; //этими переменными реализован счётчик количества строк в библиотеке
NowPoint = 0;
foreach (Inventor.ContentFamily oFamily in oContentNode.Families)//тут бегаем по семействам в папке/подпапке узла
{
AllPoint = oFamily.TableRows.Count;
if (oFamily.DisplayName == ChilDNodes_4)
{
foreach (Inventor.ContentTableRow ContTableRow in oFamily.TableRows)//тут бегаем по строкам таблицы
{
NowPoint += 1;
var ContTableRow_Designation = ContTableRow.GetCellValue(NameColumn);
Inventor.MemberManagerErrorsEnum failureCM = default;
string MessageProbl = "You_have_a_Problem";
var CreateMem = oFamily.CreateMember(ContTableRow, out failureCM, out MessageProbl);
Inventor.TransientGeometry transientGeometry = InvApp.TransientGeometry;
var OpenDoc = OpenAssemblyDoc.ComponentDefinition.Occurrences.Add(CreateMem, transientGeometry.CreateMatrix());//создание вхождения
string txt = $"{NowPoint} из {AllPoint}";
EventArgs E = new EventArgs();
label1_Click(txt, E);//тут просто выводится счётчик
}
}
}
}
если необходимо расшарить какие узлы есть в другом узле:
private void GetNodes (Inventor.Application InvApp, Inventor.AssemblyDocument OpenAssemblyDoc, string ChilDNodes_1, string ChilDNodes_2, string ChilDNodes_3, string ChilDNodes_4, string NameColumn)
{
Inventor.ContentCenter oContentCenter = InvApp.ContentCenter; //получаем ссылку на ContentCenter
Inventor.ContentTreeViewNode oContentNode = default;
oContentNode = oContentCenter.TreeViewTopNode.ChildNodes[ChilDNodes_1];//тут в зависимости от вложенности можно добавить ChilDNodes_2 и тд.
long AllPoint, NowPoint;
NowPoint = 0;
EventArgs E1 = new EventArgs();
string txt = $"{oContentNode.FullTreeViewPath} количество семейств {oContentNode.ChildNodes.Count}";
foreach (Inventor.ContentTreeViewNode item in oContentNode.ChildNodes)
{
txt = (string)item.DisplayName;//выводим имя узла
ChildNodes_Click(txt, E1);
}
}