Перейти к публикации

Unigraphics NX Open API. Есть вопросы


mannyz

Рекомендованные сообщения

Всем приветик!

Суть такова: надо написать dll-ку при помощи NX Open API (для с++), которая используется в Unigraphics NX и экспортирует содержимое открытого файла (.prt) в некий xml-файл. Возникли сложности с реализацией того, что должна делать dll-ка. Подскажите, пожалуйста, как можно осуществить следующее (или хотя бы какие функции надо использовать):

1. выявить в модели (обрабатываемый открытый файл) ссылки на объекты. То есть надо записать в xml-файл полную информацию о дублирующемся элементе (шаблоне) только один раз и дополнить описание модели информацией о том, где вставлять данный шаблонный элемент. Все, что было в файле uf_assem.h (кажется, так), перепробовал, но ничего толкового не вышло.

2. нужно переносить в xml-файл данные о точках. При этом хорошо бы уметь разделять информацию о "системных" точках (видимо есть такие, потому что в модели я нарисовал две точки, а насчитал аж 34) и "пользовательских". Кстати, я даже еще не нашел концов как именно можно считывать информацию о точках (координаты и т.п.). Понятно, что у нас есть общий цикл, который перебирает объекты модели, и мы смотрим на тип и подтип этого объекта. То есть понять, что это точка мы можем. А дальше что? Вышел пока только на какой-то класс 3dPoint (кажется так звучит). Но потом сразу же вышел с работы домой.

3. И как можно повлиять на качество наложения фасетной сетки. Может быть, в API что-то и было, но так как я в геометрическом моделировании не силен, мог упустить из виду. Было бы здорово уметь выдавать качество от совсем угловатой сетки до совсем прилегающей к поверхности объекта (детали). Это случайно не в структуре для properties надо передавать в вызове функции для получения фасетной модели? ))

Кстати, может быть, кто-нибудь поделиться NX Open API Guide? Или любыми ресурсами по NX Open API. Был бы признателен.

Помогите, пожалуйста

Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...


1. выявить в модели (обрабатываемый открытый файл) ссылки на объекты. То есть надо записать в xml-файл полную информацию о дублирующемся элементе (шаблоне) только один раз и дополнить описание модели информацией о том, где вставлять данный шаблонный элемент. Все, что было в файле uf_assem.h (кажется, так), перепробовал, но ничего толкового не вышло.

2. нужно переносить в xml-файл данные о точках. При этом хорошо бы уметь разделять информацию о "системных" точках (видимо есть такие, потому что в модели я нарисовал две точки, а насчитал аж 34) и "пользовательских". Кстати, я даже еще не нашел концов как именно можно считывать информацию о точках (координаты и т.п.). Понятно, что у нас есть общий цикл, который перебирает объекты модели, и мы смотрим на тип и подтип этого объекта. То есть понять, что это точка мы можем. А дальше что? Вышел пока только на какой-то класс 3dPoint (кажется так звучит). Но потом сразу же вышел с работы домой.

Здравствуйте,

Укажите версию юниграфикса! Далее пишу со своей колокольни NX 4.

Не важно на чем вы пишите, .NET или C++ или другие варианты, функции одинаковые. Немого меняется синтаксис, например то пишутся подчеркивания, то слитно, - но все это легко находится во встроенной справке. Я пишу на VB.NET, пользуюсь поиском в TotalCommaner в \ugdoc\ваш язык\ , удобно искать и по имени, и по содержимому (для сложных фраз).

1. Внутри модели ссылки на объекты выглядят как свойство .tag каждого объекта.

Открытый файл будет что-то в духе thesession.part.getdisplay() , где соответственно сессия описывается как Dim thesession as nxopen.session = getsession().

Перебор внутри файла ищите по слову CycleObj и по CycleObjInPart (если знаете тип).

Я совершенно не понял, что вы хотите делать с файлом. Экспорт? Или скопировать координаты всех точек в другой файл?

В uf_assem.h я не заглядывал, как-то обошлось без заголовочных файлов.

2. Никаких хитрых системных точек в модели нет. Просто при переборе объектов, вы найдете GetStatus() , который возвращает 4 значения, среди которых: DELETED, и ALIVE. В вашем случае, сразу в цикле перебора CycleObj проверяете статус = ALIVE и будет вам счастье. В справке на каждом шагу написано - проверяйте свойство Alive, во избежание проблем.

Вы знаете, что Вам нужны точки. Т.е. тип известен - перебирайте через CycleObjInPart, проверяйте .getstatus() = ALIVE.

Отлично, 3dPoint, это правильно. Насколько помню, у него есть свойства X, Y, Z. Смотрите их, и сохраняете в нужный Вам файл.

Прошу прощения, не могу выложить исходников. NX на работе, USB-закрыты, дома нету. Постарался указать общее направление. На этом форуме отличные вопросы и ответы по NX Open, мне уже много раз помогли.

ps я так же выбирал программно все твердые тела на определенном слое, несколько дней думал, какой подтип для перебора поставить. Оказалось подтип = 0 и все отлично. Советую попробовать подтип 0 если будите сомневаться :).

Успехов!

Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте,

Укажите версию юниграфикса! Далее пишу со своей колокольни NX 4.

...................

Успехов!

Спасибо за ответ. Честно говоря, после того как прошло три дня с поста я не заглядывал на форумы, так как окончательно отчаялся - никто не отвечал. Но очередная нужда случайно забросила меня опять сюда (а я и забыл, что постил здесь :)).

Про ALIVE теперь буду знать. Получается, что можно отследить историю изменения модели?

Я совершенно не понял, что вы хотите делать с файлом. Экспорт? Или скопировать координаты всех точек в другой файл?

Получается, что я делаю экспорт через копирование координат в xml-файл. Суть в том, что мы копируем геометрию из NX в виде фасетных моделей солидов (координат фасетов) в этот самый xml-файл. А потом в другой программе читаем файл и получаем NX-овские солиды. Ну и кроме солидов, желательно копировать точки и в дальнейшем все другие геом.примитивы.

Сейчас как раз надо разобраться как сделать более оптимизированно весь экспорт с учетом шаблонов (prototype и, соответственно, их occurrence), в котором должна поддерживаться вложенность шаблонов. В NX распознать все это дело можно, но возникают трудности с сохранением фасетных моделей шаблонов. То есть, фасетные модели солидов из prototype надо сохранять (считывать координаты точек фасетов), грубо говоря, в локальной системе координат этого prototype, а не в глобальной системе всей сборки, где данный prototype выступает как occurrence. При этом надо перемещаться по иерархии без UF_ASSEM_set_work_part (), так как на такое переключение тратиться много времени. Может поможет UF_ASSEM_set_work_part_quietly(). А вообще, у меня идея при пробегании по иерархии part-ов менять систему координат. Надо посмотреть, что из этого получится.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

×
×
  • Создать...