Обход компонентов сборки в NXOpen

Обход (перечисление) компонентов может понадобиться по разным причинам. Например, для назначения атрибутов компонентам или для чтения каких-то атрибутов. Может быть для составления отчета или перечня. Рассмотрим обход компонентов сборки в NXOpen.

Обход компонентов сборки в NXOpen: Код

Подобная задача рассматривается в пособии Getting Started with NXOpen (стр.87). Однако, там рассмотрен обход всех компонентов сборки, включая вложенные, при помощи рекурсии и вспомогательной функции вывода на экран Guide.InfoWriteLine(), которой нет в NX10. Кроме того, не на С#, а на Visual Basic, который впрочем, кроме синтаксиса ничем от C# не отличается. В конце статьи рассмотрим ещё один важный момент, связанный с реализацией сложных алгоритмов обработки компонентов при обходе. Обо всем по порядку.

Код обхода компонентов первого уровня сборки таков:

using System;
using NXOpen;

public partial class NXJournal
{
 // Информационное окно.
 static ListingWindow lw;
 //Основная рабочая функция журнала.
 public static void Main(string[] args)
 {
 NXOpen.Session theSession = Session.GetSession();
 NXOpen.Part workPart = theSession.Parts.Work;
 NXOpen.Part displayPart = theSession.Parts.Display;
 // Конструктор и конфигурация объекта для поля окна вывода lw.
 lw = theSession.ListingWindow;
 String outputFile = @"C:\Users\user\Desktop\nxTest.txt";
 lw.SelectDevice(ListingWindow.DeviceType.FileAndWindow, outputFile);
 lw.Open();
 // Вызов перечисления компонентов сборки (отображаемой детали).
 AssemblyList(displayPart);
 // Освобождение информационного окна.
 lw.Close();
 lw.SelectDevice(ListingWindow.DeviceType.Window, "");
}
//Вывод списка компонентов сборки и их типа в информационное окно NX.
public static void AssemblyList(Part inputPart)
{
 // Взять имя детали целевой сборки. Вывести его в информационное окно.
 String inputPartName = System.IO.Path.GetFileNameWithoutExtension(inputPart.FullPath);
 lw.WriteLine(inputPartName);
 // Создать массив компонентов из всех потомков первого уровня у целевой сборки.
 NXOpen.Assemblies.Component[] allComps = inputPart.
 ComponentAssembly.RootComponent.GetChildren();
 // Для каждого потомка вывести имя в информационное окно.
 foreach (NXOpen.Assemblies.Component child in allComps)
 {
 String childName = System.IO.Path.GetFileNameWithoutExtension(child.
 Prototype.OwningPart.FullPath);
 lw.WriteLine(childName);
 }
}
public static int GetUnloadOption(string dummy)
{
 return (int)Session.LibraryUnloadOption.Immediately;
}
}

Журнал или dll?

Есть разница между разработкой журнала и разработкой dll на NXOpen (в Visual Studio). При разработке журнала весь код должен быть в одном файле, т.к. при запуске мы выбираем лишь один файл. Если логика работы журнала сложная и требует создания дополнительных классов, то они конечно могут быть описаны в том же файле журнала, но это приведет к потере читабельности — файл станет очень большим. Кроме того, упомянутая сложная логика может потребовать для работы более продвинутых функций системы .Net, например Linq. В таких случаях, к проекту в Visual Studio может быть добавлена ссылка на dll. Над процессом компиляции журнала внутри NX пользователь не имеет такого контроля, как в Visual Studio. Поэтому сложные проекты, где классы распределяются по разным файлам и добавляются дополнительные ссылки, обычно реализуют не в виде журнала, а в виде скомпилированного приложения. Самым существенным недостатком разработки в Visual Studio является то, что для запуска dll нужна более продвинутая лицензия NX (dotnet_author), в то время как для запуска журнала никаких дополнительных лицензий не нужно.

Журнал запускается комбинацией «Alt+F8» (Меню — Инструменты журнал — Воспроизведение), нужно выбрать правильный тип файла, а dll запускается по «Ctrl+U» (Файл — Выполнить — NXOpen).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.