NX Open: установка атрибута

Одним из способов автоматизации работы в Siemens NX является написание программ или журнала при помощи библиотеки NX Open. Часто бывает так: сначала записывается файл журнала, а затем из него убирается все лишнее и оставшийся код копируется в приложение. Можно просто запустить журнал, записанный ранее и ничего не компилировать. Рассмотрим создание атрибута детали в NX.

NX Open - Создание атрибута детали
NX Open — Начальный фрагмент журнала. Пространства имен System и NXOpen, объявление класса NXJournal и переменных для сессии, рабочей и отображаемой детали в методе Main.

NX Open: журнал

Записать журнал: Меню — Инструменты — Журнал — Запись

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

Установить язык записи журнала (перед созданием): Меню — Настройки — Интерфейс пользователя — Инструменты — Журнал

Приведенный ниже журнал записан на C#. Есть варианты: С++, Java, Python и Visual Basic.

Запустить журнал: Alt+F8, либо Меню — Инструменты — Журнал — Воспроизведение

Файл журнала — это обычный текстовый файл, лучше его открывать редактором с подсветкой синтаксиса (например, Notepad++).

Справка по 10, 11 и 12 версии NX доступна на официальном сайте Siemens PLM (русский, английский). По программированию для NX 10 информация здесь (английский). В системе онлайн-справки некоторые ссылки завязаны на всплывающие окна, которые у большинства нормальных пользователей заблокированы. Иногда приходится единично допускать открытие окон (в Mozilla можно). Кроме того, справка по составу API распространяется в формате chm. При скачивании этого файла, в Windows 7 может потребоваться его разблокировать: ПКМ на файле — Свойства — Вкладка «Общие» — нажать кнопку «Разблокировать». Иначе пишет «Переход на веб-страницу отменен».

Дополнительно, материал по программированию в NX Open есть в пособии Getting Started with NX Open здесь (английский). Пособие новое, поэтому  пространства имен Guide с функциями-помощниками в 10 версии NX нет. Для вывода информации в текстовое окно можно воспользоваться стандартным ListingWindow.

Журнал для установки атрибута «АТР» со значением 23

Приводится журнал, из которого удалены лишние строки, возникающие при записи интерактивной сессии. Для запуска, скопировать в текстовый файл, сохранить с расширением cs, далее создать в NX новую модель и запустить журнал при помощи комбинации Alt+F8 (выбрать тип файла cs, по дефолту всегда vb). Щелкнув ПКМ на модели в дереве навигатора сборки, в свойствах можно найти созданный атрибут.

using System;
using NXOpen;
public class NXJournal
{
 public static void Main(string[] args)
 {
 NXOpen.Session theSession = NXOpen.Session.GetSession();
 NXOpen.Part workPart = theSession.Parts.Work;
 NXOpen.Part displayPart = theSession.Parts.Display;
 // Целевые объекты для задания атрибута с именем "АТР".
 NXOpen.NXObject[] objects1 = new NXOpen.NXObject[1];
 objects1[0] = workPart;
 // Объявление переменной и вызов конструктора для объекта AttributePropertiesBuilder
 NXOpen.AttributePropertiesBuilder attributePropertiesBuilder1;
 attributePropertiesBuilder1 = theSession.AttributeManager.
 CreateAttributePropertiesBuilder(workPart, objects1,
 NXOpen.AttributePropertiesBuilder.OperationType.None);
 // Общие параметры конструктора атрибутов.
 attributePropertiesBuilder1.IsArray = false;
 attributePropertiesBuilder1.DataType = NXOpen.AttributePropertiesBaseBuilder.
 DataTypeOptions.String;
 attributePropertiesBuilder1.Units = "MilliMeter";
 attributePropertiesBuilder1.SetAttributeObjects(objects1);
 attributePropertiesBuilder1.Title = "АТР";
 attributePropertiesBuilder1.StringValue = "23";
 // Создание атрибута.
 bool changed1;
 changed1 = attributePropertiesBuilder1.CreateAttribute();
 NXOpen.NXObject nXObject1;
 nXObject1 = attributePropertiesBuilder1.Commit();
 // Деструктор объекта.
 attributePropertiesBuilder1.Destroy();
 }
 public static int GetUnloadOption(string dummy) 
 { 
 return (int)NXOpen.Session.LibraryUnloadOption.Immediately; 
 }
}

