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

Как достучаться до ограничивающих блоков (параллелепипедов) программным способом?


NeedMoreLODs

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

Доброго времени суток! :-)

Unigraphics NX6.0, NX7.5.

Есть необходимость "достучаться" до ограничивающих блоков (русская документация называет их по разному (например граничными параллелепипедами), английской у меня нет) вхождений(экземпляров) компонент в сборке. Это те блоки, которые система использует при работе функции сборки "Открыть по близости". Насколько я понял, эти блоки сохраняются в файле сборки при её сохранении.

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

Просмотрел UF_ASSEM в Open C Reference Guide. Ничего не нашёл(плохо искал?) - потому прошу помощи.

Есть ли вообще возможность программным способом работать с этими блоками?

Если есть - напишите имена хотя бы одной-двух функций из UG/Open или NX Open, ну или покажите в каком направление копать от забора и до обеда.

Изменено пользователем Ленивый
Ссылка на сообщение
Поделиться на других сайтах


Не очень понял о чем речь

Не использую русскую версию и документацию

Ты не о габаритах спрашиваешь

Тогда это смотри

int UF_MODL_ask_bounding_box

(

tag_t object, 

double bounding_box [ 6 ] 

)



int UF_MODL_ask_bounding_box_aligned

(

tag_t object, 

tag_t csys_tag, 

logical expand, 

double min_corner [ 3 ] , 

double directions [ 3 ] [ 3 ] , 

double distances [ 3 ] 

)



int UF_MODL_ask_bounding_box_exact

(

tag_t object, 

tag_t csys_tag, 

double min_corner [ 3 ] , 

double directions [ 3 ] [ 3 ] , 

double distances [ 3 ] 

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

Не очень понял о чем речь

Вы правы - я плохо изложил суть проблемы.

Ниже пример:

Сборка с тремя компонентами.

Курсор мыши в навигаторе сборки наведён на компонент 3 (не знаю как курсор в скриншот включить).

Детали компонент закрыты(выгружены), но, поскольку один раз они уже были загружены, то система посчитала габариты и сохранила их в в памяти, а при сохранении сборки - и файле сборки 0.

Соотетственно габариты при наведении на вхождение компонента подсвечиваются.

Функция сборки "Открыть по близости" как раз эти габариты и использует, когда детали компонент выгружены, но надо открыть компоненты, габариты которых попадают(пересекаются) в заданную область. Функция очень актуальна при работе в больших сборках, открыть которые целиком не позволяет либо ограничение по величине памяти, и/или ограничение по быстродействию системы.

Почему-то в UF_MODL я даже не догадался посмотреть, спасибо, похоже, что это то, что нужно.

Доберусь до компилятора - посмотрю.

Но вот только похоже, что есть функции только на запрос, а вот функций для манипуляции габаритами нет. :sad:

Пример одной из задач - необходимо открыть сборку.

Пробежаться по всем вхождениям компонент из контекста текущей сборки.

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

И каким-либо образом эти габариты создать.

Или, как минимум, хотя бы понять, что для данного компонента габариты отсутствуют.

P.S.: Мы когда-то далеко не сразу поняли, почему функция сборки "Открыть по близости" в некоторых случаях не открывает компоненты, которые ЯВНО попадают в заданную область. Потом, когда разобрались, не могли понять - а почему это для вхождений этих компонент NX не сгенерировал габариты. Печально, но факт - NX приходится изучать зачастую методом тыка.

Изменено пользователем Ленивый
Ссылка на сообщение
Поделиться на других сайтах

Не уверен что такая функция есть которая габариты устанавливает

Вы наверно не компоненты а instace имели в виду

Там ведь чтобы подсветить нужно еще положение в пространстве

одного габарита не достаточно

(Компонент может встречаться в сборке много раз)

Посмотрите в UF_PART

Может что-то вроде этого Вам подойдет

int UF_PART_open_quiet

(

const char * part_name, 

tag_t * part, 

UF_PART_load_status_t * error_status 

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

Не уверен что такая функция есть которая габариты устанавливает

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

Вы наверно не компоненты а instace имели в виду

Да, instance.

Экземпляр компонента.

В русскоязычных справочных системах на NX6 и NX7.5 терминология несколько разная, поэтому даже не знал, как написать. В итоге в предыдущем своём посте экземпляры я назвал вхождениями.

(Компонент может встречаться в сборке много раз)

Да.

И это тоже проблема.

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

И было бы логичным, если бы UG автоматически каким-либо образом переносил габариты экземпляров компонент в подсборках (у экземпляра компонента, находящемся на первом уровне подсборки, габарит всегда есть, ибо без хотя бы однократной загрузки детали компонента экземпляр компонента в подсборке было бы не создать) в сборку верхнего уровня, но он этого не делает. :sad:

Вот пример такой сборки.

Экземпляры компонет (3, 4, 5) подсборки 1 имеют габариты (подсвечиваются при наведении мыши и т.п.) и, соответственно, детали компонент подгрузятся и экземпляры компонент откроются функцией "Открыть по близости".

А вот экземпляры тех же компонент, но в подсборке 2, таких габаритов не имеют, и функцией сборки "Открыть по близости" найдены по габаритам и открыты не будут.

И это при том, что если сделать сборку 2 отображаемой, то габариты будут прекрасно работать, но, как я уже говорил, габариты из подсборки в сборку автоматом не переносятся, и в сборке 0 габаритов у экземпляров компонент подсборки 2 не будет.

P.S.: Да, было бы проще просто ОДИН раз загрузить сборку (с последующим сохранением после расчёта системой габаритов для всех экземпляров компонент) с опцией "Все компоненты", но это не получается из-за ограничений по предельному размеру доступного для процесса виртуального адресного пространства в 2-3Гб на 32х-битной архитектуре. Ну и быстродействие того-этого. :smile:

А 64х битных станций долго ещё не будет.

P.P.S.: Похоже, что в какой-то мере эту тему я создал зря, поскольку только сейчас обнаружил, что функция сборки "Обновить структуру" габариты генерирует и для таких экземпляров компонент (если файлы компонент доступны). :blink:

Но вот программный поиск таких экземпляров всё-равно нужен.

nut888, cпасибо за помощь! Плюсанул бы, но тут такой функции нет. :smile:

Изменено пользователем Ленивый
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

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

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

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




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