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

NX Open - объекты Drafting'а


harbel

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

Как в программе NX Open узнать, какому чертежу рабочей части (какому листу) принадлежит графический объект?

Или по другому: Как выбрать в части (программным путем) объекты только одного листа чертежа?

Ведь в цикле перебора объектов части можно только тип указать...

И, вроде, нету такого свойства у объектов как чертеж/лист, хотя в Info-> Object указывается, какому чертежу

принадлежит объект...

(речь идет об объектах drafting'а типа аннотаций)

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


Информация о дополнительных данных объекта

extern int UF_DRF_ask_associativity_data (

tag_t object,

int * num_associativities,

UF_DRF_object_assoc_data_p_t * associativity_data );

extern int UF_DRF_ask_associative_origin (

tag_t drafting_entity,

UF_DRF_associative_origin_p_t * origin_data,

double origin[ 3 ] );

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

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

(никаких ассоциативных объектов у них нет)

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

Увы, как я и думал никаких ассоц. данных у меня нет.

Пока не сделаешь set_associativit , ничего не получишь по ask_associativity, а объекты создавал не я.

Так что проблема, похоже, решения не имеет... :-(

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

На данный момент ( для NX2 ) решение такое.

1. Получаешь тег вида чертежа. Например так

int UF_DRAW_ask_current_drawing ( tag_t * drawing_tag );

int UF_DRAW_ask_view_of_drawing ( const tag_t drawing, tag_t * view );

2. Циклишься по объектам с типом UF_VIEW_DEPENDENT_OBJECTS в этом виде при помощи

int UF_VIEW_cycle_objects ( tag_t view, UF_VIEW_cycle_objects_t type, tag_t * object );

PS Known bugs

1. Скорее всего таким макаром (UF_VIEW_cycle_objects) можно пройтись по объектам ТОЛЬКО текущего чертежа ( активного ).

2. Для 100% гарантии что все объекты у тебя пройдут через цикл ( UF_VIEW_cycle_objects ) предварительно надо сделать

int uc6430 ( char * cp1, double * rr2, double * rr3 ); // сохранили scale / view center

int UF_VIEW_fit_view ( tag_t view_tag, double fraction ); // fit

// тут проциклились по объектам

int uc6431 ( char * cp1, double * rp2, double rp3 ); //восстановили scale / view center

Т.е. в сумме алгоритм такой

int UF_DRAW_ask_current_drawing ( tag_t * drawing_tag );

int UF_DRAW_ask_view_of_drawing ( const tag_t drawing, tag_t * view );

int uc6430 ( char * cp1, double * rr2, double * rr3 );

int UF_VIEW_fit_view ( tag_t view_tag, double fraction );

// цикл при помощи

int UF_VIEW_cycle_objects ( tag_t view, UF_VIEW_cycle_objects_t type, tag_t * object );

int uc6431 ( char * cp1, double * rp2, double rp3 ); //восстановили scale / view center

Regardzzz ...

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

опрос происходит, только имя вытащить не дает - ошибку пишет

имя так извлекаю:

UF_VIEW_cycle_objects(tag_t view_tag, UF_VIEW_cycle_objects_t view_c_o_type, tag_t &same_tab);

UF_OBJ_ask_name(tag_t same_tab, char temp_str[ 30 + 1 ] );

последняя выдает ошибку выполнения

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

если существует объекта типа note со своим именем на листе чертежа

int UF_DRF_create_note ( int num_lines_text, char * text_string[ ], double origin_3d[ 3 ], int orientation, tag_t * note_tag );

то его имя вытягивается посредством UF_OBJ_ask_name(...) , из вышеизложенных действий.

Однако, при присвоении объекту имени через UF_OBJ_set_name(...) , оно не вытягивается.

Как это имя можно получить? Или, тогда найти объект через его tag_t?

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

опрос происходит, только имя вытащить не дает - ошибку пишет

имя так извлекаю:

UF_VIEW_cycle_objects(tag_t view_tag, UF_VIEW_cycle_objects_t view_c_o_type, tag_t &same_tab);

UF_OBJ_ask_name(tag_t same_tab, char temp_str[ 30 + 1 ] );

последняя выдает ошибку выполнения

Из документации

If the object you query is not of an

object type listed in uf_object_types.h or if the object has no name, an

error code returns and name is set to the empty string, "".

Если запрашиваемый объект не имеет типа определенного в uf_object_types.h

или не имеет имени то код ошибки возвращается и имя устанавливается в пустую строку

Я бы рекомендовал или пользоваться аттрибутом или при анализе кода возврата дополнительно анализировать первый

элемент массива возращаемой строки

if(irc && obj_name[0] != NULL) ошибка

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

Спасибо, niki

Вариант с циклом через VIEW действительно работает. Он позволяет выбрать

объекты с одного листа чертежа, что мне и нужно.

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

Мой вариант

extern int UF_DRAW_ask_current_drawing (tag_t * drawing_tag );

extern int UF_DRAW_ask_view_of_drawing (const tag_t drawing, tag_t * view );

extern int UF_VIEW_ask_type (tag_t view_tag, UF_VIEW_type_t * type, UF_VIEW_subtype_t * subtype );

если type == UF_VIEW_DRAWING_SHEET_TYPE, то

extern int UF_VIEW_fit_view (tag_t view_tag, double fraction );

extern int UF_VIEW_ask_visible_objects (tag_t view, int * n_visible, tag_t ** visible, int * n_clipped, tag_t ** clipped );

здесь Вы получите объекты которые располагаются на текущем листе

Проверено работает в NX4.0.4.2 :clap_1:

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

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

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

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

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

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

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

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

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

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

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




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