Объектная модель NX Open

Оригинал документа здесь (английский).

TaggedObject — базовый класс для элементов модели NX (линия, вытягивание, рабочая деталь). Теговый объект. Класс определяет т.н. persistent entities, т.е. такие объекты, которые сохраняются после завершения работы c NX (при сохранении измененной модели). В некоторых случаях, объекты этого класса представляют собой несохраняемые элементы. У объектов TaggedObject есть тег, используемый при взаимодействии с UF API.

В противовес этому типу есть класс TransientObject не сохраняемые объекты. У них нет тега и для них есть метод-деструктор Dispose(). При программировании на языках со сборщиками мусора, для таких объектов деструктор вызывается автоматически.

NXObject — наследник TaggedObject. Класс определяет методы и свойства для установки и чтения имен и атрибутов элементов модели NX.

TaggedObjectCollection — базовый класс для классов, представляющих коллекцию объектов TaggedObject. Как правило, в состав этих классов дополнительно входят методы по созданию новых теговых объектов. В приведенном коде, из коллекции деталей в сессии происходит выбор рабочей детали и детали отображаемой:

NXOpen.Part workPart = theSession.Parts.Work;
NXOpen.Part displayPart = theSession.Parts.Display;

Классы Session и UI служат шлюзом для классов API. Ссылки на все объекты в составе API берутся напрямую или посредством методов или свойств этих двух классов. Класс UI доступен только в случае работы программы в пределах интерфейса NX, в пакетном режиме не доступен.

Part является классом детали NX. Содержит множество коллекций TaggedObjectCollection. Элемент построения модели в NX называется feature. Коллекции таких элементов содержатся в каждом экземпляре TaggedObjectCollection внутри объекта класса Part. Коллекции используются для получения объектов класса FeatureBuilder при создании или изменении элементов построения. В нашем случае, Builder создается менеджером атрибутов, а не коллекцией.

Builder. Элементы построения модели и другие объекты создаются и редактируются при помощи объектов класса Builder. Для создания объекта, вызывается метод Commit(). По завершении работы объекта Builder следует вызывать метод Destroy().

Атрибуты детали и атрибуты компонента

Как известно, в NX атрибуты можно задавать для детали и для компонента (которые есть только в рамках сборки). Приведенный код устанавливает атрибут детали. Применимость атрибута определяется тем, какой аргумент передается в качестве целевого массива экземпляров NXObject в функцию CreateAttributePropertiesBuilder. Это второй аргумент. Если в приведенном коде строки 10,11 и 12 заменить на следующие, то будет задан атрибут для компонента, а именно для первого компонента сборки:


NXOpen.Assemblies.Component[] allComps = workPart.
ComponentAssembly.RootComponent.GetChildren();
// Целевые объекты для задания атрибута с именем "АТР".
NXOpen.NXObject[] objects1 = new NXOpen.NXObject[1];
objects1[0] = allComps[0];

 

NX Open: установка атрибута: 4 комментария

  1. У Вас очень хорошии статьи.
    Меня интересует, есть ли доступная обучающая литература по nxopen для новичков? Какими рессурсами Вы пользовались при изучении nxopen, кроме документации от сименса?

    1. Добрый вечер, Денис.
      Книг по NX Open я не встречал. Что касается других общедоступных сведений, то есть ресурс nxjournaling.com. Там можно посмотреть некоторые полезные вещи. Основным же источником информации, кроме официальной справки, является запись журналов при работе в NX. Ещё, NX в комплекте содержит примеры NX Open на разных языках (C#, Java, VB, C++, Python). Они находятся где-то в C:\Program Files\Siemens\NX 11.0\UGOPEN\Sample… Если у Вас на работе есть NX c установленными кастомными инструментами журнального типа (не dll), то Вы можете посмотреть запускаемый при нажатии на кнопку файл. Для этого нужно войти в режим настройки панели инструментов и открыть настройки выбранной кнопки, найти путь и имя файла и открыть его в текстовом редакторе.

      1. Скажи пожалуйста, у тебя есть какая-нибудь деталь NX, построенная с помощью nx open api c#. Буду очень благодарен

        1. Добрый вечер. Таких деталей у меня, к сожалению, нет. Дело в том, что для автоматизации процесса моделирования в NX, как правило применяют семейства деталей или User Defined Features (элементы пользователя).

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

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

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